X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmsd_dir.c;h=ccdc58ce842b176393075ba80a9f358311f88927;hb=8dd9a2105e18f54fe017fa5812e300eb2925a49b;hp=27414071a1b11d5ab74cfdf529ce20301c315a47;hpb=c086e08a4bb931721b2bc8db545ecb3eeaa431dd;p=chaz%2Ftar diff --git a/src/msd_dir.c b/src/msd_dir.c index 2741407..ccdc58c 100644 --- a/src/msd_dir.c +++ b/src/msd_dir.c @@ -11,19 +11,17 @@ #include "msd_dir.h" #ifndef __TURBOC__ #include -#else -#include #endif #include #include #ifndef NULL # define NULL 0 -#endif /* NULL */ +#endif /* NULL */ #ifndef MAXPATHLEN # define MAXPATHLEN 255 -#endif /* MAXPATHLEN */ +#endif /* MAXPATHLEN */ /* attribute stuff */ #define A_RONLY 0x01 @@ -43,187 +41,178 @@ #define ATTRIBUTES (A_RONLY | A_SYSTEM | A_DIR) /* what find first/next calls look use */ -typedef struct - { - char d_buf[21]; - char d_attribute; - unsigned short d_time; - unsigned short d_date; - long d_size; - char d_name[13]; - } - -Dta_buf; - -static char *getdirent (); -static void mysetdta (); -static void free_dircontents (); - -static Dta_buf dtabuf; -static Dta_buf *dtapnt = &dtabuf; -static union REGS reg, nreg; +typedef struct { + char d_buf[21]; + char d_attribute; + unsigned short d_time; + unsigned short d_date; + long d_size; + char d_name[13]; +} Dta_buf; + +static char *getdirent(); +static void mysetdta(); +static void free_dircontents(); + +static Dta_buf dtabuf; +static Dta_buf *dtapnt = &dtabuf; +static union REGS reg, nreg; #if defined(M_I86LM) -static struct SREGS sreg; +static struct SREGS sreg; #endif -DIR * -opendir (name) - char *name; +DIR * +opendir(name) + char *name; { - struct stat statb; - DIR *dirp; - char c; - char *s; - struct _dircontents *dp; - char nbuf[MAXPATHLEN + 1]; - - if (stat (name, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR) - return (DIR *) NULL; - if (Newisnull (dirp, DIR)) - return (DIR *) NULL; - if (*name && (c = name[strlen (name) - 1]) != '\\' && c != '/') - (void) strcat (strcpy (nbuf, name), "\\*.*"); - else - (void) strcat (strcpy (nbuf, name), "*.*"); - dirp->dd_loc = 0; - mysetdta (); - dirp->dd_contents = dirp->dd_cp = (struct _dircontents *) NULL; - if ((s = getdirent (nbuf)) == (char *) NULL) - return dirp; - do - { - if (Newisnull (dp, struct _dircontents) || (dp->_d_entry = - malloc ((unsigned) (strlen (s) + 1))) == (char *) NULL) - { - if (dp) - free ((char *) dp); - free_dircontents (dirp->dd_contents); - return (DIR *) NULL; - } - if (dirp->dd_contents) - dirp->dd_cp = dirp->dd_cp->_d_next = dp; - else - dirp->dd_contents = dirp->dd_cp = dp; - (void) strcpy (dp->_d_entry, s); - dp->_d_next = (struct _dircontents *) NULL; - } - while ((s = getdirent ((char *) NULL)) != (char *) NULL); - dirp->dd_cp = dirp->dd_contents; - - return dirp; + struct stat statb; + DIR *dirp; + char c; + char *s; + struct _dircontents *dp; + char nbuf[MAXPATHLEN + 1]; + + if (stat(name, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR) + return (DIR *) NULL; + if (Newisnull(dirp, DIR)) + return (DIR *) NULL; + if (*name && (c = name[strlen(name) - 1]) != '\\' && c != '/') + (void) strcat(strcpy(nbuf, name), "\\*.*"); + else + (void) strcat(strcpy(nbuf, name), "*.*"); + dirp->dd_loc = 0; + mysetdta(); + dirp->dd_contents = dirp->dd_cp = (struct _dircontents *) NULL; + if ((s = getdirent(nbuf)) == (char *) NULL) + return dirp; + do { + if (Newisnull(dp, struct _dircontents) || (dp->_d_entry = + malloc((unsigned) (strlen(s) + 1))) == (char *) NULL) + { + if (dp) + free((char *) dp); + free_dircontents(dirp->dd_contents); + return (DIR *) NULL; + } + if (dirp->dd_contents) + dirp->dd_cp = dirp->dd_cp->_d_next = dp; + else + dirp->dd_contents = dirp->dd_cp = dp; + (void) strcpy(dp->_d_entry, s); + dp->_d_next = (struct _dircontents *) NULL; + } while ((s = getdirent((char *) NULL)) != (char *) NULL); + dirp->dd_cp = dirp->dd_contents; + + return dirp; } void -closedir (dirp) - DIR *dirp; +closedir(dirp) + DIR *dirp; { - free_dircontents (dirp->dd_contents); - free ((char *) dirp); + free_dircontents(dirp->dd_contents); + free((char *) dirp); } -struct dirent * -readdir (dirp) - DIR *dirp; +struct dirent * +readdir(dirp) + DIR *dirp; { - static struct dirent dp; - - if (dirp->dd_cp == (struct _dircontents *) NULL) - return (struct dirent *) NULL; - dp.d_namlen = dp.d_reclen = - strlen (strcpy (dp.d_name, dirp->dd_cp->_d_entry)); - strlwr (dp.d_name); /* JF */ - dp.d_ino = 0; - dirp->dd_cp = dirp->dd_cp->_d_next; - dirp->dd_loc++; - - return &dp; + static struct dirent dp; + + if (dirp->dd_cp == (struct _dircontents *) NULL) + return (struct dirent *) NULL; + dp.d_namlen = dp.d_reclen = + strlen(strcpy(dp.d_name, dirp->dd_cp->_d_entry)); + strlwr(dp.d_name); /* JF */ + dp.d_ino = 0; + dirp->dd_cp = dirp->dd_cp->_d_next; + dirp->dd_loc++; + + return &dp; } void -seekdir (dirp, off) - DIR *dirp; - long off; +seekdir(dirp, off) + DIR *dirp; + long off; { - long i = off; - struct _dircontents *dp; - - if (off < 0) - return; - for (dp = dirp->dd_contents; --i >= 0 && dp; dp = dp->_d_next) - ; - dirp->dd_loc = off - (i + 1); - dirp->dd_cp = dp; + long i = off; + struct _dircontents *dp; + + if (off < 0) + return; + for (dp = dirp->dd_contents ; --i >= 0 && dp ; dp = dp->_d_next) + ; + dirp->dd_loc = off - (i + 1); + dirp->dd_cp = dp; } long -telldir (dirp) - DIR *dirp; +telldir(dirp) + DIR *dirp; { - return dirp->dd_loc; + return dirp->dd_loc; } -static void -free_dircontents (dp) - struct _dircontents *dp; +static void +free_dircontents(dp) + struct _dircontents *dp; { - struct _dircontents *odp; - - while (dp) - { - if (dp->_d_entry) - free (dp->_d_entry); - dp = (odp = dp)->_d_next; - free ((char *) odp); - } + struct _dircontents *odp; + + while (dp) { + if (dp->_d_entry) + free(dp->_d_entry); + dp = (odp = dp)->_d_next; + free((char *) odp); + } } -static char * -getdirent (dir) - char *dir; +static char * +getdirent(dir) + char *dir; { - if (dir != (char *) NULL) - { /* get first entry */ - reg.h.ah = DOSI_FINDF; - reg.h.cl = ATTRIBUTES; + if (dir != (char *) NULL) { /* get first entry */ + reg.h.ah = DOSI_FINDF; + reg.h.cl = ATTRIBUTES; #if defined(M_I86LM) - reg.x.dx = FP_OFF (dir); - sreg.ds = FP_SEG (dir); + reg.x.dx = FP_OFF(dir); + sreg.ds = FP_SEG(dir); #else - reg.x.dx = (unsigned) dir; + reg.x.dx = (unsigned) dir; #endif - } - else - { /* get next entry */ - reg.h.ah = DOSI_FINDN; + } else { /* get next entry */ + reg.h.ah = DOSI_FINDN; #if defined(M_I86LM) - reg.x.dx = FP_OFF (dtapnt); - sreg.ds = FP_SEG (dtapnt); + reg.x.dx = FP_OFF(dtapnt); + sreg.ds = FP_SEG(dtapnt); #else - reg.x.dx = (unsigned) dtapnt; + reg.x.dx = (unsigned) dtapnt; #endif - } + } #if defined(M_I86LM) - intdosx (®, &nreg, &sreg); + intdosx(®, &nreg, &sreg); #else - intdos (®, &nreg); + intdos(®, &nreg); #endif - if (nreg.x.cflag) - return (char *) NULL; + if (nreg.x.cflag) + return (char *) NULL; - return dtabuf.d_name; + return dtabuf.d_name; } -static void -mysetdta () +static void +mysetdta() { - reg.h.ah = DOSI_SDTA; + reg.h.ah = DOSI_SDTA; #if defined(M_I86LM) - reg.x.dx = FP_OFF (dtapnt); - sreg.ds = FP_SEG (dtapnt); - intdosx (®, &nreg, &sreg); + reg.x.dx = FP_OFF(dtapnt); + sreg.ds = FP_SEG(dtapnt); + intdosx(®, &nreg, &sreg); #else - reg.x.dx = (int) dtapnt; - intdos (®, &nreg); + reg.x.dx = (int) dtapnt; + intdos(®, &nreg); #endif }