static char rcsver[] = "$Id: dir.c,v 1.2 1999/11/19 21:19:43 gorelick Exp $"; /** ** $Source: /tes/cvs/vanilla/dir.c,v $ ** ** $Log: dir.c,v $ ** Revision 1.2 1999/11/19 21:19:43 gorelick ** Version 3.1, post PDS delivery of 3.0 ** ** Revision 1.1.1.1 1999/10/15 19:30:35 gorelick ** Version 3.0 ** ** Revision 2.1 1999/02/10 04:00:50 gorelick ** *** empty log message *** ** ** Revision 2.0 1998/12/22 22:47:04 gorelick ** release version ** ** Revision 2.0 1998/12/18 01:26:03 gorelick ** release version ** ** Revision 1.3 1998/12/18 01:04:48 gorelick ** *** empty log message *** ** ** Revision 1.2 1998/11/12 22:58:55 gorelick ** first release version ** **/ #include #include #include #include #include #include "tools.h" #define qsortptr int (*)(const void *, const void *) int mystrcmp(const char **a, const char **b); void SortFiles(LIST *list); int IsDataFile(char *test, char *type); int IsAPhantomLink(const char *fpath); /** ** Given a directory and table prefix, load the name of all the files **/ LIST * LoadFilenames(char *path, char *prefix) { DIR *d; LIST *list; struct dirent *d_ent; char buf[256]; int i; if ((d = opendir(path)) == NULL) return (NULL); list = new_list(); while ((d_ent = readdir(d)) != NULL) { if (IsDataFile(d_ent->d_name, prefix)){ sprintf(buf, "%s/%s", path, d_ent->d_name); if(!IsAPhantomLink(buf)) { /** ** Store the filename **/ list_add(list, strdup(buf)); } else { fprintf(stderr, "Ignoring phantom link named %s.\n", buf); } } } closedir(d); SortFiles(list); return(list); } int IsAPhantomLink(const char *fpath) { struct stat sbuf; if (stat(fpath, &sbuf) < 0){ if (errno == ENOENT){ return 1; /* Phantom link */ } } /* Not a phantom link or not accessable */ return 0; } int IsDataFile(char *test, char *type) { char *p; if (!strncasecmp(test, type, strlen(type))) { p = strrchr(test, '.'); if (p && (!strcasecmp(p, ".DAT") || !strcasecmp(p, ".TAB"))) return (1); } return (0); } int mystrcmp(const char **a, const char **b) { return(strcmp(*a, *b)); } void SortFiles(LIST *list) { int i; if (list->number > 1) qsort(list->ptr, list->number, sizeof(char *), (qsortptr)mystrcmp); }