Mercurial > hg > octave-lojdl > gnulib-hg
annotate lib/c-stack.c @ 3910:2f34e0925fe3
(segv_handler, c_stack_action) [! defined SA_SIGINFO]:
Do not assume SA_SIGINFO behavior.
Bug reported by Jim Meyering on NetBSD 1.5.2.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sat, 22 Jun 2002 16:20:15 +0000 |
parents | f26afed46772 |
children | 181064782c71 |
rev | line source |
---|---|
3902
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
1 /* Stack overflow handling. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
2 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
3 Copyright (C) 2002 Free Software Foundation, Inc. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
4 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
5 This program is free software; you can redistribute it and/or modify |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
6 it under the terms of the GNU General Public License as published by |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
7 the Free Software Foundation; either version 2, or (at your option) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
8 any later version. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
9 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
10 This program is distributed in the hope that it will be useful, |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
13 GNU General Public License for more details. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
14 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
15 You should have received a copy of the GNU General Public License |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
16 along with this program; if not, write to the Free Software Foundation, |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
18 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
19 /* Written by Paul Eggert. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
20 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
21 /* NOTES: |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
22 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
23 A program that uses alloca, dynamic arrays, or large local |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
24 variables may extend the stack by more than a page at a time. If |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
25 so, when the stack overflows the operating system may not detect |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
26 the overflow until the program uses the array, and this module may |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
27 incorrectly report a program error instead of a stack overflow. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
28 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
29 To avoid this problem, allocate only small objects on the stack; a |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
30 program should be OK if it limits single allocations to a page or |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
31 less. Allocate larger arrays in static storage, or on the heap |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
32 (e.g., with malloc). Yes, this is a pain, but we don't know of any |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
33 better solution that is portable. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
34 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
35 No attempt has been made to deal with multithreaded applications. |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
36 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
37 If ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC, the current implementation |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
38 assumes that, if the RLIMIT_STACK limit changes during execution, |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
39 then c_stack_action is invoked immediately afterwards. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
40 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
41 #if HAVE_CONFIG_H |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
42 # include <config.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
43 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
44 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
45 #ifndef __attribute__ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
46 # if __GNUC__ < 3 || __STRICT_ANSI__ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
47 # define __attribute__(x) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
48 # endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
49 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
50 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
51 #include "gettext.h" |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
52 #define _(msgid) gettext (msgid) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
53 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
54 #include <errno.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
55 #ifndef ENOTSUP |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
56 # define ENOTSUP EINVAL |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
57 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
58 #ifndef EOVERFLOW |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
59 # define EOVERFLOW EINVAL |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
60 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
61 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
62 #include <signal.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
63 #if ! HAVE_STACK_T && ! defined stack_t |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
64 typedef struct sigaltstack stack_t; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
65 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
66 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
67 #include <stdlib.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
68 #include <string.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
69 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
70 #if HAVE_SYS_RESOURCE_H |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
71 # include <sys/resource.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
72 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
73 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
74 #if HAVE_UCONTEXT_H |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
75 # include <ucontext.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
76 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
77 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
78 #if HAVE_UNISTD_H |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
79 # include <unistd.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
80 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
81 #ifndef STDERR_FILENO |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
82 # define STDERR_FILENO 2 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
83 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
84 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
85 #if DEBUG |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
86 # include <stdio.h> |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
87 #endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
88 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
89 #include "c-stack.h" |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
90 #include "exitfail.h" |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
91 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
92 extern char *program_name; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
93 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
94 /* The user-specified action to take when a SEGV-related program error |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
95 or stack overflow occurs. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
96 static void (* volatile segv_action) (int); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
97 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
98 /* Translated messages for program errors and stack overflow. Do not |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
99 translate them in the signal handler, since gettext is not |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
100 async-signal-safe. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
101 static char const * volatile program_error_message; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
102 static char const * volatile stack_overflow_message; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
103 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
104 /* Output an error message, then exit with status EXIT_FAILURE if it |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
105 appears to have been a stack overflow, or with a core dump |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
106 otherwise. This function is async-signal-safe. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
107 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
108 static void die (int) __attribute__ ((noreturn)); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
109 static void |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
110 die (int signo) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
111 { |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
112 char const *message = |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
113 signo ? program_error_message : stack_overflow_message; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
114 segv_action (signo); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
115 write (STDERR_FILENO, program_name, strlen (program_name)); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
116 write (STDERR_FILENO, ": ", 2); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
117 write (STDERR_FILENO, message, strlen (message)); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
118 write (STDERR_FILENO, "\n", 1); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
119 if (! signo) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
120 _exit (exit_failure); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
121 kill (getpid (), signo); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
122 abort (); |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
123 } |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
124 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
125 #if HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
126 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
127 /* Direction of the C runtime stack. This function is |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
128 async-signal-safe. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
129 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
130 # if STACK_DIRECTION |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
131 # define find_stack_direction(ptr) STACK_DIRECTION |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
132 # else |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
133 static int |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
134 find_stack_direction (char const *addr) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
135 { |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
136 char dummy; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
137 return ! addr ? find_stack_direction (&dummy) : addr < &dummy ? 1 : -1; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
138 } |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
139 # endif |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
140 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
141 # if HAVE_XSI_STACK_OVERFLOW_HEURISTIC |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
142 # define get_stack_location(argv) 0 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
143 # else |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
144 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
145 # if defined RLIMIT_STACK && defined _SC_PAGESIZE |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
146 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
147 /* Return the minimum machine address deducible from ARGV. This |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
148 includes the addresses of all the strings that ARGV points at, as |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
149 well as the address of ARGV itself. */ |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
150 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
151 static char const * |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
152 min_address_from_argv (char * const *argv) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
153 { |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
154 char const *min = (char const *) argv; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
155 char const *p; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
156 while ((p = *argv++)) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
157 if (p < min) |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
158 min = p; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
159 return min; |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
160 } |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
161 |
f26afed46772
New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
162 /* Return the maximum machine address deducible from ARGV. */ |