version 1.10, 2016/08/02 11:09:46 |
version 1.11, 2016/10/18 23:13:25 |
Line 83 fts_open(char * const *argv, int options, void *dummy) |
|
Line 83 fts_open(char * const *argv, int options, void *dummy) |
|
FTSENT *p, *root; |
FTSENT *p, *root; |
int nitems; |
int nitems; |
FTSENT *parent, *tmp; |
FTSENT *parent, *tmp; |
size_t len; |
|
|
|
/* Options check. */ |
/* Options check. */ |
if (options & ~FTS_OPTIONMASK) { |
if (options & ~FTS_OPTIONMASK) { |
Line 91 fts_open(char * const *argv, int options, void *dummy) |
|
Line 90 fts_open(char * const *argv, int options, void *dummy) |
|
return (NULL); |
return (NULL); |
} |
} |
|
|
|
/* At least one path must be specified. */ |
|
if (*argv == NULL) { |
|
errno = EINVAL; |
|
return (NULL); |
|
} |
|
|
/* Allocate/initialize the stream */ |
/* Allocate/initialize the stream */ |
if ((sp = calloc(1, sizeof(FTS))) == NULL) |
if ((sp = calloc(1, sizeof(FTS))) == NULL) |
return (NULL); |
return (NULL); |
Line 110 fts_open(char * const *argv, int options, void *dummy) |
|
Line 115 fts_open(char * const *argv, int options, void *dummy) |
|
|
|
/* Allocate/initialize root(s). */ |
/* Allocate/initialize root(s). */ |
for (root = NULL, nitems = 0; *argv; ++argv, ++nitems) { |
for (root = NULL, nitems = 0; *argv; ++argv, ++nitems) { |
/* Don't allow zero-length paths. */ |
if ((p = fts_alloc(sp, *argv, strlen(*argv))) == NULL) |
if ((len = strlen(*argv)) == 0) { |
|
errno = ENOENT; |
|
goto mem3; |
goto mem3; |
} |
|
|
|
if ((p = fts_alloc(sp, *argv, len)) == NULL) |
|
goto mem3; |
|
p->fts_level = FTS_ROOTLEVEL; |
p->fts_level = FTS_ROOTLEVEL; |
p->fts_parent = parent; |
p->fts_parent = parent; |
p->fts_accpath = p->fts_name; |
p->fts_accpath = p->fts_name; |
Line 320 name: t = sp->fts_path + NAPPEND(p->fts_parent); |
|
Line 319 name: t = sp->fts_path + NAPPEND(p->fts_parent); |
|
* semantics to fts using fts_set. An error return is allowed for similar |
* semantics to fts using fts_set. An error return is allowed for similar |
* reasons. |
* reasons. |
*/ |
*/ |
/* ARGSUSED */ |
|
int |
int |
fts_set(FTS *sp, FTSENT *p, int instr) |
fts_set(FTS *sp, FTSENT *p, int instr) |
{ |
{ |
Line 419 fts_build(FTS *sp) |
|
Line 417 fts_build(FTS *sp) |
|
* structures already allocated. |
* structures already allocated. |
*/ |
*/ |
mem1: saved_errno = errno; |
mem1: saved_errno = errno; |
if (p) |
free(p); |
free(p); |
|
fts_lfree(head); |
fts_lfree(head); |
(void)closedir(dirp); |
(void)closedir(dirp); |
cur->fts_info = FTS_ERR; |
cur->fts_info = FTS_ERR; |
Line 600 fts_palloc(FTS *sp, size_t more) |
|
Line 597 fts_palloc(FTS *sp, size_t more) |
|
*/ |
*/ |
more += 256; |
more += 256; |
if (sp->fts_pathlen + more < sp->fts_pathlen) { |
if (sp->fts_pathlen + more < sp->fts_pathlen) { |
if (sp->fts_path) |
free(sp->fts_path); |
free(sp->fts_path); |
|
sp->fts_path = NULL; |
sp->fts_path = NULL; |
errno = ENAMETOOLONG; |
errno = ENAMETOOLONG; |
return (1); |
return (1); |
Line 609 fts_palloc(FTS *sp, size_t more) |
|
Line 605 fts_palloc(FTS *sp, size_t more) |
|
sp->fts_pathlen += more; |
sp->fts_pathlen += more; |
p = realloc(sp->fts_path, sp->fts_pathlen); |
p = realloc(sp->fts_path, sp->fts_pathlen); |
if (p == NULL) { |
if (p == NULL) { |
if (sp->fts_path) |
free(sp->fts_path); |
free(sp->fts_path); |
|
sp->fts_path = NULL; |
sp->fts_path = NULL; |
return (1); |
return (1); |
} |
} |