tarruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+