tarruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/README.txt +99 -0
  2. data/ext/extconf.rb +19 -0
  3. data/ext/libtar/COPYRIGHT +35 -0
  4. data/ext/libtar/ChangeLog +243 -0
  5. data/ext/libtar/ChangeLog-1.0.x +141 -0
  6. data/ext/libtar/INSTALL +183 -0
  7. data/ext/libtar/Makefile.in +51 -0
  8. data/ext/libtar/README +121 -0
  9. data/ext/libtar/TODO +10 -0
  10. data/ext/libtar/autoconf/ac_path_generic.m4 +136 -0
  11. data/ext/libtar/autoconf/aclocal.m4 +199 -0
  12. data/ext/libtar/autoconf/encap.m4 +133 -0
  13. data/ext/libtar/autoconf/install-sh +251 -0
  14. data/ext/libtar/autom4te.cache/output.0 +8102 -0
  15. data/ext/libtar/autom4te.cache/requests +112 -0
  16. data/ext/libtar/autom4te.cache/traces.0 +382 -0
  17. data/ext/libtar/compat/ChangeLog +31 -0
  18. data/ext/libtar/compat/README +12 -0
  19. data/ext/libtar/compat/TODO +4 -0
  20. data/ext/libtar/compat/basename.c +91 -0
  21. data/ext/libtar/compat/compat.h +260 -0
  22. data/ext/libtar/compat/dirname.c +96 -0
  23. data/ext/libtar/compat/fnmatch.c +237 -0
  24. data/ext/libtar/compat/gethostbyname_r.c +41 -0
  25. data/ext/libtar/compat/gethostname.c +36 -0
  26. data/ext/libtar/compat/getservbyname_r.c +41 -0
  27. data/ext/libtar/compat/glob.c +898 -0
  28. data/ext/libtar/compat/inet_aton.c +27 -0
  29. data/ext/libtar/compat/module.ac +591 -0
  30. data/ext/libtar/compat/snprintf.c +788 -0
  31. data/ext/libtar/compat/strdup.c +62 -0
  32. data/ext/libtar/compat/strlcat.c +72 -0
  33. data/ext/libtar/compat/strlcpy.c +68 -0
  34. data/ext/libtar/compat/strmode.c +199 -0
  35. data/ext/libtar/compat/strrstr.c +40 -0
  36. data/ext/libtar/compat/strsep.c +87 -0
  37. data/ext/libtar/config.h.in +187 -0
  38. data/ext/libtar/configure +8102 -0
  39. data/ext/libtar/configure.ac +114 -0
  40. data/ext/libtar/doc/Makefile.in +152 -0
  41. data/ext/libtar/doc/tar_append_file.3 +50 -0
  42. data/ext/libtar/doc/tar_block_read.3 +24 -0
  43. data/ext/libtar/doc/tar_extract_all.3 +43 -0
  44. data/ext/libtar/doc/tar_extract_file.3 +84 -0
  45. data/ext/libtar/doc/tar_open.3 +97 -0
  46. data/ext/libtar/doc/th_get_pathname.3 +63 -0
  47. data/ext/libtar/doc/th_print_long_ls.3 +22 -0
  48. data/ext/libtar/doc/th_read.3 +34 -0
  49. data/ext/libtar/doc/th_set_from_stat.3 +45 -0
  50. data/ext/libtar/lib/Makefile.in +92 -0
  51. data/ext/libtar/lib/append.c +272 -0
  52. data/ext/libtar/lib/block.c +384 -0
  53. data/ext/libtar/lib/decode.c +130 -0
  54. data/ext/libtar/lib/encode.c +237 -0
  55. data/ext/libtar/lib/extract.c +656 -0
  56. data/ext/libtar/lib/handle.c +150 -0
  57. data/ext/libtar/lib/internal.h +46 -0
  58. data/ext/libtar/lib/libtar.h +311 -0
  59. data/ext/libtar/lib/output.c +146 -0
  60. data/ext/libtar/lib/util.c +153 -0
  61. data/ext/libtar/lib/wrapper.c +175 -0
  62. data/ext/libtar/libtar/Makefile.in +73 -0
  63. data/ext/libtar/libtar/libtar.c +363 -0
  64. data/ext/libtar/listhash/ChangeLog +15 -0
  65. data/ext/libtar/listhash/TODO +21 -0
  66. data/ext/libtar/listhash/hash.c.in +344 -0
  67. data/ext/libtar/listhash/hash_new.3.in +74 -0
  68. data/ext/libtar/listhash/list.c.in +458 -0
  69. data/ext/libtar/listhash/list_new.3.in +86 -0
  70. data/ext/libtar/listhash/listhash.h.in +196 -0
  71. data/ext/libtar/listhash/module.ac +21 -0
  72. data/ext/libtar/win32/config.h +190 -0
  73. data/ext/libtar/win32/dirent.c +115 -0
  74. data/ext/libtar/win32/dirent.h +24 -0
  75. data/ext/libtar/win32/grp.h +4 -0
  76. data/ext/libtar/win32/listhash/libtar_hash.c +344 -0
  77. data/ext/libtar/win32/listhash/libtar_list.c +458 -0
  78. data/ext/libtar/win32/listhash/libtar_listhash.h +196 -0
  79. data/ext/libtar/win32/pwd.h +4 -0
  80. data/ext/libtar/win32/sys/param.h +8 -0
  81. data/ext/libtar/win32/tar.h +35 -0
  82. data/ext/libtar/win32/utime.h +6 -0
  83. data/ext/libtar/win32/win32/types.h +10 -0
  84. data/ext/tarruby.c +648 -0
  85. metadata +150 -0
@@ -0,0 +1,260 @@
1
+ /* prototypes for borrowed "compatibility" code */
2
+
3
+ #include <config.h>
4
+
5
+ #include <sys/types.h>
6
+ #include <sys/stat.h>
7
+
8
+ #ifdef STDC_HEADERS
9
+ # include <stdarg.h>
10
+ # include <stddef.h>
11
+ #else
12
+ # include <varargs.h>
13
+ #endif
14
+
15
+ #ifdef HAVE_LIBGEN_H
16
+ # include <libgen.h>
17
+ #endif
18
+
19
+
20
+ #if defined(NEED_BASENAME) && !defined(HAVE_BASENAME)
21
+
22
+ # ifdef basename
23
+ # undef basename /* fix glibc brokenness */
24
+ # endif
25
+
26
+ char *openbsd_basename(const char *);
27
+ # define basename openbsd_basename
28
+
29
+ #endif /* NEED_BASENAME && ! HAVE_BASENAME */
30
+
31
+
32
+ #if defined(NEED_DIRNAME) && !defined(HAVE_DIRNAME)
33
+
34
+ char *openbsd_dirname(const char *);
35
+ # define dirname openbsd_dirname
36
+
37
+ #endif /* NEED_DIRNAME && ! HAVE_DIRNAME */
38
+
39
+
40
+ #ifdef NEED_FNMATCH
41
+ # ifndef HAVE_FNMATCH
42
+
43
+ # define FNM_NOMATCH 1 /* Match failed. */
44
+
45
+ # define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
46
+ # define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
47
+ # define FNM_PERIOD 0x04 /* Period must be matched by period. */
48
+
49
+ # define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
50
+ # define FNM_CASEFOLD 0x10 /* Case insensitive search. */
51
+ # define FNM_IGNORECASE FNM_CASEFOLD
52
+ # define FNM_FILE_NAME FNM_PATHNAME
53
+
54
+ int openbsd_fnmatch(const char *, const char *, int);
55
+ # define fnmatch openbsd_fnmatch
56
+
57
+ # else /* HAVE_FNMATCH */
58
+
59
+ # ifdef HAVE_FNMATCH_H
60
+ # include <fnmatch.h>
61
+ # endif
62
+
63
+ # endif /* ! HAVE_FNMATCH */
64
+ #endif /* NEED_FNMATCH */
65
+
66
+
67
+ #ifdef NEED_GETHOSTBYNAME_R
68
+
69
+ # include <netdb.h>
70
+
71
+ # if GETHOSTBYNAME_R_NUM_ARGS != 6
72
+
73
+ int compat_gethostbyname_r(const char *, struct hostent *,
74
+ char *, size_t, struct hostent **, int *);
75
+
76
+ # define gethostbyname_r compat_gethostbyname_r
77
+
78
+ # endif /* GETHOSTBYNAME_R_NUM_ARGS != 6 */
79
+
80
+ #endif /* NEED_GETHOSTBYNAME_R */
81
+
82
+
83
+ #if defined(NEED_GETHOSTNAME) && !defined(HAVE_GETHOSTNAME)
84
+
85
+ int gethostname(char *, size_t);
86
+
87
+ #endif /* NEED_GETHOSTNAME && ! HAVE_GETHOSTNAME */
88
+
89
+
90
+ #ifdef NEED_GETSERVBYNAME_R
91
+
92
+ # include <netdb.h>
93
+
94
+ # if GETSERVBYNAME_R_NUM_ARGS != 6
95
+
96
+ int compat_getservbyname_r(const char *, const char *, struct servent *,
97
+ char *, size_t, struct servent **);
98
+
99
+ # define getservbyname_r compat_getservbyname_r
100
+
101
+ # endif /* GETSERVBYNAME_R_NUM_ARGS != 6 */
102
+
103
+ #endif /* NEED_GETSERVBYNAME_R */
104
+
105
+
106
+
107
+ #ifdef NEED_GLOB
108
+ # ifndef HAVE_GLOB
109
+
110
+ typedef struct {
111
+ int gl_pathc; /* Count of total paths so far. */
112
+ int gl_matchc; /* Count of paths matching pattern. */
113
+ int gl_offs; /* Reserved at beginning of gl_pathv. */
114
+ int gl_flags; /* Copy of flags parameter to glob. */
115
+ char **gl_pathv; /* List of paths matching pattern. */
116
+ /* Copy of errfunc parameter to glob. */
117
+ int (*gl_errfunc)(const char *, int);
118
+
119
+ /*
120
+ * Alternate filesystem access methods for glob; replacement
121
+ * versions of closedir(3), readdir(3), opendir(3), stat(2)
122
+ * and lstat(2).
123
+ */
124
+ void (*gl_closedir)(void *);
125
+ struct dirent *(*gl_readdir)(void *);
126
+ void *(*gl_opendir)(const char *);
127
+ int (*gl_lstat)(const char *, struct stat *);
128
+ int (*gl_stat)(const char *, struct stat *);
129
+ } glob_t;
130
+
131
+ /* Flags */
132
+ # define GLOB_APPEND 0x0001 /* Append to output from previous call. */
133
+ # define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
134
+ # define GLOB_ERR 0x0004 /* Return on error. */
135
+ # define GLOB_MARK 0x0008 /* Append / to matching directories. */
136
+ # define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
137
+ # define GLOB_NOSORT 0x0020 /* Don't sort. */
138
+
139
+ # define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
140
+ # define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
141
+ # define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
142
+ # define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
143
+ # define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
144
+ # define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
145
+ # define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */
146
+
147
+ /* Error values returned by glob(3) */
148
+ # define GLOB_NOSPACE (-1) /* Malloc call failed. */
149
+ # define GLOB_ABORTED (-2) /* Unignored error. */
150
+ # define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK not set. */
151
+ # define GLOB_NOSYS (-4) /* Function not supported. */
152
+ # define GLOB_ABEND GLOB_ABORTED
153
+
154
+ int openbsd_glob(const char *, int, int (*)(const char *, int), glob_t *);
155
+ void openbsd_globfree(glob_t *);
156
+ # define glob openbsd_glob
157
+ # define globfree openbsd_globfree
158
+
159
+ # else /* HAVE_GLOB */
160
+
161
+ # ifdef HAVE_GLOB_H
162
+ # include <glob.h>
163
+ # endif
164
+
165
+ # endif /* ! HAVE_GLOB */
166
+ #endif /* NEED_GLOB */
167
+
168
+
169
+ #if defined(NEED_INET_ATON) && !defined(HAVE_INET_ATON)
170
+
171
+ int inet_aton(const char *, struct in_addr *);
172
+
173
+ #endif /* NEED_INET_ATON && ! HAVE_INET_ATON */
174
+
175
+
176
+ #ifdef NEED_MAKEDEV
177
+
178
+ # ifdef MAJOR_IN_MKDEV
179
+ # include <sys/mkdev.h>
180
+ # else
181
+ # ifdef MAJOR_IN_SYSMACROS
182
+ # include <sys/sysmacros.h>
183
+ # endif
184
+ # endif
185
+
186
+ /*
187
+ ** On most systems makedev() has two args.
188
+ ** Some weird systems, like QNX6, have makedev() functions that expect
189
+ ** an extra first argument for "node", which can be 0 for a local
190
+ ** machine.
191
+ */
192
+
193
+ # ifdef MAKEDEV_THREE_ARGS
194
+ # define compat_makedev(maj, min) makedev(0, maj, min)
195
+ # else
196
+ # define compat_makedev makedev
197
+ # endif
198
+
199
+ #endif /* NEED_MAKEDEV */
200
+
201
+
202
+ #if defined(NEED_SNPRINTF) && !defined(HAVE_SNPRINTF)
203
+
204
+ int mutt_snprintf(char *, size_t, const char *, ...);
205
+ int mutt_vsnprintf(char *, size_t, const char *, va_list);
206
+ #define snprintf mutt_snprintf
207
+ #define vsnprintf mutt_vsnprintf
208
+
209
+ #endif /* NEED_SNPRINTF && ! HAVE_SNPRINTF */
210
+
211
+
212
+ #if defined(NEED_STRLCAT) && !defined(HAVE_STRLCAT)
213
+
214
+ size_t strlcat(char *, const char *, size_t);
215
+
216
+ #endif /* NEED_STRLCAT && ! HAVE_STRLCAT */
217
+
218
+
219
+ #if defined(NEED_STRLCPY) && !defined(HAVE_STRLCPY)
220
+
221
+ size_t strlcpy(char *, const char *, size_t);
222
+
223
+ #endif /* NEED_STRLCPY && ! HAVE_STRLCPY */
224
+
225
+
226
+ #if defined(NEED_STRDUP) && !defined(HAVE_STRDUP)
227
+
228
+ char *openbsd_strdup(const char *);
229
+ # define strdup openbsd_strdup
230
+
231
+ #endif /* NEED_STRDUP && ! HAVE_STRDUP */
232
+
233
+
234
+ #if defined(NEED_STRMODE) && !defined(HAVE_STRMODE)
235
+
236
+ void strmode(register mode_t, register char *);
237
+
238
+ #endif /* NEED_STRMODE && ! HAVE_STRMODE */
239
+
240
+
241
+ #if defined(NEED_STRRSTR) && !defined(HAVE_STRRSTR)
242
+
243
+ char *strrstr(char *, char *);
244
+
245
+ #endif /* NEED_STRRSTR && ! HAVE_STRRSTR */
246
+
247
+
248
+ #ifdef NEED_STRSEP
249
+
250
+ # ifdef HAVE_STRSEP
251
+ # define _LINUX_SOURCE_COMPAT /* needed on AIX 4.3.3 */
252
+ # else
253
+
254
+ char *strsep(register char **, register const char *);
255
+
256
+ # endif
257
+
258
+ #endif /* NEED_STRSEP */
259
+
260
+
@@ -0,0 +1,96 @@
1
+ /* $OpenBSD: dirname.c,v 1.4 1999/05/30 17:10:30 espie Exp $ */
2
+
3
+ /*
4
+ * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions
9
+ * are met:
10
+ * 1. Redistributions of source code must retain the above copyright
11
+ * notice, this list of conditions and the following disclaimer.
12
+ * 2. Redistributions in binary form must reproduce the above copyright
13
+ * notice, this list of conditions and the following disclaimer in the
14
+ * documentation and/or other materials provided with the distribution.
15
+ * 3. The name of the author may not be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
19
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
20
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #ifndef lint
31
+ static char rcsid[] = "$OpenBSD: dirname.c,v 1.4 1999/05/30 17:10:30 espie Exp $";
32
+ #endif /* not lint */
33
+
34
+ #include <errno.h>
35
+ #include <string.h>
36
+ #include <sys/param.h>
37
+
38
+ char *
39
+ openbsd_dirname(path)
40
+ const char *path;
41
+ {
42
+ static char bname[MAXPATHLEN];
43
+ register const char *endp;
44
+
45
+ /* Empty or NULL string gets treated as "." */
46
+ if (path == NULL || *path == '\0') {
47
+ (void)strcpy(bname, ".");
48
+ return(bname);
49
+ }
50
+
51
+ /* Strip trailing slashes */
52
+ endp = path + strlen(path) - 1;
53
+ #ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
54
+ while (endp > path && *endp == '/')
55
+ endp--;
56
+ #else
57
+ while (endp > path && (*endp == '/' || *endp == '\\')) {
58
+ endp--;
59
+ }
60
+ #endif
61
+
62
+ /* Find the start of the dir */
63
+ #ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
64
+ while (endp > path && *endp != '/')
65
+ endp--;
66
+ #else
67
+ while (endp > path && !(*endp == '/' || *endp == '\\')) {
68
+ endp--;
69
+ }
70
+ #endif
71
+
72
+ /* Either the dir is "/" or there are no slashes */
73
+ if (endp == path) {
74
+ #ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
75
+ (void)strcpy(bname, *endp == '/' ? "/" : ".");
76
+ #else
77
+ (void)strcpy(bname, (*endp == '/' || *endp == '\\') ? "/" : ".");
78
+ #endif
79
+ return(bname);
80
+ } else {
81
+ #ifndef _WIN32 // modified by SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
82
+ do {
83
+ endp--;
84
+ } while (endp > path && *endp == '/');
85
+ #else
86
+ #endif
87
+ }
88
+
89
+ if (endp - path + 1 > sizeof(bname)) {
90
+ errno = ENAMETOOLONG;
91
+ return(NULL);
92
+ }
93
+ (void)strncpy(bname, path, endp - path + 1);
94
+ bname[endp - path + 1] = '\0';
95
+ return(bname);
96
+ }
@@ -0,0 +1,237 @@
1
+ /* $OpenBSD: fnmatch.c,v 1.6 1998/03/19 00:29:59 millert Exp $ */
2
+
3
+ /*
4
+ * Copyright (c) 1989, 1993, 1994
5
+ * The Regents of the University of California. All rights reserved.
6
+ *
7
+ * This code is derived from software contributed to Berkeley by
8
+ * Guido van Rossum.
9
+ *
10
+ * Redistribution and use in source and binary forms, with or without
11
+ * modification, are permitted provided that the following conditions
12
+ * are met:
13
+ * 1. Redistributions of source code must retain the above copyright
14
+ * notice, this list of conditions and the following disclaimer.
15
+ * 2. Redistributions in binary form must reproduce the above copyright
16
+ * notice, this list of conditions and the following disclaimer in the
17
+ * documentation and/or other materials provided with the distribution.
18
+ * 3. All advertising materials mentioning features or use of this software
19
+ * must display the following acknowledgement:
20
+ * This product includes software developed by the University of
21
+ * California, Berkeley and its contributors.
22
+ * 4. Neither the name of the University nor the names of its contributors
23
+ * may be used to endorse or promote products derived from this software
24
+ * without specific prior written permission.
25
+ *
26
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36
+ * SUCH DAMAGE.
37
+ */
38
+
39
+ #if defined(LIBC_SCCS) && !defined(lint)
40
+ #if 0
41
+ static char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94";
42
+ #else
43
+ static char rcsid[] = "$OpenBSD: fnmatch.c,v 1.6 1998/03/19 00:29:59 millert Exp $";
44
+ #endif
45
+ #endif /* LIBC_SCCS and not lint */
46
+
47
+ /*
48
+ * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6.
49
+ * Compares a filename or pathname to a pattern.
50
+ */
51
+
52
+ #include <config.h>
53
+
54
+ #include <stdio.h>
55
+
56
+ #ifdef STDC_HEADERS
57
+ # include <string.h>
58
+ #endif
59
+
60
+ #ifdef HAVE_CTYPE_H
61
+ # include <ctype.h>
62
+ #endif
63
+
64
+ #include <compat.h>
65
+
66
+
67
+ #define EOS '\0'
68
+
69
+ #define RANGE_MATCH 1
70
+ #define RANGE_NOMATCH 0
71
+ #define RANGE_ERROR (-1)
72
+
73
+ #ifdef NO_IBM_COMPILER_HORKAGE
74
+ static int rangematch (const char *, char, int, char **);
75
+ #else
76
+ static int rangematch ();
77
+ #endif
78
+
79
+ int
80
+ fnmatch(pattern, string, flags)
81
+ const char *pattern, *string;
82
+ int flags;
83
+ {
84
+ const char *stringstart;
85
+ char *newp;
86
+ char c, test;
87
+
88
+ for (stringstart = string;;)
89
+ switch (c = *pattern++) {
90
+ case EOS:
91
+ if ((flags & FNM_LEADING_DIR) && *string == '/')
92
+ return (0);
93
+ return (*string == EOS ? 0 : FNM_NOMATCH);
94
+ case '?':
95
+ if (*string == EOS)
96
+ return (FNM_NOMATCH);
97
+ if (*string == '/' && (flags & FNM_PATHNAME))
98
+ return (FNM_NOMATCH);
99
+ if (*string == '.' && (flags & FNM_PERIOD) &&
100
+ (string == stringstart ||
101
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
102
+ return (FNM_NOMATCH);
103
+ ++string;
104
+ break;
105
+ case '*':
106
+ c = *pattern;
107
+ /* Collapse multiple stars. */
108
+ while (c == '*')
109
+ c = *++pattern;
110
+
111
+ if (*string == '.' && (flags & FNM_PERIOD) &&
112
+ (string == stringstart ||
113
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
114
+ return (FNM_NOMATCH);
115
+
116
+ /* Optimize for pattern with * at end or before /. */
117
+ if (c == EOS) {
118
+ if (flags & FNM_PATHNAME)
119
+ return ((flags & FNM_LEADING_DIR) ||
120
+ strchr(string, '/') == NULL ?
121
+ 0 : FNM_NOMATCH);
122
+ else
123
+ return (0);
124
+ } else if (c == '/' && (flags & FNM_PATHNAME)) {
125
+ if ((string = strchr(string, '/')) == NULL)
126
+ return (FNM_NOMATCH);
127
+ break;
128
+ }
129
+
130
+ /* General case, use recursion. */
131
+ while ((test = *string) != EOS) {
132
+ if (!fnmatch(pattern, string, flags & ~FNM_PERIOD))
133
+ return (0);
134
+ if (test == '/' && (flags & FNM_PATHNAME))
135
+ break;
136
+ ++string;
137
+ }
138
+ return (FNM_NOMATCH);
139
+ case '[':
140
+ if (*string == EOS)
141
+ return (FNM_NOMATCH);
142
+ if (*string == '/' && (flags & FNM_PATHNAME))
143
+ return (FNM_NOMATCH);
144
+ if (*string == '.' && (flags & FNM_PERIOD) &&
145
+ (string == stringstart ||
146
+ ((flags & FNM_PATHNAME) && *(string - 1) == '/')))
147
+ return (FNM_NOMATCH);
148
+
149
+ switch (rangematch(pattern, *string, flags, &newp)) {
150
+ case RANGE_ERROR:
151
+ /* not a good range, treat as normal text */
152
+ goto normal;
153
+ case RANGE_MATCH:
154
+ pattern = newp;
155
+ break;
156
+ case RANGE_NOMATCH:
157
+ return (FNM_NOMATCH);
158
+ }
159
+ ++string;
160
+ break;
161
+ case '\\':
162
+ if (!(flags & FNM_NOESCAPE)) {
163
+ if ((c = *pattern++) == EOS) {
164
+ c = '\\';
165
+ --pattern;
166
+ }
167
+ }
168
+ /* FALLTHROUGH */
169
+ default:
170
+ normal:
171
+ if (c != *string && !((flags & FNM_CASEFOLD) &&
172
+ (tolower((unsigned char)c) ==
173
+ tolower((unsigned char)*string))))
174
+ return (FNM_NOMATCH);
175
+ ++string;
176
+ break;
177
+ }
178
+ /* NOTREACHED */
179
+ }
180
+
181
+ static int
182
+ rangematch(pattern, test, flags, newp)
183
+ const char *pattern;
184
+ char test;
185
+ int flags;
186
+ char **newp;
187
+ {
188
+ int negate, ok;
189
+ char c, c2;
190
+
191
+ /*
192
+ * A bracket expression starting with an unquoted circumflex
193
+ * character produces unspecified results (IEEE 1003.2-1992,
194
+ * 3.13.2). This implementation treats it like '!', for
195
+ * consistency with the regular expression syntax.
196
+ * J.T. Conklin (conklin@ngai.kaleida.com)
197
+ */
198
+ if ((negate = (*pattern == '!' || *pattern == '^')))
199
+ ++pattern;
200
+
201
+ if (flags & FNM_CASEFOLD)
202
+ test = tolower((unsigned char)test);
203
+
204
+ /*
205
+ * A right bracket shall lose its special meaning and represent
206
+ * itself in a bracket expression if it occurs first in the list.
207
+ * -- POSIX.2 2.8.3.2
208
+ */
209
+ ok = 0;
210
+ c = *pattern++;
211
+ do {
212
+ if (c == '\\' && !(flags & FNM_NOESCAPE))
213
+ c = *pattern++;
214
+ if (c == EOS)
215
+ return (RANGE_ERROR);
216
+ if (c == '/' && (flags & FNM_PATHNAME))
217
+ return (RANGE_NOMATCH);
218
+ if ((flags & FNM_CASEFOLD))
219
+ c = tolower((unsigned char)c);
220
+ if (*pattern == '-'
221
+ && (c2 = *(pattern+1)) != EOS && c2 != ']') {
222
+ pattern += 2;
223
+ if (c2 == '\\' && !(flags & FNM_NOESCAPE))
224
+ c2 = *pattern++;
225
+ if (c2 == EOS)
226
+ return (RANGE_ERROR);
227
+ if (flags & FNM_CASEFOLD)
228
+ c2 = tolower((unsigned char)c2);
229
+ if (c <= test && test <= c2)
230
+ ok = 1;
231
+ } else if (c == test)
232
+ ok = 1;
233
+ } while ((c = *pattern++) != ']');
234
+
235
+ *newp = (char *)pattern;
236
+ return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH);
237
+ }
@@ -0,0 +1,41 @@
1
+ /*
2
+ ** Copyright 2002 University of Illinois Board of Trustees
3
+ ** Copyright 2002 Mark D. Roth
4
+ ** All rights reserved.
5
+ **
6
+ ** gethostbyname_r.c - gethostbyname_r() function for compatibility library
7
+ **
8
+ ** Mark D. Roth <roth@uiuc.edu>
9
+ ** Campus Information Technologies and Educational Services
10
+ ** University of Illinois at Urbana-Champaign
11
+ */
12
+
13
+ #include <config.h>
14
+
15
+ #include <stdio.h>
16
+ #include <sys/types.h>
17
+ #include <netdb.h>
18
+
19
+
20
+ int
21
+ compat_gethostbyname_r(const char *name, struct hostent *hp,
22
+ char *buf, size_t buflen,
23
+ struct hostent **hpp, int *herr)
24
+ {
25
+ #if GETHOSTBYNAME_R_NUM_ARGS == 5
26
+ *hpp = gethostbyname_r(name, hp, buf, buflen, herr);
27
+
28
+ if (*hpp == NULL)
29
+ return -1;
30
+ return 0;
31
+ #elif GETHOSTBYNAME_R_NUM_ARGS == 3
32
+ struct hostent_data hdata;
33
+
34
+ if (gethostbyname_r(name, hp, &hdata) == -1)
35
+ return -1;
36
+ *hpp = hp;
37
+ return 0;
38
+ #endif /* GETHOSTBYNAME_R_NUM_ARGS == 5 */
39
+ }
40
+
41
+
@@ -0,0 +1,36 @@
1
+ /* gethostname.c: minimal substitute for missing gethostname() function
2
+ * created 2000-Mar-02 jmk
3
+ * requires SVR4 uname() and -lc
4
+ *
5
+ * by Jim Knoble <jmknoble@pobox.com>
6
+ * Copyright ? 2000 Jim Knoble
7
+ *
8
+ * Permission to use, copy, modify, distribute, and sell this software
9
+ * and its documentation for any purpose is hereby granted without fee,
10
+ * provided that the above copyright notice appear in all copies and
11
+ * that both that copyright notice and this permission notice appear in
12
+ * supporting documentation.
13
+ *
14
+ * This software is provided "as is", without warranty of any kind,
15
+ * express or implied, including but not limited to the warranties of
16
+ * merchantability, fitness for a particular purpose and
17
+ * noninfringement. In no event shall the author(s) be liable for any
18
+ * claim, damages or other liability, whether in an action of contract,
19
+ * tort or otherwise, arising from, out of or in connection with the
20
+ * software or the use or other dealings in the software.
21
+ */
22
+
23
+ #include <string.h>
24
+ #include <sys/utsname.h>
25
+
26
+ int gethostname(char *name, size_t len)
27
+ {
28
+ struct utsname u;
29
+ int status = uname(&u);
30
+ if (-1 != status) {
31
+ strncpy(name, u.nodename, len);
32
+ name[len - 1] = '\0';
33
+ }
34
+ return(status);
35
+ }
36
+
@@ -0,0 +1,41 @@
1
+ /*
2
+ ** Copyright 2002 University of Illinois Board of Trustees
3
+ ** Copyright 2002 Mark D. Roth
4
+ ** All rights reserved.
5
+ **
6
+ ** getservbyname_r.c - getservbyname_r() function for compatibility library
7
+ **
8
+ ** Mark D. Roth <roth@uiuc.edu>
9
+ ** Campus Information Technologies and Educational Services
10
+ ** University of Illinois at Urbana-Champaign
11
+ */
12
+
13
+ #include <config.h>
14
+
15
+ #include <stdio.h>
16
+ #include <sys/types.h>
17
+ #include <netdb.h>
18
+
19
+
20
+ int
21
+ compat_getservbyname_r(const char *name, const char *proto,
22
+ struct servent *sp, char *buf, size_t buflen,
23
+ struct servent **spp)
24
+ {
25
+ #if GETSERVBYNAME_R_NUM_ARGS == 5
26
+ *spp = getservbyname_r(name, proto, sp, buf, buflen);
27
+
28
+ if (*spp == NULL)
29
+ return -1;
30
+ return 0;
31
+ #elif GETSERVBYNAME_R_NUM_ARGS == 4
32
+ struct servent_data sdata;
33
+
34
+ if (getservbyname_r(name, proto, sp, &sdata) == -1)
35
+ return -1;
36
+ *spp = sp;
37
+ return 0;
38
+ #endif /* GETSERVBYNAME_R_NUM_ARGS == 5 */
39
+ }
40
+
41
+