socsvn commit: r223373 - soc2011/gk/ino64-head/lib/libc/gen
gk at FreeBSD.org
gk at FreeBSD.org
Fri Jun 17 22:30:45 UTC 2011
Author: gk
Date: Fri Jun 17 22:30:42 2011
New Revision: 223373
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=223373
Log:
libc: fts ftw nftw
Added:
soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.c
- copied, changed from r223372, soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c
soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.h
- copied, changed from r223372, soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h
soc2011/gk/ino64-head/lib/libc/gen/ftw-compat8.c (contents, props changed)
soc2011/gk/ino64-head/lib/libc/gen/nftw-compat8.c (contents, props changed)
Modified:
soc2011/gk/ino64-head/lib/libc/gen/Makefile.inc
soc2011/gk/ino64-head/lib/libc/gen/Symbol.map
soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c
soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h
Modified: soc2011/gk/ino64-head/lib/libc/gen/Makefile.inc
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/Makefile.inc Fri Jun 17 22:30:26 2011 (r223372)
+++ soc2011/gk/ino64-head/lib/libc/gen/Makefile.inc Fri Jun 17 22:30:42 2011 (r223373)
@@ -12,15 +12,15 @@
crypt.c ctermid.c daemon.c devname.c dirfd.c dirname.c disklabel.c \
dlfcn.c drand48.c elf_utils.c erand48.c err.c errlst.c errno.c \
exec.c fdevname.c feature_present.c fmtcheck.c fmtmsg.c fnmatch.c \
- fpclassify.c frexp.c fstab.c ftok.c fts.c fts-compat.c ftw.c \
- getbootfile.c getbsize.c \
+ fpclassify.c frexp.c fstab.c ftok.c fts.c fts-compat.c fts-compat8.c \
+ ftw.c ftw-compat8.c getbootfile.c getbsize.c \
getcap.c getcwd.c getdomainname.c getgrent.c getgrouplist.c \
gethostname.c getloadavg.c getlogin.c getmntinfo.c getnetgrent.c \
getosreldate.c getpagesize.c getpagesizes.c \
getpeereid.c getprogname.c getpwent.c getttyent.c \
getusershell.c getutxent.c getvfsbyname.c glob.c glob-compat8.c \
initgroups.c isatty.c isinf.c isnan.c jrand48.c lcong48.c \
- lockf.c lrand48.c mrand48.c nftw.c nice.c \
+ lockf.c lrand48.c mrand48.c nftw.c nftw-compat8.c nice.c \
nlist.c nrand48.c opendir.c \
pause.c pmadvise.c popen.c posix_spawn.c \
psignal.c pututxline.c pw_scan.c pwcache.c \
Modified: soc2011/gk/ino64-head/lib/libc/gen/Symbol.map
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/Symbol.map Fri Jun 17 22:30:26 2011 (r223372)
+++ soc2011/gk/ino64-head/lib/libc/gen/Symbol.map Fri Jun 17 22:30:42 2011 (r223373)
@@ -134,7 +134,6 @@
setfsent;
endfsent;
ftok;
- ftw;
getbootfile;
getbsize;
cgetset;
@@ -212,7 +211,6 @@
lockf;
lrand48;
mrand48;
- nftw;
nice;
nlist;
nrand48;
@@ -314,14 +312,6 @@
fdevname_r;
fdopendir;
feature_present;
- fts_children;
- fts_close;
- fts_get_clientptr;
- fts_get_stream;
- fts_open;
- fts_read;
- fts_set;
- fts_set_clientptr;
posix_spawn;
posix_spawn_file_actions_addclose;
posix_spawn_file_actions_adddup2;
@@ -356,6 +346,15 @@
cfmakesane;
dirfd;
endutxent;
+ fts_children;
+ fts_close;
+ fts_get_clientptr;
+ fts_get_stream;
+ fts_open;
+ fts_read;
+ fts_set;
+ fts_set_clientptr;
+ ftw;
getpagesizes;
getutxent;
getutxid;
@@ -363,6 +362,7 @@
getutxuser;
glob;
globfree;
+ nftw;
pututxline;
readdir;
readdir_r;
Modified: soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c Fri Jun 17 22:30:26 2011 (r223372)
+++ soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c Fri Jun 17 22:30:42 2011 (r223373)
@@ -49,6 +49,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include "dirent-compat.h"
#include "fts-compat.h"
#include "un-namespace.h"
@@ -637,7 +638,7 @@
FTS *sp;
int type;
{
- struct dirent *dp;
+ struct freebsd8_dirent *dp;
FTSENT *p, *head;
int nitems;
FTSENT *cur, *tail;
@@ -749,7 +750,8 @@
/* Read the directory, attaching each entry to the `link' pointer. */
doadjust = 0;
- for (head = tail = NULL, nitems = 0; dirp && (dp = readdir(dirp));) {
+ for (head = tail = NULL, nitems = 0;
+ dirp && (dp = freebsd8_readdir(dirp));) {
dnamlen = dp->d_namlen;
if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name))
continue;
@@ -906,8 +908,8 @@
{
FTSENT *t;
dev_t dev;
- ino_t ino;
- struct stat *sbp, sb;
+ uint32_t ino;
+ struct freebsd8_stat *sbp, sb;
int saved_errno;
/* If user needs stat info, stat buffer already allocated. */
@@ -930,16 +932,16 @@
* fail, set the errno from the stat call.
*/
if (ISSET(FTS_LOGICAL) || follow) {
- if (stat(p->fts_accpath, sbp)) {
+ if (freebsd8_stat(p->fts_accpath, sbp)) {
saved_errno = errno;
- if (!lstat(p->fts_accpath, sbp)) {
+ if (!freebsd8_lstat(p->fts_accpath, sbp)) {
errno = 0;
return (FTS_SLNONE);
}
p->fts_errno = saved_errno;
goto err;
}
- } else if (lstat(p->fts_accpath, sbp)) {
+ } else if (freebsd8_lstat(p->fts_accpath, sbp)) {
p->fts_errno = errno;
err: memset(sbp, 0, sizeof(struct stat));
return (FTS_NS);
@@ -1039,7 +1041,7 @@
struct ftsent_withstat {
FTSENT ent;
- struct stat statbuf;
+ struct freebsd8_stat statbuf;
};
/*
@@ -1175,14 +1177,14 @@
char *path;
{
int ret, oerrno, newfd;
- struct stat sb;
+ struct freebsd8_stat sb;
newfd = fd;
if (ISSET(FTS_NOCHDIR))
return (0);
if (fd < 0 && (newfd = _open(path, O_RDONLY, 0)) < 0)
return (-1);
- if (_fstat(newfd, &sb)) {
+ if (freebsd8_fstat(newfd, &sb)) {
ret = -1;
goto bail;
}
Modified: soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h Fri Jun 17 22:30:26 2011 (r223372)
+++ soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h Fri Jun 17 22:30:42 2011 (r223373)
@@ -86,9 +86,9 @@
u_short fts_pathlen; /* strlen(fts_path) */
u_short fts_namelen; /* strlen(fts_name) */
- ino_t fts_ino; /* inode */
+ uint32_t fts_ino; /* inode */
dev_t fts_dev; /* device */
- nlink_t fts_nlink; /* link count */
+ uint16_t fts_nlink; /* link count */
#define FTS_ROOTPARENTLEVEL -1
#define FTS_ROOTLEVEL 0
@@ -121,7 +121,7 @@
#define FTS_SKIP 4 /* discard node */
u_short fts_instr; /* fts_set() instructions */
- struct stat *fts_statp; /* stat(2) information */
+ struct freebsd8_stat *fts_statp; /* stat(2) information */
char *fts_name; /* file name */
FTS *fts_fts; /* back pointer to main FTS */
} FTSENT;
Copied and modified: soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.c (from r223372, soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c)
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/fts-compat.c Fri Jun 17 22:30:26 2011 (r223372, copy source)
+++ soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.c Fri Jun 17 22:30:42 2011 (r223373)
@@ -49,30 +49,19 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include "fts-compat.h"
+#include "dirent-compat.h"
+#include "fts-compat8.h"
#include "un-namespace.h"
-#include "dirent-private.h"
-
-FTSENT *__fts_children_44bsd(FTS *, int);
-int __fts_close_44bsd(FTS *);
-void *__fts_get_clientptr_44bsd(FTS *);
-FTS *__fts_get_stream_44bsd(FTSENT *);
-FTS *__fts_open_44bsd(char * const *, int,
- int (*)(const FTSENT * const *, const FTSENT * const *));
-FTSENT *__fts_read_44bsd(FTS *);
-int __fts_set_44bsd(FTS *, FTSENT *, int);
-void __fts_set_clientptr_44bsd(FTS *, void *);
-
-static FTSENT *fts_alloc(FTS *, char *, int);
+static FTSENT *fts_alloc(FTS *, char *, size_t);
static FTSENT *fts_build(FTS *, int);
static void fts_lfree(FTSENT *);
static void fts_load(FTS *, FTSENT *);
static size_t fts_maxarglen(char * const *);
static void fts_padjust(FTS *, FTSENT *);
static int fts_palloc(FTS *, size_t);
-static FTSENT *fts_sort(FTS *, FTSENT *, int);
-static u_short fts_stat(FTS *, FTSENT *, int);
+static FTSENT *fts_sort(FTS *, FTSENT *, size_t);
+static int fts_stat(FTS *, FTSENT *, int);
static int fts_safe_changedir(FTS *, FTSENT *, int, char *);
static int fts_ufslinks(FTS *, const FTSENT *);
@@ -112,7 +101,6 @@
static const char *ufslike_filesystems[] = {
"ufs",
- "zfs",
"nfs",
"nfs4",
"ext2fs",
@@ -120,7 +108,7 @@
};
FTS *
-__fts_open_44bsd(argv, options, compar)
+freebsd8_fts_open(argv, options, compar)
char * const *argv;
int options;
int (*compar)(const FTSENT * const *, const FTSENT * const *);
@@ -128,9 +116,8 @@
struct _fts_private *priv;
FTS *sp;
FTSENT *p, *root;
- int nitems;
FTSENT *parent, *tmp;
- int len;
+ size_t len, nitems;
/* Options check. */
if (options & ~FTS_OPTIONMASK) {
@@ -138,6 +125,12 @@
return (NULL);
}
+ /* fts_open() requires at least one path */
+ if (*argv == NULL) {
+ errno = EINVAL;
+ return (NULL);
+ }
+
/* Allocate/initialize the stream. */
if ((priv = malloc(sizeof(*priv))) == NULL)
return (NULL);
@@ -237,7 +230,7 @@
FTS *sp;
FTSENT *p;
{
- int len;
+ size_t len;
char *cp;
/*
@@ -259,7 +252,7 @@
}
int
-__fts_close_44bsd(sp)
+freebsd8_fts_close(sp)
FTS *sp;
{
FTSENT *freep, *p;
@@ -314,7 +307,7 @@
? p->fts_pathlen - 1 : p->fts_pathlen)
FTSENT *
-__fts_read_44bsd(sp)
+freebsd8_fts_read(sp)
FTS *sp;
{
FTSENT *p, *tmp;
@@ -508,7 +501,7 @@
*/
/* ARGSUSED */
int
-__fts_set_44bsd(sp, p, instr)
+freebsd8_fts_set(sp, p, instr)
FTS *sp;
FTSENT *p;
int instr;
@@ -523,7 +516,7 @@
}
FTSENT *
-__fts_children_44bsd(sp, instr)
+freebsd8_fts_children(sp, instr)
FTS *sp;
int instr;
{
@@ -584,35 +577,37 @@
if ((fd = _open(".", O_RDONLY, 0)) < 0)
return (NULL);
sp->fts_child = fts_build(sp, instr);
- if (fchdir(fd))
+ if (fchdir(fd)) {
+ (void)_close(fd);
return (NULL);
+ }
(void)_close(fd);
return (sp->fts_child);
}
-#ifndef fts_get_clientptr
-#error "fts_get_clientptr not defined"
+#ifndef freebsd8_fts_get_clientptr
+#error "freebsd8_fts_get_clientptr not defined"
#endif
void *
-(__fts_get_clientptr_44bsd)(FTS *sp)
+(freebsd8_fts_get_clientptr)(FTS *sp)
{
- return (fts_get_clientptr(sp));
+ return (freebsd8_fts_get_clientptr(sp));
}
-#ifndef fts_get_stream
-#error "fts_get_stream not defined"
+#ifndef freebsd8_fts_get_stream
+#error "freebsd8_fts_get_stream not defined"
#endif
FTS *
-(__fts_get_stream_44bsd)(FTSENT *p)
+(freebsd8_fts_get_stream)(FTSENT *p)
{
- return (fts_get_stream(p));
+ return (freebsd8_fts_get_stream(p));
}
void
-__fts_set_clientptr_44bsd(FTS *sp, void *clientptr)
+freebsd8_fts_set_clientptr(FTS *sp, void *clientptr)
{
sp->fts_clientptr = clientptr;
@@ -637,16 +632,16 @@
FTS *sp;
int type;
{
- struct dirent *dp;
+ struct freebsd8_dirent *dp;
FTSENT *p, *head;
- int nitems;
FTSENT *cur, *tail;
DIR *dirp;
void *oldaddr;
- size_t dnamlen;
- int cderrno, descend, len, level, maxlen, nlinks, oflag, saved_errno,
- nostat, doadjust;
char *cp;
+ int cderrno, descend, oflag, saved_errno, nostat, doadjust;
+ long level;
+ long nlinks; /* has to be signed because -1 is a magic value */
+ size_t dnamlen, len, maxlen, nitems;
/* Set current node pointer. */
cur = sp->fts_cur;
@@ -713,7 +708,7 @@
*/
cderrno = 0;
if (nlinks || type == BREAD) {
- if (fts_safe_changedir(sp, cur, _dirfd(dirp), NULL)) {
+ if (fts_safe_changedir(sp, cur, dirfd(dirp), NULL)) {
if (nlinks && type == BREAD)
cur->fts_errno = errno;
cur->fts_flags |= FTS_DONTCHDIR;
@@ -749,12 +744,13 @@
/* Read the directory, attaching each entry to the `link' pointer. */
doadjust = 0;
- for (head = tail = NULL, nitems = 0; dirp && (dp = readdir(dirp));) {
+ for (head = tail = NULL, nitems = 0;
+ dirp && (dp = freebsd8_readdir(dirp));) {
dnamlen = dp->d_namlen;
if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name))
continue;
- if ((p = fts_alloc(sp, dp->d_name, (int)dnamlen)) == NULL)
+ if ((p = fts_alloc(sp, dp->d_name, dnamlen)) == NULL)
goto mem1;
if (dnamlen >= maxlen) { /* include space for NUL */
oldaddr = sp->fts_path;
@@ -783,21 +779,6 @@
maxlen = sp->fts_pathlen - len;
}
- if (len + dnamlen >= USHRT_MAX) {
- /*
- * In an FTSENT, fts_pathlen is a u_short so it is
- * possible to wraparound here. If we do, free up
- * the current structure and the structures already
- * allocated, then error out with ENAMETOOLONG.
- */
- free(p);
- fts_lfree(head);
- (void)closedir(dirp);
- cur->fts_info = FTS_ERR;
- SET(FTS_STOP);
- errno = ENAMETOOLONG;
- return (NULL);
- }
p->fts_level = level;
p->fts_parent = sp->fts_cur;
p->fts_pathlen = len + dnamlen;
@@ -863,11 +844,8 @@
* If not changing directories, reset the path back to original
* state.
*/
- if (ISSET(FTS_NOCHDIR)) {
- if (len == sp->fts_pathlen || nitems == 0)
- --cp;
- *cp = '\0';
- }
+ if (ISSET(FTS_NOCHDIR))
+ sp->fts_path[cur->fts_pathlen] = '\0';
/*
* If descended after called from fts_children or after called from
@@ -898,7 +876,7 @@
return (head);
}
-static u_short
+static int
fts_stat(sp, p, follow)
FTS *sp;
FTSENT *p;
@@ -906,8 +884,8 @@
{
FTSENT *t;
dev_t dev;
- ino_t ino;
- struct stat *sbp, sb;
+ uint32_t ino;
+ struct freebsd8_stat *sbp, sb;
int saved_errno;
/* If user needs stat info, stat buffer already allocated. */
@@ -930,16 +908,16 @@
* fail, set the errno from the stat call.
*/
if (ISSET(FTS_LOGICAL) || follow) {
- if (stat(p->fts_accpath, sbp)) {
+ if (freebsd8_stat(p->fts_accpath, sbp)) {
saved_errno = errno;
- if (!lstat(p->fts_accpath, sbp)) {
+ if (!freebsd8_lstat(p->fts_accpath, sbp)) {
errno = 0;
return (FTS_SLNONE);
}
p->fts_errno = saved_errno;
goto err;
}
- } else if (lstat(p->fts_accpath, sbp)) {
+ } else if (freebsd8_lstat(p->fts_accpath, sbp)) {
p->fts_errno = errno;
err: memset(sbp, 0, sizeof(struct stat));
return (FTS_NS);
@@ -1000,7 +978,7 @@
fts_sort(sp, head, nitems)
FTS *sp;
FTSENT *head;
- int nitems;
+ size_t nitems;
{
FTSENT **ap, *p;
@@ -1032,14 +1010,14 @@
fts_alloc(sp, name, namelen)
FTS *sp;
char *name;
- int namelen;
+ size_t namelen;
{
FTSENT *p;
size_t len;
struct ftsent_withstat {
FTSENT ent;
- struct stat statbuf;
+ struct freebsd8_stat statbuf;
};
/*
@@ -1104,18 +1082,6 @@
{
sp->fts_pathlen += more + 256;
- /*
- * Check for possible wraparound. In an FTS, fts_pathlen is
- * a signed int but in an FTSENT it is an unsigned short.
- * We limit fts_pathlen to USHRT_MAX to be safe in both cases.
- */
- if (sp->fts_pathlen < 0 || sp->fts_pathlen >= USHRT_MAX) {
- if (sp->fts_path)
- free(sp->fts_path);
- sp->fts_path = NULL;
- errno = ENAMETOOLONG;
- return (1);
- }
sp->fts_path = reallocf(sp->fts_path, sp->fts_pathlen);
return (sp->fts_path == NULL);
}
@@ -1175,14 +1141,14 @@
char *path;
{
int ret, oerrno, newfd;
- struct stat sb;
+ struct freebsd8_stat sb;
newfd = fd;
if (ISSET(FTS_NOCHDIR))
return (0);
if (fd < 0 && (newfd = _open(path, O_RDONLY, 0)) < 0)
return (-1);
- if (_fstat(newfd, &sb)) {
+ if (freebsd8_fstat(newfd, &sb)) {
ret = -1;
goto bail;
}
@@ -1234,11 +1200,11 @@
return (priv->ftsp_linksreliable);
}
-__sym_compat(fts_open, __fts_open_44bsd, FBSD_1.0);
-__sym_compat(fts_close, __fts_close_44bsd, FBSD_1.0);
-__sym_compat(fts_read, __fts_read_44bsd, FBSD_1.0);
-__sym_compat(fts_set, __fts_set_44bsd, FBSD_1.0);
-__sym_compat(fts_children, __fts_children_44bsd, FBSD_1.0);
-__sym_compat(fts_get_clientptr, __fts_get_clientptr_44bsd, FBSD_1.0);
-__sym_compat(fts_get_stream, __fts_get_stream_44bsd, FBSD_1.0);
-__sym_compat(fts_set_clientptr, __fts_set_clientptr_44bsd, FBSD_1.0);
+__sym_compat(fts_open, freebsd8_fts_open, FBSD_1.1);
+__sym_compat(fts_close, freebsd8_fts_close, FBSD_1.1);
+__sym_compat(fts_read, freebsd8_fts_read, FBSD_1.1);
+__sym_compat(fts_set, freebsd8_fts_set, FBSD_1.1);
+__sym_compat(fts_children, freebsd8_fts_children, FBSD_1.1);
+__sym_compat(fts_get_clientptr, freebsd8_fts_get_clientptr, FBSD_1.1);
+__sym_compat(fts_get_stream, freebsd8_fts_get_stream, FBSD_1.1);
+__sym_compat(fts_set_clientptr, freebsd8_fts_set_clientptr, FBSD_1.1);
Copied and modified: soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.h (from r223372, soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h)
==============================================================================
--- soc2011/gk/ino64-head/lib/libc/gen/fts-compat.h Fri Jun 17 22:30:26 2011 (r223372, copy source)
+++ soc2011/gk/ino64-head/lib/libc/gen/fts-compat8.h Fri Jun 17 22:30:42 2011 (r223373)
@@ -10,11 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -44,8 +40,8 @@
dev_t fts_dev; /* starting device # */
char *fts_path; /* path for this descent */
int fts_rfd; /* fd for root */
- int fts_pathlen; /* sizeof(path) */
- int fts_nitems; /* elements in the sort array */
+ size_t fts_pathlen; /* sizeof(path) */
+ size_t fts_nitems; /* elements in the sort array */
int (*fts_compar) /* compare function */
(const struct _ftsent * const *, const struct _ftsent * const *);
@@ -69,30 +65,23 @@
struct _ftsent *fts_cycle; /* cycle node */
struct _ftsent *fts_parent; /* parent directory */
struct _ftsent *fts_link; /* next file in directory */
- union {
- struct {
- long __fts_number; /* local numeric value */
- void *__fts_pointer; /* local address value */
- } __struct_ftsent;
- int64_t __fts_bignum;
- } __union_ftsent;
-#define fts_number __union_ftsent.__struct_ftsent.__fts_number
-#define fts_pointer __union_ftsent.__struct_ftsent.__fts_pointer
-#define fts_bignum __union_ftsent.__fts_bignum
+ long long fts_number; /* local numeric value */
+#define fts_bignum fts_number /* XXX non-std, should go away */
+ void *fts_pointer; /* local address value */
char *fts_accpath; /* access path */
char *fts_path; /* root path */
int fts_errno; /* errno for this node */
int fts_symfd; /* fd for symlink */
- u_short fts_pathlen; /* strlen(fts_path) */
- u_short fts_namelen; /* strlen(fts_name) */
+ size_t fts_pathlen; /* strlen(fts_path) */
+ size_t fts_namelen; /* strlen(fts_name) */
- ino_t fts_ino; /* inode */
+ uint32_t fts_ino; /* inode */
dev_t fts_dev; /* device */
- nlink_t fts_nlink; /* link count */
+ uint16_t fts_nlink; /* link count */
#define FTS_ROOTPARENTLEVEL -1
#define FTS_ROOTLEVEL 0
- short fts_level; /* depth (-1 to N) */
+ long fts_level; /* depth (-1 to N) */
#define FTS_D 1 /* preorder directory */
#define FTS_DC 2 /* directory that causes cycles */
@@ -108,25 +97,34 @@
#define FTS_SL 12 /* symbolic link */
#define FTS_SLNONE 13 /* symbolic link without target */
#define FTS_W 14 /* whiteout object */
- u_short fts_info; /* user flags for FTSENT structure */
+ int fts_info; /* user status for FTSENT structure */
#define FTS_DONTCHDIR 0x01 /* don't chdir .. to the parent */
#define FTS_SYMFOLLOW 0x02 /* followed a symlink to get here */
#define FTS_ISW 0x04 /* this is a whiteout object */
- u_short fts_flags; /* private flags for FTSENT structure */
+ unsigned fts_flags; /* private flags for FTSENT structure */
#define FTS_AGAIN 1 /* read node again */
#define FTS_FOLLOW 2 /* follow symbolic link */
#define FTS_NOINSTR 3 /* no instructions */
#define FTS_SKIP 4 /* discard node */
- u_short fts_instr; /* fts_set() instructions */
+ int fts_instr; /* fts_set() instructions */
- struct stat *fts_statp; /* stat(2) information */
+ struct freebsd8_stat *fts_statp; /* stat(2) information */
char *fts_name; /* file name */
FTS *fts_fts; /* back pointer to main FTS */
} FTSENT;
-#define fts_get_clientptr(fts) ((fts)->fts_clientptr)
-#define fts_get_stream(ftsent) ((ftsent)->fts_fts)
+FTSENT *freebsd8_fts_children(FTS *, int);
+int freebsd8_fts_close(FTS *);
+void *freebsd8_fts_get_clientptr(FTS *);
+#define freebsd8_fts_get_clientptr(fts) ((fts)->fts_clientptr)
+FTS *freebsd8_fts_get_stream(FTSENT *);
+#define freebsd8_fts_get_stream(ftsent) ((ftsent)->fts_fts)
+FTS *freebsd8_fts_open(char * const *, int,
+ int (*)(const FTSENT * const *, const FTSENT * const *));
+FTSENT *freebsd8_fts_read(FTS *);
+int freebsd8_fts_set(FTS *, FTSENT *, int);
+void freebsd8_fts_set_clientptr(FTS *, void *);
#endif /* !_FTS_H_ */
Added: soc2011/gk/ino64-head/lib/libc/gen/ftw-compat8.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2011/gk/ino64-head/lib/libc/gen/ftw-compat8.c Fri Jun 17 22:30:42 2011 (r223373)
@@ -0,0 +1,102 @@
+/* $OpenBSD: ftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $ */
+
+/*
+ * Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller at courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Sponsored in part by the Defense Advanced Research Projects
+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
+ * Materiel Command, USAF, under agreement number F39502-99-1-0512.
+ */
+
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$OpenBSD: ftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $";
+#endif /* LIBC_SCCS and not lint */
+#endif
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ftw.h>
+#include <limits.h>
+
+#include "fts-compat8.h"
+
+int
+freebsd8_ftw(const char *path,
+ int (*fn)(const char *, const struct freebsd8_stat *, int), int nfds)
+{
+ char * const paths[2] = { (char *)path, NULL };
+ FTSENT *cur;
+ FTS *ftsp;
+ int error = 0, fnflag, sverrno;
+
+ /* XXX - nfds is currently unused */
+ if (nfds < 1 || nfds > OPEN_MAX) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ ftsp = freebsd8_fts_open(paths,
+ FTS_LOGICAL | FTS_COMFOLLOW | FTS_NOCHDIR, NULL);
+ if (ftsp == NULL)
+ return (-1);
+ while ((cur = freebsd8_fts_read(ftsp)) != NULL) {
+ switch (cur->fts_info) {
+ case FTS_D:
+ fnflag = FTW_D;
+ break;
+ case FTS_DNR:
+ fnflag = FTW_DNR;
+ break;
+ case FTS_DP:
+ /* we only visit in preorder */
+ continue;
+ case FTS_F:
+ case FTS_DEFAULT:
+ fnflag = FTW_F;
+ break;
+ case FTS_NS:
+ case FTS_NSOK:
+ case FTS_SLNONE:
+ fnflag = FTW_NS;
+ break;
+ case FTS_SL:
+ fnflag = FTW_SL;
+ break;
+ case FTS_DC:
+ errno = ELOOP;
+ /* FALLTHROUGH */
+ default:
+ error = -1;
+ goto done;
+ }
+ error = fn(cur->fts_path, cur->fts_statp, fnflag);
+ if (error != 0)
+ break;
+ }
+done:
+ sverrno = errno;
+ if (freebsd8_fts_close(ftsp) != 0 && error == 0)
+ error = -1;
+ else
+ errno = sverrno;
+ return (error);
+}
+
+__sym_compat(ftw, freebsd8_ftw, FBSD_1.0);
Added: soc2011/gk/ino64-head/lib/libc/gen/nftw-compat8.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2011/gk/ino64-head/lib/libc/gen/nftw-compat8.c Fri Jun 17 22:30:42 2011 (r223373)
@@ -0,0 +1,121 @@
+/* $OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $ */
+
+/*
+ * Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller at courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Sponsored in part by the Defense Advanced Research Projects
+ * Agency (DARPA) and Air Force Research Laboratory, Air Force
+ * Materiel Command, USAF, under agreement number F39502-99-1-0512.
+ */
+
+#if 0
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $";
+#endif /* LIBC_SCCS and not lint */
+#endif
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <ftw.h>
+#include <limits.h>
+
+#include "fts-compat8.h"
+
+int
+freebsd8_nftw(const char *path,
+ int (*fn)(const char *, const struct freebsd8_stat *, int, struct FTW *),
+ int nfds, int ftwflags)
+{
+ char * const paths[2] = { (char *)path, NULL };
+ struct FTW ftw;
+ FTSENT *cur;
+ FTS *ftsp;
+ int error = 0, ftsflags, fnflag, postorder, sverrno;
+
+ /* XXX - nfds is currently unused */
+ if (nfds < 1 || nfds > OPEN_MAX) {
+ errno = EINVAL;
+ return (-1);
+ }
+
+ ftsflags = FTS_COMFOLLOW;
+ if (!(ftwflags & FTW_CHDIR))
+ ftsflags |= FTS_NOCHDIR;
+ if (ftwflags & FTW_MOUNT)
+ ftsflags |= FTS_XDEV;
+ if (ftwflags & FTW_PHYS)
+ ftsflags |= FTS_PHYSICAL;
+ else
+ ftsflags |= FTS_LOGICAL;
+ postorder = (ftwflags & FTW_DEPTH) != 0;
+ ftsp = freebsd8_fts_open(paths, ftsflags, NULL);
+ if (ftsp == NULL)
+ return (-1);
+ while ((cur = freebsd8_fts_read(ftsp)) != NULL) {
+ switch (cur->fts_info) {
+ case FTS_D:
+ if (postorder)
+ continue;
+ fnflag = FTW_D;
+ break;
+ case FTS_DNR:
+ fnflag = FTW_DNR;
+ break;
+ case FTS_DP:
+ if (!postorder)
+ continue;
+ fnflag = FTW_DP;
+ break;
+ case FTS_F:
+ case FTS_DEFAULT:
+ fnflag = FTW_F;
+ break;
+ case FTS_NS:
+ case FTS_NSOK:
+ fnflag = FTW_NS;
+ break;
+ case FTS_SL:
+ fnflag = FTW_SL;
+ break;
+ case FTS_SLNONE:
+ fnflag = FTW_SLN;
+ break;
+ case FTS_DC:
+ errno = ELOOP;
+ /* FALLTHROUGH */
+ default:
+ error = -1;
+ goto done;
+ }
+ ftw.base = cur->fts_pathlen - cur->fts_namelen;
+ ftw.level = cur->fts_level;
+ error = fn(cur->fts_path, cur->fts_statp, fnflag, &ftw);
+ if (error != 0)
+ break;
+ }
+done:
+ sverrno = errno;
+ if (freebsd8_fts_close(ftsp) != 0 && error == 0)
+ error = -1;
+ else
+ errno = sverrno;
+ return (error);
+}
+
+__sym_compat(nftw, freebsd8_nftw, FBSD_1.0);
More information about the svn-soc-all
mailing list