diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 44 | ||||
-rw-r--r-- | lib/afs.m4 | 13 | ||||
-rw-r--r-- | lib/error.m4 | 15 | ||||
-rw-r--r-- | lib/exitfail.m4 | 13 | ||||
-rw-r--r-- | lib/fstypename.m4 | 32 | ||||
-rw-r--r-- | lib/fsusage.m4 | 246 | ||||
-rw-r--r-- | lib/full-read.c | 19 | ||||
-rw-r--r-- | lib/full-write.c | 85 | ||||
-rw-r--r-- | lib/full-write.h | 24 | ||||
-rw-r--r-- | lib/getopt.m4 | 13 | ||||
-rw-r--r-- | lib/ls-mntd-fs.m4 | 282 | ||||
-rw-r--r-- | lib/onceonly.m4 | 63 | ||||
-rw-r--r-- | lib/safe-read.c | 82 | ||||
-rw-r--r-- | lib/safe-read.h | 25 | ||||
-rw-r--r-- | lib/safe-write.c | 19 | ||||
-rw-r--r-- | lib/safe-write.h | 25 | ||||
-rw-r--r-- | lib/unlocked-io.m4 | 22 | ||||
-rw-r--r-- | lib/xalloc.m4 | 32 |
18 files changed, 310 insertions, 744 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index 3250cdb3..80f3e62e 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am | |||
@@ -1,20 +1,38 @@ | |||
1 | ## Process this file with automake to produce Makefile.in | 1 | ## Process this file with automake to produce Makefile.in |
2 | 2 | ||
3 | noinst_LIBRARIES = libnagiosplug.a | 3 | noinst_LIBRARIES = libcoreutils.a libnagiosplug.a |
4 | 4 | ||
5 | libnagiosplug_a_SOURCES = getopt.c getopt1.c fsusage.c snprintf.c mountlist.c \ | 5 | # Will auto pick up fsusage.c mountlist.c |
6 | xmalloc.c xstrdup.c exitfail.c | 6 | libcoreutils_a_SOURCES = \ |
7 | cloexec.c cloexec.h \ | ||
8 | exit.h \ | ||
9 | exitfail.c exitfail.h \ | ||
10 | fsusage.h \ | ||
11 | full-read.c full-read.h \ | ||
12 | full-write.c full-write.h \ | ||
13 | getopt.c getopt.h getopt1.c \ | ||
14 | gettext.h \ | ||
15 | mountlist.h \ | ||
16 | safe-read.c safe-read.h \ | ||
17 | safe-write.c safe-write.h \ | ||
18 | unlocked-io.h \ | ||
19 | xalloc.h \ | ||
20 | xmalloc.c \ | ||
21 | xstrdup.c | ||
7 | 22 | ||
8 | libnagiosplug_a_LIBADD = @LIBOBJS@ | 23 | other_coreutils_files = \ |
9 | libnagiosplug_a_DEPENDENCIES = $(libnagiosplug_a_LIBADD) | 24 | error.c error.h \ |
25 | fsusage.c \ | ||
26 | getloadaavg.c \ | ||
27 | malloc.c \ | ||
28 | mountlist.c \ | ||
29 | realloc.c \ | ||
30 | strtod.c | ||
10 | 31 | ||
11 | # Extra GNU libraries required if target is missing these functions | 32 | libcoreutils_a_LIBADD = $(LIBOBJS) |
12 | EXTRA_DIST = ulonglong.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 \ | 33 | libcoreutils_a_DEPENDENCIES = $(libcoreutils_a_LIBADD) |
13 | inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 \ | 34 | |
14 | lib-link.m4 lib-prefix.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 afs.m4 \ | 35 | libnagiosplug_a_SOURCES = snprintf.c |
15 | fstypename.m4 fsusage.m4 ls-mntd-fs.m4 getopt.h gettext.h fsusage.h mountlist.h\ | ||
16 | error.m4 error.h error.c getloadavg.c xalloc.h unlocked-io.h unlocked-io.m4 malloc.c \ | ||
17 | onceonly.m4 realloc.c strtod.c exitfail.h full-read.h xstrdup.c xalloc.m4 exit.h \ | ||
18 | cloexec.c cloexec.h getopt.m4 exitfail.m4 | ||
19 | 36 | ||
20 | INCLUDES = -I$(srcdir) -I$(top_srcdir)/intl | 37 | INCLUDES = -I$(srcdir) -I$(top_srcdir)/intl |
38 | |||
diff --git a/lib/afs.m4 b/lib/afs.m4 deleted file mode 100644 index 9e7d7731..00000000 --- a/lib/afs.m4 +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | #serial 5 | ||
2 | |||
3 | AC_DEFUN([jm_AFS], | ||
4 | [ | ||
5 | AC_MSG_CHECKING(for AFS) | ||
6 | if test -d /afs; then | ||
7 | AC_DEFINE(AFS, 1, [Define if you have the Andrew File System.]) | ||
8 | ac_result=yes | ||
9 | else | ||
10 | ac_result=no | ||
11 | fi | ||
12 | AC_MSG_RESULT($ac_result) | ||
13 | ]) | ||
diff --git a/lib/error.m4 b/lib/error.m4 deleted file mode 100644 index 0bc2e689..00000000 --- a/lib/error.m4 +++ /dev/null | |||
@@ -1,15 +0,0 @@ | |||
1 | #serial 9 | ||
2 | |||
3 | AC_DEFUN([gl_ERROR], | ||
4 | [ | ||
5 | AC_FUNC_ERROR_AT_LINE | ||
6 | dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]). | ||
7 | jm_PREREQ_ERROR | ||
8 | ]) | ||
9 | |||
10 | # Prerequisites of lib/error.c. | ||
11 | AC_DEFUN([jm_PREREQ_ERROR], | ||
12 | [ | ||
13 | AC_REQUIRE([AC_FUNC_STRERROR_R]) | ||
14 | : | ||
15 | ]) | ||
diff --git a/lib/exitfail.m4 b/lib/exitfail.m4 deleted file mode 100644 index fa5b1493..00000000 --- a/lib/exitfail.m4 +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | # exitfail.m4 serial 3 | ||
2 | dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc. | ||
3 | dnl This file is free software, distributed under the terms of the GNU | ||
4 | dnl General Public License. As a special exception to the GNU General | ||
5 | dnl Public License, this file may be distributed as part of a program | ||
6 | dnl that contains a configuration script generated by Autoconf, under | ||
7 | dnl the same distribution terms as the rest of that program. | ||
8 | |||
9 | AC_DEFUN([gl_EXITFAIL], | ||
10 | [ | ||
11 | dnl No prerequisites of lib/exitfail.c. | ||
12 | : | ||
13 | ]) | ||
diff --git a/lib/fstypename.m4 b/lib/fstypename.m4 deleted file mode 100644 index 75723a14..00000000 --- a/lib/fstypename.m4 +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | #serial 3 | ||
2 | |||
3 | dnl From Jim Meyering. | ||
4 | dnl | ||
5 | dnl See if struct statfs has the f_fstypename member. | ||
6 | dnl If so, define HAVE_F_FSTYPENAME_IN_STATFS. | ||
7 | dnl | ||
8 | |||
9 | AC_DEFUN([jm_FSTYPENAME], | ||
10 | [ | ||
11 | AC_CACHE_CHECK([for f_fstypename in struct statfs], | ||
12 | fu_cv_sys_f_fstypename_in_statfs, | ||
13 | [ | ||
14 | AC_TRY_COMPILE( | ||
15 | [ | ||
16 | #include <sys/param.h> | ||
17 | #include <sys/types.h> | ||
18 | #include <sys/mount.h> | ||
19 | ], | ||
20 | [struct statfs s; int i = sizeof s.f_fstypename;], | ||
21 | fu_cv_sys_f_fstypename_in_statfs=yes, | ||
22 | fu_cv_sys_f_fstypename_in_statfs=no | ||
23 | ) | ||
24 | ] | ||
25 | ) | ||
26 | |||
27 | if test $fu_cv_sys_f_fstypename_in_statfs = yes; then | ||
28 | AC_DEFINE(HAVE_F_FSTYPENAME_IN_STATFS, 1, | ||
29 | [Define if struct statfs has the f_fstypename member.]) | ||
30 | fi | ||
31 | ] | ||
32 | ) | ||
diff --git a/lib/fsusage.m4 b/lib/fsusage.m4 deleted file mode 100644 index a0ab1e15..00000000 --- a/lib/fsusage.m4 +++ /dev/null | |||
@@ -1,246 +0,0 @@ | |||
1 | #serial 11 | ||
2 | |||
3 | # From fileutils/configure.in | ||
4 | |||
5 | AC_DEFUN([gl_FSUSAGE], | ||
6 | [ | ||
7 | AC_CHECK_HEADERS_ONCE(sys/param.h) | ||
8 | AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs_types.h) | ||
9 | jm_FILE_SYSTEM_USAGE([gl_cv_fs_space=yes], [gl_cv_fs_space=no]) | ||
10 | if test $gl_cv_fs_space = yes; then | ||
11 | AC_LIBOBJ(fsusage) | ||
12 | gl_PREREQ_FSUSAGE_EXTRA | ||
13 | fi | ||
14 | ]) | ||
15 | |||
16 | # Try to determine how a program can obtain filesystem usage information. | ||
17 | # If successful, define the appropriate symbol (see fsusage.c) and | ||
18 | # execute ACTION-IF-FOUND. Otherwise, execute ACTION-IF-NOT-FOUND. | ||
19 | # | ||
20 | # jm_FILE_SYSTEM_USAGE([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) | ||
21 | |||
22 | AC_DEFUN([jm_FILE_SYSTEM_USAGE], | ||
23 | [ | ||
24 | |||
25 | echo "checking how to get filesystem space usage..." | ||
26 | ac_fsusage_space=no | ||
27 | |||
28 | # Perform only the link test since it seems there are no variants of the | ||
29 | # statvfs function. This check is more than just AC_CHECK_FUNCS(statvfs) | ||
30 | # because that got a false positive on SCO OSR5. Adding the declaration | ||
31 | # of a `struct statvfs' causes this test to fail (as it should) on such | ||
32 | # systems. That system is reported to work fine with STAT_STATFS4 which | ||
33 | # is what it gets when this test fails. | ||
34 | if test $ac_fsusage_space = no; then | ||
35 | # SVR4 | ||
36 | AC_CACHE_CHECK([for statvfs function (SVR4)], fu_cv_sys_stat_statvfs, | ||
37 | [AC_TRY_LINK([#include <sys/types.h> | ||
38 | #ifdef __GLIBC__ | ||
39 | Do not use statvfs on systems with GNU libc, because that function stats | ||
40 | all preceding entries in /proc/mounts, and that makes df hang if even | ||
41 | one of the corresponding file systems is hard-mounted, but not available. | ||
42 | #endif | ||
43 | #include <sys/statvfs.h>], | ||
44 | [struct statvfs fsd; statvfs (0, &fsd);], | ||
45 | fu_cv_sys_stat_statvfs=yes, | ||
46 | fu_cv_sys_stat_statvfs=no)]) | ||
47 | if test $fu_cv_sys_stat_statvfs = yes; then | ||
48 | ac_fsusage_space=yes | ||
49 | AC_DEFINE(STAT_STATVFS, 1, | ||
50 | [ Define if there is a function named statvfs. (SVR4)]) | ||
51 | fi | ||
52 | fi | ||
53 | |||
54 | if test $ac_fsusage_space = no; then | ||
55 | # DEC Alpha running OSF/1 | ||
56 | AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)]) | ||
57 | AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1, | ||
58 | [AC_TRY_RUN([ | ||
59 | #include <sys/param.h> | ||
60 | #include <sys/types.h> | ||
61 | #include <sys/mount.h> | ||
62 | main () | ||
63 | { | ||
64 | struct statfs fsd; | ||
65 | fsd.f_fsize = 0; | ||
66 | exit (statfs (".", &fsd, sizeof (struct statfs))); | ||
67 | }], | ||
68 | fu_cv_sys_stat_statfs3_osf1=yes, | ||
69 | fu_cv_sys_stat_statfs3_osf1=no, | ||
70 | fu_cv_sys_stat_statfs3_osf1=no)]) | ||
71 | AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1) | ||
72 | if test $fu_cv_sys_stat_statfs3_osf1 = yes; then | ||
73 | ac_fsusage_space=yes | ||
74 | AC_DEFINE(STAT_STATFS3_OSF1, 1, | ||
75 | [ Define if statfs takes 3 args. (DEC Alpha running OSF/1)]) | ||
76 | fi | ||
77 | fi | ||
78 | |||
79 | if test $ac_fsusage_space = no; then | ||
80 | # AIX | ||
81 | AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl | ||
82 | member (AIX, 4.3BSD)]) | ||
83 | AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize, | ||
84 | [AC_TRY_RUN([ | ||
85 | #ifdef HAVE_SYS_PARAM_H | ||
86 | #include <sys/param.h> | ||
87 | #endif | ||
88 | #ifdef HAVE_SYS_MOUNT_H | ||
89 | #include <sys/mount.h> | ||
90 | #endif | ||
91 | #ifdef HAVE_SYS_VFS_H | ||
92 | #include <sys/vfs.h> | ||
93 | #endif | ||
94 | main () | ||
95 | { | ||
96 | struct statfs fsd; | ||
97 | fsd.f_bsize = 0; | ||
98 | exit (statfs (".", &fsd)); | ||
99 | }], | ||
100 | fu_cv_sys_stat_statfs2_bsize=yes, | ||
101 | fu_cv_sys_stat_statfs2_bsize=no, | ||
102 | fu_cv_sys_stat_statfs2_bsize=no)]) | ||
103 | AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize) | ||
104 | if test $fu_cv_sys_stat_statfs2_bsize = yes; then | ||
105 | ac_fsusage_space=yes | ||
106 | AC_DEFINE(STAT_STATFS2_BSIZE, 1, | ||
107 | [ Define if statfs takes 2 args and struct statfs has a field named f_bsize. | ||
108 | (4.3BSD, SunOS 4, HP-UX, AIX PS/2)]) | ||
109 | fi | ||
110 | fi | ||
111 | |||
112 | if test $ac_fsusage_space = no; then | ||
113 | # SVR3 | ||
114 | AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)]) | ||
115 | AC_CACHE_VAL(fu_cv_sys_stat_statfs4, | ||
116 | [AC_TRY_RUN([#include <sys/types.h> | ||
117 | #include <sys/statfs.h> | ||
118 | main () | ||
119 | { | ||
120 | struct statfs fsd; | ||
121 | exit (statfs (".", &fsd, sizeof fsd, 0)); | ||
122 | }], | ||
123 | fu_cv_sys_stat_statfs4=yes, | ||
124 | fu_cv_sys_stat_statfs4=no, | ||
125 | fu_cv_sys_stat_statfs4=no)]) | ||
126 | AC_MSG_RESULT($fu_cv_sys_stat_statfs4) | ||
127 | if test $fu_cv_sys_stat_statfs4 = yes; then | ||
128 | ac_fsusage_space=yes | ||
129 | AC_DEFINE(STAT_STATFS4, 1, | ||
130 | [ Define if statfs takes 4 args. (SVR3, Dynix, Irix, Dolphin)]) | ||
131 | fi | ||
132 | fi | ||
133 | |||
134 | if test $ac_fsusage_space = no; then | ||
135 | # 4.4BSD and NetBSD | ||
136 | AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl | ||
137 | member (4.4BSD and NetBSD)]) | ||
138 | AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize, | ||
139 | [AC_TRY_RUN([#include <sys/types.h> | ||
140 | #ifdef HAVE_SYS_PARAM_H | ||
141 | #include <sys/param.h> | ||
142 | #endif | ||
143 | #ifdef HAVE_SYS_MOUNT_H | ||
144 | #include <sys/mount.h> | ||
145 | #endif | ||
146 | main () | ||
147 | { | ||
148 | struct statfs fsd; | ||
149 | fsd.f_fsize = 0; | ||
150 | exit (statfs (".", &fsd)); | ||
151 | }], | ||
152 | fu_cv_sys_stat_statfs2_fsize=yes, | ||
153 | fu_cv_sys_stat_statfs2_fsize=no, | ||
154 | fu_cv_sys_stat_statfs2_fsize=no)]) | ||
155 | AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize) | ||
156 | if test $fu_cv_sys_stat_statfs2_fsize = yes; then | ||
157 | ac_fsusage_space=yes | ||
158 | AC_DEFINE(STAT_STATFS2_FSIZE, 1, | ||
159 | [ Define if statfs takes 2 args and struct statfs has a field named f_fsize. | ||
160 | (4.4BSD, NetBSD)]) | ||
161 | fi | ||
162 | fi | ||
163 | |||
164 | if test $ac_fsusage_space = no; then | ||
165 | # Ultrix | ||
166 | AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)]) | ||
167 | AC_CACHE_VAL(fu_cv_sys_stat_fs_data, | ||
168 | [AC_TRY_RUN([#include <sys/types.h> | ||
169 | #ifdef HAVE_SYS_PARAM_H | ||
170 | #include <sys/param.h> | ||
171 | #endif | ||
172 | #ifdef HAVE_SYS_MOUNT_H | ||
173 | #include <sys/mount.h> | ||
174 | #endif | ||
175 | #ifdef HAVE_SYS_FS_TYPES_H | ||
176 | #include <sys/fs_types.h> | ||
177 | #endif | ||
178 | main () | ||
179 | { | ||
180 | struct fs_data fsd; | ||
181 | /* Ultrix's statfs returns 1 for success, | ||
182 | 0 for not mounted, -1 for failure. */ | ||
183 | exit (statfs (".", &fsd) != 1); | ||
184 | }], | ||
185 | fu_cv_sys_stat_fs_data=yes, | ||
186 | fu_cv_sys_stat_fs_data=no, | ||
187 | fu_cv_sys_stat_fs_data=no)]) | ||
188 | AC_MSG_RESULT($fu_cv_sys_stat_fs_data) | ||
189 | if test $fu_cv_sys_stat_fs_data = yes; then | ||
190 | ac_fsusage_space=yes | ||
191 | AC_DEFINE(STAT_STATFS2_FS_DATA, 1, | ||
192 | [ Define if statfs takes 2 args and the second argument has | ||
193 | type struct fs_data. (Ultrix)]) | ||
194 | fi | ||
195 | fi | ||
196 | |||
197 | if test $ac_fsusage_space = no; then | ||
198 | # SVR2 | ||
199 | AC_TRY_CPP([#include <sys/filsys.h> | ||
200 | ], | ||
201 | AC_DEFINE(STAT_READ_FILSYS, 1, | ||
202 | [Define if there is no specific function for reading filesystems usage | ||
203 | information and you have the <sys/filsys.h> header file. (SVR2)]) | ||
204 | ac_fsusage_space=yes) | ||
205 | fi | ||
206 | |||
207 | AS_IF([test $ac_fsusage_space = yes], [$1], [$2]) | ||
208 | |||
209 | ]) | ||
210 | |||
211 | |||
212 | # Check for SunOS statfs brokenness wrt partitions 2GB and larger. | ||
213 | # If <sys/vfs.h> exists and struct statfs has a member named f_spare, | ||
214 | # enable the work-around code in fsusage.c. | ||
215 | AC_DEFUN([jm_STATFS_TRUNCATES], | ||
216 | [ | ||
217 | AC_MSG_CHECKING([for statfs that truncates block counts]) | ||
218 | AC_CACHE_VAL(fu_cv_sys_truncating_statfs, | ||
219 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ | ||
220 | #if !defined(sun) && !defined(__sun) | ||
221 | choke -- this is a workaround for a Sun-specific problem | ||
222 | #endif | ||
223 | #include <sys/types.h> | ||
224 | #include <sys/vfs.h>]], | ||
225 | [[struct statfs t; long c = *(t.f_spare);]])], | ||
226 | [fu_cv_sys_truncating_statfs=yes], | ||
227 | [fu_cv_sys_truncating_statfs=no])]) | ||
228 | if test $fu_cv_sys_truncating_statfs = yes; then | ||
229 | AC_DEFINE(STATFS_TRUNCATES_BLOCK_COUNTS, 1, | ||
230 | [Define if the block counts reported by statfs may be truncated to 2GB | ||
231 | and the correct values may be stored in the f_spare array. | ||
232 | (SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem. | ||
233 | SunOS 4.1.1 seems not to be affected.)]) | ||
234 | fi | ||
235 | AC_MSG_RESULT($fu_cv_sys_truncating_statfs) | ||
236 | ]) | ||
237 | |||
238 | |||
239 | # Prerequisites of lib/fsusage.c not done by jm_FILE_SYSTEM_USAGE. | ||
240 | AC_DEFUN([gl_PREREQ_FSUSAGE_EXTRA], | ||
241 | [ | ||
242 | AC_REQUIRE([jm_AC_TYPE_UINTMAX_T]) | ||
243 | AC_CHECK_HEADERS_ONCE(fcntl.h) | ||
244 | AC_CHECK_HEADERS(dustat.h sys/fs/s5param.h sys/filsys.h sys/statfs.h sys/statvfs.h) | ||
245 | jm_STATFS_TRUNCATES | ||
246 | ]) | ||
diff --git a/lib/full-read.c b/lib/full-read.c new file mode 100644 index 00000000..1dc3e377 --- /dev/null +++ b/lib/full-read.c | |||
@@ -0,0 +1,19 @@ | |||
1 | /* An interface to read that retries after partial reads and interrupts. | ||
2 | Copyright (C) 2002, 2003 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #define FULL_READ | ||
19 | #include "full-write.c" | ||
diff --git a/lib/full-write.c b/lib/full-write.c new file mode 100644 index 00000000..15137056 --- /dev/null +++ b/lib/full-write.c | |||
@@ -0,0 +1,85 @@ | |||
1 | /* An interface to read and write that retries (if necessary) until complete. | ||
2 | |||
3 | Copyright (C) 1993, 1994, 1997-2003 Free Software Foundation, Inc. | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2, or (at your option) | ||
8 | any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software Foundation, | ||
17 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
18 | |||
19 | #if HAVE_CONFIG_H | ||
20 | # include <config.h> | ||
21 | #endif | ||
22 | |||
23 | /* Specification. */ | ||
24 | #ifdef FULL_READ | ||
25 | # include "full-read.h" | ||
26 | #else | ||
27 | # include "full-write.h" | ||
28 | #endif | ||
29 | |||
30 | #include <errno.h> | ||
31 | #ifndef errno | ||
32 | extern int errno; | ||
33 | #endif | ||
34 | |||
35 | #ifdef FULL_READ | ||
36 | # include "safe-read.h" | ||
37 | # define safe_rw safe_read | ||
38 | # define full_rw full_read | ||
39 | # undef const | ||
40 | # define const /* empty */ | ||
41 | #else | ||
42 | # include "safe-write.h" | ||
43 | # define safe_rw safe_write | ||
44 | # define full_rw full_write | ||
45 | #endif | ||
46 | |||
47 | #ifdef FULL_READ | ||
48 | /* Set errno to zero upon EOF. */ | ||
49 | # define ZERO_BYTE_TRANSFER_ERRNO 0 | ||
50 | #else | ||
51 | /* Some buggy drivers return 0 when one tries to write beyond | ||
52 | a device's end. (Example: Linux 1.2.13 on /dev/fd0.) | ||
53 | Set errno to ENOSPC so they get a sensible diagnostic. */ | ||
54 | # define ZERO_BYTE_TRANSFER_ERRNO ENOSPC | ||
55 | #endif | ||
56 | |||
57 | /* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if | ||
58 | interrupted or if a partial write(read) occurs. Return the number | ||
59 | of bytes transferred. | ||
60 | When writing, set errno if fewer than COUNT bytes are written. | ||
61 | When reading, if fewer than COUNT bytes are read, you must examine | ||
62 | errno to distinguish failure from EOF (errno == 0). */ | ||
63 | size_t | ||
64 | full_rw (int fd, const void *buf, size_t count) | ||
65 | { | ||
66 | size_t total = 0; | ||
67 | const char *ptr = buf; | ||
68 | |||
69 | while (count > 0) | ||
70 | { | ||
71 | size_t n_rw = safe_rw (fd, ptr, count); | ||
72 | if (n_rw == (size_t) -1) | ||
73 | break; | ||
74 | if (n_rw == 0) | ||
75 | { | ||
76 | errno = ZERO_BYTE_TRANSFER_ERRNO; | ||
77 | break; | ||
78 | } | ||
79 | total += n_rw; | ||
80 | ptr += n_rw; | ||
81 | count -= n_rw; | ||
82 | } | ||
83 | |||
84 | return total; | ||
85 | } | ||
diff --git a/lib/full-write.h b/lib/full-write.h new file mode 100644 index 00000000..8cd2e815 --- /dev/null +++ b/lib/full-write.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* An interface to write() that writes all it is asked to write. | ||
2 | |||
3 | Copyright (C) 2002 Free Software Foundation, Inc. | ||
4 | |||
5 | This program is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published by | ||
7 | the Free Software Foundation; either version 2, or (at your option) | ||
8 | any later version. | ||
9 | |||
10 | This program is distributed in the hope that it will be useful, | ||
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software Foundation, | ||
17 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
18 | |||
19 | #include <stddef.h> | ||
20 | |||
21 | /* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted | ||
22 | or if partial writes occur. Return the number of bytes successfully | ||
23 | written, setting errno if that is less than COUNT. */ | ||
24 | extern size_t full_write (int fd, const void *buf, size_t count); | ||
diff --git a/lib/getopt.m4 b/lib/getopt.m4 deleted file mode 100644 index df602b98..00000000 --- a/lib/getopt.m4 +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | # getopt.m4 serial 2 | ||
2 | dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc. | ||
3 | dnl This file is free software, distributed under the terms of the GNU | ||
4 | dnl General Public License. As a special exception to the GNU General | ||
5 | dnl Public License, this file may be distributed as part of a program | ||
6 | dnl that contains a configuration script generated by Autoconf, under | ||
7 | dnl the same distribution terms as the rest of that program. | ||
8 | |||
9 | AC_DEFUN([gl_GETOPT], | ||
10 | [ | ||
11 | dnl Prerequisites of lib/getopt.c. | ||
12 | : | ||
13 | ]) | ||
diff --git a/lib/ls-mntd-fs.m4 b/lib/ls-mntd-fs.m4 deleted file mode 100644 index c28466bb..00000000 --- a/lib/ls-mntd-fs.m4 +++ /dev/null | |||
@@ -1,282 +0,0 @@ | |||
1 | #serial 14 | ||
2 | |||
3 | dnl From Jim Meyering. | ||
4 | dnl | ||
5 | dnl This is not pretty. I've just taken the autoconf code and wrapped | ||
6 | dnl it in an AC_DEFUN. | ||
7 | dnl | ||
8 | |||
9 | # jm_LIST_MOUNTED_FILESYSTEMS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) | ||
10 | AC_DEFUN([jm_LIST_MOUNTED_FILESYSTEMS], | ||
11 | [ | ||
12 | AC_CHECK_FUNCS(listmntent getmntinfo) | ||
13 | AC_CHECK_HEADERS_ONCE(sys/param.h) | ||
14 | |||
15 | # We must include grp.h before ucred.h on OSF V4.0, since ucred.h uses | ||
16 | # NGROUPS (as the array dimension for a struct member) without a definition. | ||
17 | AC_CHECK_HEADERS(sys/ucred.h, [], [], [#include <grp.h>]) | ||
18 | |||
19 | AC_CHECK_HEADERS(mntent.h sys/mount.h sys/fs_types.h) | ||
20 | getfsstat_includes="\ | ||
21 | $ac_includes_default | ||
22 | #if HAVE_SYS_PARAM_H | ||
23 | # include <sys/param.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
24 | #endif | ||
25 | #if HAVE_SYS_UCRED_H | ||
26 | # include <grp.h> /* needed for definition of NGROUPS */ | ||
27 | # include <sys/ucred.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
28 | #endif | ||
29 | #if HAVE_SYS_MOUNT_H | ||
30 | # include <sys/mount.h> | ||
31 | #endif | ||
32 | #if HAVE_SYS_FS_TYPES_H | ||
33 | # include <sys/fs_types.h> /* needed by powerpc-apple-darwin1.3.7 */ | ||
34 | #endif | ||
35 | " | ||
36 | AC_CHECK_MEMBERS([struct fsstat.f_fstypename],,,[$getfsstat_includes]) | ||
37 | |||
38 | # Determine how to get the list of mounted filesystems. | ||
39 | ac_list_mounted_fs= | ||
40 | |||
41 | # If the getmntent function is available but not in the standard library, | ||
42 | # make sure LIBS contains -lsun (on Irix4) or -lseq (on PTX). | ||
43 | AC_FUNC_GETMNTENT | ||
44 | |||
45 | # This test must precede the ones for getmntent because Unicos-9 is | ||
46 | # reported to have the getmntent function, but its support is incompatible | ||
47 | # with other getmntent implementations. | ||
48 | |||
49 | # NOTE: Normally, I wouldn't use a check for system type as I've done for | ||
50 | # `CRAY' below since that goes against the whole autoconf philosophy. But | ||
51 | # I think there is too great a chance that some non-Cray system has a | ||
52 | # function named listmntent to risk the false positive. | ||
53 | |||
54 | if test -z "$ac_list_mounted_fs"; then | ||
55 | # Cray UNICOS 9 | ||
56 | AC_MSG_CHECKING([for listmntent of Cray/Unicos-9]) | ||
57 | AC_CACHE_VAL(fu_cv_sys_mounted_cray_listmntent, | ||
58 | [fu_cv_sys_mounted_cray_listmntent=no | ||
59 | AC_EGREP_CPP(yes, | ||
60 | [#ifdef _CRAY | ||
61 | yes | ||
62 | #endif | ||
63 | ], [test $ac_cv_func_listmntent = yes \ | ||
64 | && fu_cv_sys_mounted_cray_listmntent=yes] | ||
65 | ) | ||
66 | ] | ||
67 | ) | ||
68 | AC_MSG_RESULT($fu_cv_sys_mounted_cray_listmntent) | ||
69 | if test $fu_cv_sys_mounted_cray_listmntent = yes; then | ||
70 | ac_list_mounted_fs=found | ||
71 | AC_DEFINE(MOUNTED_LISTMNTENT, 1, | ||
72 | [Define if there is a function named listmntent that can be used to | ||
73 | list all mounted filesystems. (UNICOS)]) | ||
74 | fi | ||
75 | fi | ||
76 | |||
77 | if test -z "$ac_list_mounted_fs"; then | ||
78 | # AIX. | ||
79 | AC_MSG_CHECKING([for mntctl function and struct vmount]) | ||
80 | AC_CACHE_VAL(fu_cv_sys_mounted_vmount, | ||
81 | [AC_TRY_CPP([#include <fshelp.h>], | ||
82 | fu_cv_sys_mounted_vmount=yes, | ||
83 | fu_cv_sys_mounted_vmount=no)]) | ||
84 | AC_MSG_RESULT($fu_cv_sys_mounted_vmount) | ||
85 | if test $fu_cv_sys_mounted_vmount = yes; then | ||
86 | ac_list_mounted_fs=found | ||
87 | AC_DEFINE(MOUNTED_VMOUNT, 1, | ||
88 | [Define if there is a function named mntctl that can be used to read | ||
89 | the list of mounted filesystems, and there is a system header file | ||
90 | that declares `struct vmount.' (AIX)]) | ||
91 | fi | ||
92 | fi | ||
93 | |||
94 | if test $ac_cv_func_getmntent = yes; then | ||
95 | |||
96 | # This system has the getmntent function. | ||
97 | # Determine whether it's the one-argument variant or the two-argument one. | ||
98 | |||
99 | if test -z "$ac_list_mounted_fs"; then | ||
100 | # 4.3BSD, SunOS, HP-UX, Dynix, Irix | ||
101 | AC_MSG_CHECKING([for one-argument getmntent function]) | ||
102 | AC_CACHE_VAL(fu_cv_sys_mounted_getmntent1, | ||
103 | [AC_TRY_COMPILE([ | ||
104 | /* SunOS 4.1.x /usr/include/mntent.h needs this for FILE */ | ||
105 | #include <stdio.h> | ||
106 | |||
107 | #include <mntent.h> | ||
108 | #if !defined MOUNTED | ||
109 | # if defined _PATH_MOUNTED /* GNU libc */ | ||
110 | # define MOUNTED _PATH_MOUNTED | ||
111 | # endif | ||
112 | # if defined MNT_MNTTAB /* HP-UX. */ | ||
113 | # define MOUNTED MNT_MNTTAB | ||
114 | # endif | ||
115 | # if defined MNTTABNAME /* Dynix. */ | ||
116 | # define MOUNTED MNTTABNAME | ||
117 | # endif | ||
118 | #endif | ||
119 | ], | ||
120 | [ struct mntent *mnt = 0; char *table = MOUNTED; ], | ||
121 | fu_cv_sys_mounted_getmntent1=yes, | ||
122 | fu_cv_sys_mounted_getmntent1=no)]) | ||
123 | AC_MSG_RESULT($fu_cv_sys_mounted_getmntent1) | ||
124 | if test $fu_cv_sys_mounted_getmntent1 = yes; then | ||
125 | ac_list_mounted_fs=found | ||
126 | AC_DEFINE(MOUNTED_GETMNTENT1, 1, | ||
127 | [Define if there is a function named getmntent for reading the list | ||
128 | of mounted filesystems, and that function takes a single argument. | ||
129 | (4.3BSD, SunOS, HP-UX, Dynix, Irix)]) | ||
130 | fi | ||
131 | fi | ||
132 | |||
133 | if test -z "$ac_list_mounted_fs"; then | ||
134 | # SVR4 | ||
135 | AC_MSG_CHECKING([for two-argument getmntent function]) | ||
136 | AC_CACHE_VAL(fu_cv_sys_mounted_getmntent2, | ||
137 | [AC_EGREP_HEADER(getmntent, sys/mnttab.h, | ||
138 | fu_cv_sys_mounted_getmntent2=yes, | ||
139 | fu_cv_sys_mounted_getmntent2=no)]) | ||
140 | AC_MSG_RESULT($fu_cv_sys_mounted_getmntent2) | ||
141 | if test $fu_cv_sys_mounted_getmntent2 = yes; then | ||
142 | ac_list_mounted_fs=found | ||
143 | AC_DEFINE(MOUNTED_GETMNTENT2, 1, | ||
144 | [Define if there is a function named getmntent for reading the list of | ||
145 | mounted filesystems, and that function takes two arguments. (SVR4)]) | ||
146 | fi | ||
147 | fi | ||
148 | |||
149 | fi | ||
150 | |||
151 | if test -z "$ac_list_mounted_fs"; then | ||
152 | # DEC Alpha running OSF/1, and Apple Darwin 1.3. | ||
153 | # powerpc-apple-darwin1.3.7 needs sys/param.h sys/ucred.h sys/fs_types.h | ||
154 | |||
155 | AC_MSG_CHECKING([for getfsstat function]) | ||
156 | AC_CACHE_VAL(fu_cv_sys_mounted_getfsstat, | ||
157 | [AC_TRY_LINK([ | ||
158 | #include <sys/types.h> | ||
159 | #if HAVE_STRUCT_FSSTAT_F_FSTYPENAME | ||
160 | # define FS_TYPE(Ent) ((Ent).f_fstypename) | ||
161 | #else | ||
162 | # define FS_TYPE(Ent) mnt_names[(Ent).f_type] | ||
163 | #endif | ||
164 | ]$getfsstat_includes | ||
165 | , | ||
166 | [struct statfs *stats; | ||
167 | int numsys = getfsstat ((struct statfs *)0, 0L, MNT_WAIT); | ||
168 | char *t = FS_TYPE (*stats); ], | ||
169 | fu_cv_sys_mounted_getfsstat=yes, | ||
170 | fu_cv_sys_mounted_getfsstat=no)]) | ||
171 | AC_MSG_RESULT($fu_cv_sys_mounted_getfsstat) | ||
172 | if test $fu_cv_sys_mounted_getfsstat = yes; then | ||
173 | ac_list_mounted_fs=found | ||
174 | AC_DEFINE(MOUNTED_GETFSSTAT, 1, | ||
175 | [Define if there is a function named getfsstat for reading the | ||
176 | list of mounted filesystems. (DEC Alpha running OSF/1)]) | ||
177 | fi | ||
178 | fi | ||
179 | |||
180 | if test -z "$ac_list_mounted_fs"; then | ||
181 | # SVR3 | ||
182 | AC_MSG_CHECKING([for FIXME existence of three headers]) | ||
183 | AC_CACHE_VAL(fu_cv_sys_mounted_fread_fstyp, | ||
184 | [AC_TRY_CPP([ | ||
185 | #include <sys/statfs.h> | ||
186 | #include <sys/fstyp.h> | ||
187 | #include <mnttab.h>], | ||
188 | fu_cv_sys_mounted_fread_fstyp=yes, | ||
189 | fu_cv_sys_mounted_fread_fstyp=no)]) | ||
190 | AC_MSG_RESULT($fu_cv_sys_mounted_fread_fstyp) | ||
191 | if test $fu_cv_sys_mounted_fread_fstyp = yes; then | ||
192 | ac_list_mounted_fs=found | ||
193 | AC_DEFINE(MOUNTED_FREAD_FSTYP, 1, | ||
194 | [Define if (like SVR2) there is no specific function for reading the | ||
195 | list of mounted filesystems, and your system has these header files: | ||
196 | <sys/fstyp.h> and <sys/statfs.h>. (SVR3)]) | ||
197 | fi | ||
198 | fi | ||
199 | |||
200 | if test -z "$ac_list_mounted_fs"; then | ||
201 | # 4.4BSD and DEC OSF/1. | ||
202 | AC_MSG_CHECKING([for getmntinfo function]) | ||
203 | AC_CACHE_VAL(fu_cv_sys_mounted_getmntinfo, | ||
204 | [ | ||
205 | test "$ac_cv_func_getmntinfo" = yes \ | ||
206 | && fu_cv_sys_mounted_getmntinfo=yes \ | ||
207 | || fu_cv_sys_mounted_getmntinfo=no | ||
208 | ]) | ||
209 | AC_MSG_RESULT($fu_cv_sys_mounted_getmntinfo) | ||
210 | if test $fu_cv_sys_mounted_getmntinfo = yes; then | ||
211 | ac_list_mounted_fs=found | ||
212 | AC_DEFINE(MOUNTED_GETMNTINFO, 1, | ||
213 | [Define if there is a function named getmntinfo for reading the | ||
214 | list of mounted filesystems. (4.4BSD, Darwin)]) | ||
215 | fi | ||
216 | fi | ||
217 | |||
218 | if test -z "$ac_list_mounted_fs"; then | ||
219 | # Ultrix | ||
220 | AC_MSG_CHECKING([for getmnt function]) | ||
221 | AC_CACHE_VAL(fu_cv_sys_mounted_getmnt, | ||
222 | [AC_TRY_CPP([ | ||
223 | #include <sys/fs_types.h> | ||
224 | #include <sys/mount.h>], | ||
225 | fu_cv_sys_mounted_getmnt=yes, | ||
226 | fu_cv_sys_mounted_getmnt=no)]) | ||
227 | AC_MSG_RESULT($fu_cv_sys_mounted_getmnt) | ||
228 | if test $fu_cv_sys_mounted_getmnt = yes; then | ||
229 | ac_list_mounted_fs=found | ||
230 | AC_DEFINE(MOUNTED_GETMNT, 1, | ||
231 | [Define if there is a function named getmnt for reading the list of | ||
232 | mounted filesystems. (Ultrix)]) | ||
233 | fi | ||
234 | fi | ||
235 | |||
236 | if test -z "$ac_list_mounted_fs"; then | ||
237 | # BeOS | ||
238 | AC_CHECK_FUNCS(next_dev fs_stat_dev) | ||
239 | AC_CHECK_HEADERS(fs_info.h) | ||
240 | AC_MSG_CHECKING([for BEOS mounted file system support functions]) | ||
241 | if test $ac_cv_header_fs_info_h = yes \ | ||
242 | && test $ac_cv_func_next_dev = yes \ | ||
243 | && test $ac_cv_func_fs_stat_dev = yes; then | ||
244 | fu_result=yes | ||
245 | else | ||
246 | fu_result=no | ||
247 | fi | ||
248 | AC_MSG_RESULT($fu_result) | ||
249 | if test $fu_result = yes; then | ||
250 | ac_list_mounted_fs=found | ||
251 | AC_DEFINE(MOUNTED_FS_STAT_DEV, 1, | ||
252 | [Define if there are functions named next_dev and fs_stat_dev for | ||
253 | reading the list of mounted filesystems. (BeOS)]) | ||
254 | fi | ||
255 | fi | ||
256 | |||
257 | if test -z "$ac_list_mounted_fs"; then | ||
258 | # SVR2 | ||
259 | AC_MSG_CHECKING([whether it is possible to resort to fread on /etc/mnttab]) | ||
260 | AC_CACHE_VAL(fu_cv_sys_mounted_fread, | ||
261 | [AC_TRY_CPP([#include <mnttab.h>], | ||
262 | fu_cv_sys_mounted_fread=yes, | ||
263 | fu_cv_sys_mounted_fread=no)]) | ||
264 | AC_MSG_RESULT($fu_cv_sys_mounted_fread) | ||
265 | if test $fu_cv_sys_mounted_fread = yes; then | ||
266 | ac_list_mounted_fs=found | ||
267 | AC_DEFINE(MOUNTED_FREAD, 1, | ||
268 | [Define if there is no specific function for reading the list of | ||
269 | mounted filesystems. fread will be used to read /etc/mnttab. | ||
270 | (SVR2) ]) | ||
271 | fi | ||
272 | fi | ||
273 | |||
274 | if test -z "$ac_list_mounted_fs"; then | ||
275 | AC_MSG_ERROR([could not determine how to read list of mounted filesystems]) | ||
276 | # FIXME -- no need to abort building the whole package | ||
277 | # Can't build mountlist.c or anything that needs its functions | ||
278 | fi | ||
279 | |||
280 | AS_IF([test $ac_list_mounted_fs = found], [$1], [$2]) | ||
281 | |||
282 | ]) | ||
diff --git a/lib/onceonly.m4 b/lib/onceonly.m4 deleted file mode 100644 index 50b33f48..00000000 --- a/lib/onceonly.m4 +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | # onceonly.m4 serial 3 (gettext-0.12) | ||
2 | dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc. | ||
3 | dnl This file is free software, distributed under the terms of the GNU | ||
4 | dnl General Public License. As a special exception to the GNU General | ||
5 | dnl Public License, this file may be distributed as part of a program | ||
6 | dnl that contains a configuration script generated by Autoconf, under | ||
7 | dnl the same distribution terms as the rest of that program. | ||
8 | |||
9 | dnl This file defines some "once only" variants of standard autoconf macros. | ||
10 | dnl AC_CHECK_HEADERS_ONCE like AC_CHECK_HEADERS | ||
11 | dnl AC_CHECK_FUNCS_ONCE like AC_CHECK_FUNCS | ||
12 | dnl AC_CHECK_DECLS_ONCE like AC_CHECK_DECLS | ||
13 | dnl AC_REQUIRE([AC_HEADER_STDC]) like AC_HEADER_STDC | ||
14 | dnl The advantage is that the check for each of the headers/functions/decls | ||
15 | dnl will be put only once into the 'configure' file. It keeps the size of | ||
16 | dnl the 'configure' file down, and avoids redundant output when 'configure' | ||
17 | dnl is run. | ||
18 | dnl The drawback is that the checks cannot be conditionalized. If you write | ||
19 | dnl if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi | ||
20 | dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to | ||
21 | dnl empty, and the check will be inserted before the body of the AC_DEFUNed | ||
22 | dnl function. | ||
23 | |||
24 | dnl Autoconf version 2.57 or newer is recommended. | ||
25 | AC_PREREQ(2.54) | ||
26 | |||
27 | # AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of | ||
28 | # AC_CHECK_HEADERS(HEADER1 HEADER2 ...). | ||
29 | AC_DEFUN([AC_CHECK_HEADERS_ONCE], [ | ||
30 | : | ||
31 | AC_FOREACH([gl_HEADER_NAME], [$1], [ | ||
32 | AC_DEFUN([gl_CHECK_HEADER_]m4_quote(translit(m4_defn([gl_HEADER_NAME]), | ||
33 | [-./], [___])), [ | ||
34 | AC_CHECK_HEADERS(gl_HEADER_NAME) | ||
35 | ]) | ||
36 | AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(translit(gl_HEADER_NAME, | ||
37 | [-./], [___]))) | ||
38 | ]) | ||
39 | ]) | ||
40 | |||
41 | # AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of | ||
42 | # AC_CHECK_FUNCS(FUNC1 FUNC2 ...). | ||
43 | AC_DEFUN([AC_CHECK_FUNCS_ONCE], [ | ||
44 | : | ||
45 | AC_FOREACH([gl_FUNC_NAME], [$1], [ | ||
46 | AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [ | ||
47 | AC_CHECK_FUNCS(m4_defn([gl_FUNC_NAME])) | ||
48 | ]) | ||
49 | AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME])) | ||
50 | ]) | ||
51 | ]) | ||
52 | |||
53 | # AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of | ||
54 | # AC_CHECK_DECLS(DECL1, DECL2, ...). | ||
55 | AC_DEFUN([AC_CHECK_DECLS_ONCE], [ | ||
56 | : | ||
57 | AC_FOREACH([gl_DECL_NAME], [$1], [ | ||
58 | AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [ | ||
59 | AC_CHECK_DECLS(m4_defn([gl_DECL_NAME])) | ||
60 | ]) | ||
61 | AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME])) | ||
62 | ]) | ||
63 | ]) | ||
diff --git a/lib/safe-read.c b/lib/safe-read.c new file mode 100644 index 00000000..c21d1cf1 --- /dev/null +++ b/lib/safe-read.c | |||
@@ -0,0 +1,82 @@ | |||
1 | /* An interface to read and write that retries after interrupts. | ||
2 | Copyright (C) 1993, 1994, 1998, 2002-2003 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #if HAVE_CONFIG_H | ||
19 | # include <config.h> | ||
20 | #endif | ||
21 | |||
22 | /* Specification. */ | ||
23 | #ifdef SAFE_WRITE | ||
24 | # include "safe-write.h" | ||
25 | #else | ||
26 | # include "safe-read.h" | ||
27 | #endif | ||
28 | |||
29 | /* Get ssize_t. */ | ||
30 | #include <sys/types.h> | ||
31 | #if HAVE_UNISTD_H | ||
32 | # include <unistd.h> | ||
33 | #endif | ||
34 | |||
35 | #include <errno.h> | ||
36 | #ifndef errno | ||
37 | extern int errno; | ||
38 | #endif | ||
39 | |||
40 | #ifdef EINTR | ||
41 | # define IS_EINTR(x) ((x) == EINTR) | ||
42 | #else | ||
43 | # define IS_EINTR(x) 0 | ||
44 | #endif | ||
45 | |||
46 | #include <limits.h> | ||
47 | |||
48 | #ifdef SAFE_WRITE | ||
49 | # define safe_rw safe_write | ||
50 | # define rw write | ||
51 | #else | ||
52 | # define safe_rw safe_read | ||
53 | # define rw read | ||
54 | # undef const | ||
55 | # define const /* empty */ | ||
56 | #endif | ||
57 | |||
58 | /* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if | ||
59 | interrupted. Return the actual number of bytes read(written), zero for EOF, | ||
60 | or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error. */ | ||
61 | size_t | ||
62 | safe_rw (int fd, void const *buf, size_t count) | ||
63 | { | ||
64 | ssize_t result; | ||
65 | |||
66 | /* POSIX limits COUNT to SSIZE_MAX, but we limit it further, requiring | ||
67 | that COUNT <= INT_MAX, to avoid triggering a bug in Tru64 5.1. | ||
68 | When decreasing COUNT, keep the file pointer block-aligned. | ||
69 | Note that in any case, read(write) may succeed, yet read(write) | ||
70 | fewer than COUNT bytes, so the caller must be prepared to handle | ||
71 | partial results. */ | ||
72 | if (count > INT_MAX) | ||
73 | count = INT_MAX & ~8191; | ||
74 | |||
75 | do | ||
76 | { | ||
77 | result = rw (fd, buf, count); | ||
78 | } | ||
79 | while (result < 0 && IS_EINTR (errno)); | ||
80 | |||
81 | return (size_t) result; | ||
82 | } | ||
diff --git a/lib/safe-read.h b/lib/safe-read.h new file mode 100644 index 00000000..cbe6e0bf --- /dev/null +++ b/lib/safe-read.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* An interface to read() that retries after interrupts. | ||
2 | Copyright (C) 2002 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #include <stddef.h> | ||
19 | |||
20 | #define SAFE_READ_ERROR ((size_t) -1) | ||
21 | |||
22 | /* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted. | ||
23 | Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR | ||
24 | upon error. */ | ||
25 | extern size_t safe_read (int fd, void *buf, size_t count); | ||
diff --git a/lib/safe-write.c b/lib/safe-write.c new file mode 100644 index 00000000..fbafa7cc --- /dev/null +++ b/lib/safe-write.c | |||
@@ -0,0 +1,19 @@ | |||
1 | /* An interface to write that retries after interrupts. | ||
2 | Copyright (C) 2002 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #define SAFE_WRITE | ||
19 | #include "safe-read.c" | ||
diff --git a/lib/safe-write.h b/lib/safe-write.h new file mode 100644 index 00000000..ab1f45b4 --- /dev/null +++ b/lib/safe-write.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* An interface to write() that retries after interrupts. | ||
2 | Copyright (C) 2002 Free Software Foundation, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation; either version 2, or (at your option) | ||
7 | any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | GNU General Public License for more details. | ||
13 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program; if not, write to the Free Software Foundation, | ||
16 | Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||
17 | |||
18 | #include <stddef.h> | ||
19 | |||
20 | #define SAFE_WRITE_ERROR ((size_t) -1) | ||
21 | |||
22 | /* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted. | ||
23 | Return the actual number of bytes written, zero for EOF, or SAFE_WRITE_ERROR | ||
24 | upon error. */ | ||
25 | extern size_t safe_write (int fd, const void *buf, size_t count); | ||
diff --git a/lib/unlocked-io.m4 b/lib/unlocked-io.m4 deleted file mode 100644 index f8e98f1d..00000000 --- a/lib/unlocked-io.m4 +++ /dev/null | |||
@@ -1,22 +0,0 @@ | |||
1 | #serial 8 -*- autoconf -*- | ||
2 | |||
3 | dnl From Jim Meyering. | ||
4 | dnl | ||
5 | dnl See if the glibc *_unlocked I/O macros or functions are available. | ||
6 | dnl Use only those *_unlocked macros or functions that are declared | ||
7 | dnl (because some of them were declared in Solaris 2.5.1 but were removed | ||
8 | dnl in Solaris 2.6, whereas we want binaries built on Solaris 2.5.1 to run | ||
9 | dnl on Solaris 2.6). | ||
10 | |||
11 | AC_DEFUN([jm_FUNC_GLIBC_UNLOCKED_IO], | ||
12 | [ | ||
13 | dnl Persuade glibc and Solaris <stdio.h> to declare | ||
14 | dnl fgets_unlocked(), fputs_unlocked() etc. | ||
15 | AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) | ||
16 | |||
17 | AC_CHECK_DECLS_ONCE( | ||
18 | [clearerr_unlocked feof_unlocked ferror_unlocked | ||
19 | fflush_unlocked fgets_unlocked fputc_unlocked fputs_unlocked | ||
20 | fread_unlocked fwrite_unlocked getc_unlocked | ||
21 | getchar_unlocked putc_unlocked putchar_unlocked]) | ||
22 | ]) | ||
diff --git a/lib/xalloc.m4 b/lib/xalloc.m4 deleted file mode 100644 index dec84177..00000000 --- a/lib/xalloc.m4 +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | # xalloc.m4 serial 8 | ||
2 | dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. | ||
3 | dnl This file is free software, distributed under the terms of the GNU | ||
4 | dnl General Public License. As a special exception to the GNU General | ||
5 | dnl Public License, this file may be distributed as part of a program | ||
6 | dnl that contains a configuration script generated by Autoconf, under | ||
7 | dnl the same distribution terms as the rest of that program. | ||
8 | |||
9 | AC_DEFUN([gl_XALLOC], | ||
10 | [ | ||
11 | gl_PREREQ_XALLOC | ||
12 | gl_PREREQ_XMALLOC | ||
13 | gl_PREREQ_XSTRDUP | ||
14 | ]) | ||
15 | |||
16 | # Prerequisites of lib/xalloc.h. | ||
17 | AC_DEFUN([gl_PREREQ_XALLOC], [ | ||
18 | : | ||
19 | ]) | ||
20 | |||
21 | # Prerequisites of lib/xmalloc.c. | ||
22 | AC_DEFUN([gl_PREREQ_XMALLOC], [ | ||
23 | AC_REQUIRE([AC_C_INLINE]) | ||
24 | AC_REQUIRE([jm_FUNC_MALLOC]) | ||
25 | AC_REQUIRE([jm_FUNC_REALLOC]) | ||
26 | : | ||
27 | ]) | ||
28 | |||
29 | # Prerequisites of lib/xstrdup.c. | ||
30 | AC_DEFUN([gl_PREREQ_XSTRDUP], [ | ||
31 | : | ||
32 | ]) | ||