This is glob.c in view mode; [Download] [Up]
#include <stdio.h> #include <string.h> #include "ooglutil.h" #include <sys/signal.h> #define FBUFSIZ 1024 #define INITSIZ 10 /*----------------------------------------------------------------------- * Function: *ooglglob * Description: C-shell globbing * Args: *s: the string to glob * Returns: pointer to array of pointers to expanded strings; ends * with NULL * Author: mbp * Date: Tue Aug 25 12:42:21 1992 * Notes: Invokes a subshell (/bin/csh) to do the work. * Caller should free the returned value by * first calling ooglblkfree() then free(): * * char **g; * g = ooglglob(string); * ... * ooglblkfree(g); * free(g); */ char **ooglglob(char *s) { FILE *fp; char cmd[FBUFSIZ]; vvec vp; char *c; int status; /* Avoid NeXT pclose() bug: don't catch subprocess' SIGCHLD */ void (*oldsigchld)() = signal(SIGCHLD, SIG_DFL); sprintf(cmd, "/bin/csh -f -c \"echo %s\" 2>&-", s); fp = popen(cmd, "r"); VVINIT(vp, char *, INITSIZ); while (!feof(fp)) if ((c=ftoken(fp, 2)) != NULL) *VVAPPEND(vp,char*) = strdup(c); *VVAPPEND(vp,char*) = NULL; vvtrim(&vp); status = pclose(fp); signal(SIGCHLD, oldsigchld); return VVEC(vp,char*); } ooglblkfree(av0) char **av0; { register char **av = av0; while (*av) free(*av++); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.