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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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. */
f26afed46772 New file, from diffutils-2.8.2.
Jim Meyering <jim@meyering.net>
parents: