version 1.53, 2023/03/08 04:43:10 |
version 1.54, 2023/04/01 05:27:44 |
|
|
{ |
{ |
long long value; |
long long value; |
char *endchar, *str; /* Pointer to character ending conversion. */ |
char *endchar, *str; /* Pointer to character ending conversion. */ |
|
|
/* Determine comparison from leading + or -. */ |
/* Determine comparison from leading + or -. */ |
str = vp; |
str = vp; |
switch (*str) { |
switch (*str) { |
|
|
plan->flags = F_EQUAL; |
plan->flags = F_EQUAL; |
break; |
break; |
} |
} |
|
|
/* |
/* |
* Convert the string with strtoll(). Note, if strtoll() returns |
* Convert the string with strtoll(). Note, if strtoll() returns |
* zero and endchar points to the beginning of the string we know |
* zero and endchar points to the beginning of the string we know |
|
|
COMPARE((now - entry->fts_statp->st_atime + |
COMPARE((now - entry->fts_statp->st_atime + |
SECSPERDAY - 1) / SECSPERDAY, plan->sec_data); |
SECSPERDAY - 1) / SECSPERDAY, plan->sec_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_atime(char *arg, char ***ignored, int unused) |
c_atime(char *arg, char ***ignored, int unused) |
{ |
{ |
|
|
COMPARE((now - entry->fts_statp->st_ctime + |
COMPARE((now - entry->fts_statp->st_ctime + |
SECSPERDAY - 1) / SECSPERDAY, plan->sec_data); |
SECSPERDAY - 1) / SECSPERDAY, plan->sec_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_ctime(char *arg, char ***ignored, int unused) |
c_ctime(char *arg, char ***ignored, int unused) |
{ |
{ |
|
|
{ |
{ |
return (1); |
return (1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_depth(char *ignore, char ***ignored, int unused) |
c_depth(char *ignore, char ***ignored, int unused) |
{ |
{ |
|
|
|
|
return (palloc(N_DELETE, f_delete)); |
return (palloc(N_DELETE, f_delete)); |
} |
} |
|
|
/* |
/* |
* -empty functions -- |
* -empty functions -- |
* |
* |
|
|
plan->ep_bxp[plan->ep_narg] = NULL; |
plan->ep_bxp[plan->ep_narg] = NULL; |
|
|
/* Don't mix output of command with find output. */ |
/* Don't mix output of command with find output. */ |
fflush(stdout); |
fflush(stdout); |
fflush(stderr); |
fflush(stderr); |
|
|
switch (pid = vfork()) { |
switch (pid = vfork()) { |
case -1: |
case -1: |
|
|
if (rval) |
if (rval) |
plan->ep_rval = rval; |
plan->ep_rval = rval; |
} |
} |
|
|
/* |
/* |
* c_exec -- |
* c_exec -- |
* build three parallel arrays, one with pointers to the strings passed |
* build three parallel arrays, one with pointers to the strings passed |
|
|
errx(1, "%s: cannot open \".\"", isok ? "-ok" : "-exec"); |
errx(1, "%s: cannot open \".\"", isok ? "-ok" : "-exec"); |
|
|
isoutput = 1; |
isoutput = 1; |
|
|
new = palloc(N_EXEC, f_exec); |
new = palloc(N_EXEC, f_exec); |
if (isok) |
if (isok) |
new->flags |= F_NEEDOK; |
new->flags |= F_NEEDOK; |
|
|
argv < ap; |
argv < ap; |
++argv, ++cnt) { |
++argv, ++cnt) { |
c += strlen(*argv) + 1; |
c += strlen(*argv) + 1; |
new->e_argv[cnt] = *argv; |
new->e_argv[cnt] = *argv; |
} |
} |
if (arg_max < 4 * 1024 + c) |
if (arg_max < 4 * 1024 + c) |
errx(1, "-exec: no space left to run child command"); |
errx(1, "-exec: no space left to run child command"); |
bufsize = arg_max - 4 * 1024 - c; |
bufsize = arg_max - 4 * 1024 - c; |
|
|
} |
} |
} |
} |
new->e_orig[cnt] = NULL; |
new->e_orig[cnt] = NULL; |
} |
} |
|
|
new->e_argv[cnt] = NULL; |
new->e_argv[cnt] = NULL; |
*argvp = argv + 1; |
*argvp = argv + 1; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -execdir utility [arg ... ] ; functions -- |
* -execdir utility [arg ... ] ; functions -- |
* |
* |
|
|
pid = waitpid(pid, &status, 0); |
pid = waitpid(pid, &status, 0); |
return (pid != -1 && WIFEXITED(status) && !WEXITSTATUS(status)); |
return (pid != -1 && WIFEXITED(status) && !WEXITSTATUS(status)); |
} |
} |
|
|
/* |
/* |
* c_execdir -- |
* c_execdir -- |
* build three parallel arrays, one with pointers to the strings passed |
* build three parallel arrays, one with pointers to the strings passed |
|
|
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
isoutput = 1; |
isoutput = 1; |
|
|
new = palloc(N_EXECDIR, f_execdir); |
new = palloc(N_EXECDIR, f_execdir); |
|
|
for (ap = argv = *argvp;; ++ap) { |
for (ap = argv = *argvp;; ++ap) { |
|
|
new->fl_mask = flags | notflags; |
new->fl_mask = flags | notflags; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -follow functions -- |
* -follow functions -- |
* |
* |
|
|
|
|
return (palloc(N_FOLLOW, f_always_true)); |
return (palloc(N_FOLLOW, f_always_true)); |
} |
} |
|
|
/* |
/* |
* -fstype functions -- |
* -fstype functions -- |
* |
* |
|
|
p[0] = '.'; |
p[0] = '.'; |
save[1] = p[1]; |
save[1] = p[1]; |
p[1] = '\0'; |
p[1] = '\0'; |
|
|
} else |
} else |
p = NULL; |
p = NULL; |
|
|
if (statfs(entry->fts_accpath, &sb)) |
if (statfs(entry->fts_accpath, &sb)) |
|
|
} |
} |
switch (plan->flags) { |
switch (plan->flags) { |
case F_MTFLAG: |
case F_MTFLAG: |
return (val & plan->mt_data); |
return (val & plan->mt_data); |
case F_MTTYPE: |
case F_MTTYPE: |
return (strncmp(fstype, plan->c_data, MFSNAMELEN) == 0); |
return (strncmp(fstype, plan->c_data, MFSNAMELEN) == 0); |
default: |
default: |
abort(); |
abort(); |
} |
} |
} |
} |
|
|
PLAN * |
PLAN * |
c_fstype(char *arg, char ***ignored, int unused) |
c_fstype(char *arg, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
new = palloc(N_FSTYPE, f_fstype); |
new = palloc(N_FSTYPE, f_fstype); |
switch (*arg) { |
switch (*arg) { |
case 'l': |
case 'l': |
|
|
new->c_data = arg; |
new->c_data = arg; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -group gname functions -- |
* -group gname functions -- |
* |
* |
|
|
{ |
{ |
return (entry->fts_statp->st_gid == plan->g_data); |
return (entry->fts_statp->st_gid == plan->g_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_group(char *gname, char ***ignored, int unused) |
c_group(char *gname, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
gid_t gid; |
gid_t gid; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
if (gid_from_group(gname, &gid) == -1) { |
if (gid_from_group(gname, &gid) == -1) { |
|
|
if (errstr) |
if (errstr) |
errx(1, "-group: %s: no such group", gname); |
errx(1, "-group: %s: no such group", gname); |
} |
} |
|
|
new = palloc(N_GROUP, f_group); |
new = palloc(N_GROUP, f_group); |
new->g_data = gid; |
new->g_data = gid; |
return (new); |
return (new); |
|
|
{ |
{ |
COMPARE(entry->fts_statp->st_ino, plan->i_data); |
COMPARE(entry->fts_statp->st_ino, plan->i_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_inum(char *arg, char ***ignored, int unused) |
c_inum(char *arg, char ***ignored, int unused) |
{ |
{ |
long long inum; |
long long inum; |
PLAN *new; |
PLAN *new; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
new = palloc(N_INUM, f_inum); |
new = palloc(N_INUM, f_inum); |
inum = find_parsenum(new, "-inum", arg, NULL); |
inum = find_parsenum(new, "-inum", arg, NULL); |
if (inum != (ino_t)inum) |
if (inum != (ino_t)inum) |
|
|
new->i_data = inum; |
new->i_data = inum; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -links n functions -- |
* -links n functions -- |
* |
* |
|
|
{ |
{ |
COMPARE(entry->fts_statp->st_nlink, plan->l_data); |
COMPARE(entry->fts_statp->st_nlink, plan->l_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_links(char *arg, char ***ignored, int unused) |
c_links(char *arg, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
long long nlink; |
long long nlink; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
new = palloc(N_LINKS, f_links); |
new = palloc(N_LINKS, f_links); |
nlink = find_parsenum(new, "-links", arg, NULL); |
nlink = find_parsenum(new, "-links", arg, NULL); |
if (nlink != (nlink_t)nlink) |
if (nlink != (nlink_t)nlink) |
|
|
new->l_data = nlink; |
new->l_data = nlink; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -ls functions -- |
* -ls functions -- |
* |
* |
|
|
printlong(entry->fts_path, entry->fts_accpath, entry->fts_statp); |
printlong(entry->fts_path, entry->fts_accpath, entry->fts_statp); |
return (1); |
return (1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_ls(char *ignore, char ***ignored, int unused) |
c_ls(char *ignore, char ***ignored, int unused) |
{ |
{ |
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
isoutput = 1; |
isoutput = 1; |
|
|
return (palloc(N_LS, f_ls)); |
return (palloc(N_LS, f_ls)); |
} |
} |
|
|
|
|
COMPARE((now - entry->fts_statp->st_mtime + SECSPERDAY - 1) / |
COMPARE((now - entry->fts_statp->st_mtime + SECSPERDAY - 1) / |
SECSPERDAY, plan->sec_data); |
SECSPERDAY, plan->sec_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_mtime(char *arg, char ***ignored, int unused) |
c_mtime(char *arg, char ***ignored, int unused) |
{ |
{ |
|
|
{ |
{ |
return (!fnmatch(plan->c_data, entry->fts_name, 0)); |
return (!fnmatch(plan->c_data, entry->fts_name, 0)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_name(char *pattern, char ***ignored, int unused) |
c_name(char *pattern, char ***ignored, int unused) |
{ |
{ |
|
|
* -iname functions -- |
* -iname functions -- |
* |
* |
* Similar to -name, but does case insensitive matching |
* Similar to -name, but does case insensitive matching |
* |
* |
*/ |
*/ |
int |
int |
f_iname(PLAN *plan, FTSENT *entry) |
f_iname(PLAN *plan, FTSENT *entry) |
{ |
{ |
return (!fnmatch(plan->c_data, entry->fts_name, FNM_CASEFOLD)); |
return (!fnmatch(plan->c_data, entry->fts_name, FNM_CASEFOLD)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_iname(char *pattern, char ***ignored, int unused) |
c_iname(char *pattern, char ***ignored, int unused) |
{ |
{ |
|
|
new->c_data = pattern; |
new->c_data = pattern; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -newer file functions -- |
* -newer file functions -- |
* |
* |
|
|
(entry->fts_statp->st_mtimespec.tv_sec == plan->t_data.tv_sec && |
(entry->fts_statp->st_mtimespec.tv_sec == plan->t_data.tv_sec && |
entry->fts_statp->st_mtimespec.tv_nsec > plan->t_data.tv_nsec)); |
entry->fts_statp->st_mtimespec.tv_nsec > plan->t_data.tv_nsec)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_newer(char *filename, char ***ignored, int unused) |
c_newer(char *filename, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
struct stat sb; |
struct stat sb; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
if (stat(filename, &sb)) |
if (stat(filename, &sb)) |
|
|
memcpy(&new->t_data, &sb.st_mtimespec, sizeof(struct timespec)); |
memcpy(&new->t_data, &sb.st_mtimespec, sizeof(struct timespec)); |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -anewer file functions -- |
* -anewer file functions -- |
* |
* |
|
|
(entry->fts_statp->st_atimespec.tv_sec == plan->t_data.tv_sec && |
(entry->fts_statp->st_atimespec.tv_sec == plan->t_data.tv_sec && |
entry->fts_statp->st_atimespec.tv_nsec > plan->t_data.tv_nsec)); |
entry->fts_statp->st_atimespec.tv_nsec > plan->t_data.tv_nsec)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_anewer(char *filename, char ***ignored, int unused) |
c_anewer(char *filename, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
struct stat sb; |
struct stat sb; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
if (stat(filename, &sb)) |
if (stat(filename, &sb)) |
|
|
memcpy(&new->t_data, &sb.st_atimespec, sizeof(struct timespec)); |
memcpy(&new->t_data, &sb.st_atimespec, sizeof(struct timespec)); |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -cnewer file functions -- |
* -cnewer file functions -- |
* |
* |
|
|
(entry->fts_statp->st_ctimespec.tv_sec == plan->t_data.tv_sec && |
(entry->fts_statp->st_ctimespec.tv_sec == plan->t_data.tv_sec && |
entry->fts_statp->st_ctimespec.tv_nsec > plan->t_data.tv_nsec)); |
entry->fts_statp->st_ctimespec.tv_nsec > plan->t_data.tv_nsec)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_cnewer(char *filename, char ***ignored, int unused) |
c_cnewer(char *filename, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
struct stat sb; |
struct stat sb; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
if (stat(filename, &sb)) |
if (stat(filename, &sb)) |
|
|
memcpy(&new->t_data, &sb.st_ctimespec, sizeof(struct timespec)); |
memcpy(&new->t_data, &sb.st_ctimespec, sizeof(struct timespec)); |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -nogroup functions -- |
* -nogroup functions -- |
* |
* |
|
|
{ |
{ |
return (group_from_gid(entry->fts_statp->st_gid, 1) ? 0 : 1); |
return (group_from_gid(entry->fts_statp->st_gid, 1) ? 0 : 1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_nogroup(char *ignore, char ***ignored, int unused) |
c_nogroup(char *ignore, char ***ignored, int unused) |
{ |
{ |
|
|
|
|
return (palloc(N_NOGROUP, f_nogroup)); |
return (palloc(N_NOGROUP, f_nogroup)); |
} |
} |
|
|
/* |
/* |
* -nouser functions -- |
* -nouser functions -- |
* |
* |
|
|
{ |
{ |
return (user_from_uid(entry->fts_statp->st_uid, 1) ? 0 : 1); |
return (user_from_uid(entry->fts_statp->st_uid, 1) ? 0 : 1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_nouser(char *ignore, char ***ignored, int unused) |
c_nouser(char *ignore, char ***ignored, int unused) |
{ |
{ |
|
|
|
|
return (palloc(N_NOUSER, f_nouser)); |
return (palloc(N_NOUSER, f_nouser)); |
} |
} |
|
|
/* |
/* |
* -path functions -- |
* -path functions -- |
* |
* |
|
|
{ |
{ |
return (!fnmatch(plan->c_data, entry->fts_path, 0)); |
return (!fnmatch(plan->c_data, entry->fts_path, 0)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_path(char *pattern, char ***ignored, int unused) |
c_path(char *pattern, char ***ignored, int unused) |
{ |
{ |
|
|
new->c_data = pattern; |
new->c_data = pattern; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -perm functions -- |
* -perm functions -- |
* |
* |
|
|
return (mode == plan->m_data); |
return (mode == plan->m_data); |
/* NOTREACHED */ |
/* NOTREACHED */ |
} |
} |
|
|
PLAN * |
PLAN * |
c_perm(char *perm, char ***ignored, int unused) |
c_perm(char *perm, char ***ignored, int unused) |
{ |
{ |
|
|
free(set); |
free(set); |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -print functions -- |
* -print functions -- |
* |
* |
|
|
(void)fputc('\0', stdout); |
(void)fputc('\0', stdout); |
return(1); |
return(1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_print(char *ignore, char ***ignored, int unused) |
c_print(char *ignore, char ***ignored, int unused) |
{ |
{ |
|
|
|
|
return(palloc(N_PRINT0, f_print0)); |
return(palloc(N_PRINT0, f_print0)); |
} |
} |
|
|
/* |
/* |
* -prune functions -- |
* -prune functions -- |
* |
* |
|
|
err(1, "%s", entry->fts_path); |
err(1, "%s", entry->fts_path); |
return (1); |
return (1); |
} |
} |
|
|
PLAN * |
PLAN * |
c_prune(char *ignore, char ***ignored, int unused) |
c_prune(char *ignore, char ***ignored, int unused) |
{ |
{ |
return (palloc(N_PRUNE, f_prune)); |
return (palloc(N_PRUNE, f_prune)); |
} |
} |
|
|
/* |
/* |
* -size n[c] functions -- |
* -size n[c] functions -- |
* |
* |
|
|
FIND_SIZE : entry->fts_statp->st_size; |
FIND_SIZE : entry->fts_statp->st_size; |
COMPARE(size, plan->o_data); |
COMPARE(size, plan->o_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_size(char *arg, char ***ignored, int unused) |
c_size(char *arg, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
char endch; |
char endch; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
new = palloc(N_SIZE, f_size); |
new = palloc(N_SIZE, f_size); |
|
|
divsize = 0; |
divsize = 0; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -type c functions -- |
* -type c functions -- |
* |
* |
|
|
{ |
{ |
return ((entry->fts_statp->st_mode & S_IFMT) == plan->m_data); |
return ((entry->fts_statp->st_mode & S_IFMT) == plan->m_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_type(char *typestring, char ***ignored, int unused) |
c_type(char *typestring, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
mode_t mask; |
mode_t mask; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
switch (typestring[0]) { |
switch (typestring[0]) { |
|
|
default: |
default: |
errx(1, "-type: %s: unknown type", typestring); |
errx(1, "-type: %s: unknown type", typestring); |
} |
} |
|
|
new = palloc(N_TYPE, f_type); |
new = palloc(N_TYPE, f_type); |
new->m_data = mask; |
new->m_data = mask; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -user uname functions -- |
* -user uname functions -- |
* |
* |
|
|
{ |
{ |
return (entry->fts_statp->st_uid == plan->u_data); |
return (entry->fts_statp->st_uid == plan->u_data); |
} |
} |
|
|
PLAN * |
PLAN * |
c_user(char *username, char ***ignored, int unused) |
c_user(char *username, char ***ignored, int unused) |
{ |
{ |
PLAN *new; |
PLAN *new; |
uid_t uid; |
uid_t uid; |
|
|
ftsoptions &= ~FTS_NOSTAT; |
ftsoptions &= ~FTS_NOSTAT; |
|
|
if (uid_from_user(username, &uid) == -1) { |
if (uid_from_user(username, &uid) == -1) { |
|
|
new->u_data = uid; |
new->u_data = uid; |
return (new); |
return (new); |
} |
} |
|
|
/* |
/* |
* -xdev functions -- |
* -xdev functions -- |
* |
* |
|
|
p && (state = (p->eval)(p, entry)); p = p->next); |
p && (state = (p->eval)(p, entry)); p = p->next); |
return (state); |
return (state); |
} |
} |
|
|
/* |
/* |
* N_OPENPAREN and N_CLOSEPAREN nodes are temporary place markers. They are |
* N_OPENPAREN and N_CLOSEPAREN nodes are temporary place markers. They are |
* eliminated during phase 2 of find_formplan() --- the '(' node is converted |
* eliminated during phase 2 of find_formplan() --- the '(' node is converted |
|
|
{ |
{ |
return (palloc(N_OPENPAREN, (int (*)(PLAN *, FTSENT *))-1)); |
return (palloc(N_OPENPAREN, (int (*)(PLAN *, FTSENT *))-1)); |
} |
} |
|
|
PLAN * |
PLAN * |
c_closeparen(char *ignore, char ***ignored, int unused) |
c_closeparen(char *ignore, char ***ignored, int unused) |
{ |
{ |
return (palloc(N_CLOSEPAREN, (int (*)(PLAN *, FTSENT *))-1)); |
return (palloc(N_CLOSEPAREN, (int (*)(PLAN *, FTSENT *))-1)); |
} |
} |
|
|
/* |
/* |
* ! expression functions -- |
* ! expression functions -- |
* |
* |
|
|
p && (state = (p->eval)(p, entry)); p = p->next); |
p && (state = (p->eval)(p, entry)); p = p->next); |
return (!state); |
return (!state); |
} |
} |
|
|
PLAN * |
PLAN * |
c_not(char *ignore, char ***ignored, int unused) |
c_not(char *ignore, char ***ignored, int unused) |
{ |
{ |
return (palloc(N_NOT, f_not)); |
return (palloc(N_NOT, f_not)); |
} |
} |
|
|
/* |
/* |
* expression -o expression functions -- |
* expression -o expression functions -- |
* |
* |
|
|
* and if so, clean it up as appropriate. |
* and if so, clean it up as appropriate. |
* |
* |
* At the moment, only N_EXEC has state. Two kinds: 1) |
* At the moment, only N_EXEC has state. Two kinds: 1) |
* lists of files to feed to subprocesses 2) State on exit |
* lists of files to feed to subprocesses 2) State on exit |
* status of past subprocesses. |
* status of past subprocesses. |
*/ |
*/ |
int |
int |