diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/dirent.c | 293 | ||||
-rw-r--r-- | lib/dirent.h | 53 |
2 files changed, 0 insertions, 346 deletions
diff --git a/lib/dirent.c b/lib/dirent.c deleted file mode 100644 index a143960f..00000000 --- a/lib/dirent.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * $LynxId: dirent.c,v 1.5 2012/02/10 11:35:49 tom Exp $ - * - * dir.c for MS-DOS by Samuel Lam <skl@van-bc.UUCP>, June/87 - */ - -/* #ifdef WIN32 */ -/* - * @(#)dir.c 1.4 87/11/06 Public Domain. - * - * A public domain implementation of BSD directory routines for - * MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), - * August 1897 - * Ported to OS/2 by Kai Uwe Rommel - * December 1989, February 1990 - * Ported to Windows NT 22 May 91 - * other mods Summer '92 brianmo@microsoft.com - * opendirx() was horribly written, very inefficient, and did not take care - * of all cases. It is still not too clean, but it is far more efficient. - * Changes made by Gordon Chaffee (chaffee@bugs-bunny.cs.berkeley.edu) - */ - -/*Includes: - * crt - */ -#ifdef HAVE_CONFIG_H -#include "lynx_cfg.h" -#endif - -#ifndef __GNUC__ -#pragma warning (disable : 4100) /* unreferenced formal parameter */ -#pragma warning (disable : 4127) /* conditional expression is constant */ -#pragma warning (disable : 4201) /* nameless struct/union */ -#pragma warning (disable : 4214) /* bit field types other than int */ -#pragma warning (disable : 4310) /* cast truncates constant value */ -#pragma warning (disable : 4514) /* unreferenced inline function has been removed */ -#pragma warning (disable : 4996) /* This function or variable may be unsafe. ... */ -#endif - -#include <windows.h> -#include <stdlib.h> -#include <string.h> -#include <sys\types.h> -#include <sys\stat.h> - -#include "dirent.h" - -#define stat _stat - -/* - * NT specific - */ -#include <stdio.h> - -/* - * random typedefs - */ -#define HDIR HANDLE -#define HFILE HANDLE -#define PHFILE PHANDLE - -#ifndef INVALID_HANDLE_VALUE -#define INVALID_HANDLE_VALUE ((HDIR) 0xffffffff) -#endif - -/* - * local functions - */ -static char *getdirent(char *); -static void free_dircontents(struct _dircontents *); - -static HDIR FindHandle; -static WIN32_FIND_DATA FileFindData; - -static struct dirent dp; - -DIR *opendirx(char *name, char *pattern) -{ - struct stat statb; - DIR *dirp; - char c; - char *s; - struct _dircontents *dp; - int len; - int unc; - char path[OFS_MAXPATHNAME]; - register char *ip, *op; - - for (ip = name, op = path;; op++, ip++) { - *op = *ip; - if (*ip == '\0') { - break; - } - } - len = ip - name; - if (len > 0) { - unc = ((path[0] == '\\' || path[0] == '/') && - (path[1] == '\\' || path[1] == '/')); - c = path[len - 1]; - if (unc) { - if (c != '\\' && c != '/') { - path[len] = '/'; - len++; - path[len] = '\0'; - } - } else { - if ((c == '\\' || c == '/') && (len > 1)) { - len--; - path[len] = '\0'; - - if (path[len - 1] == ':') { - path[len] = '/'; - len++; - path[len] = '.'; - len++; - path[len] = '\0'; - } - } else if (c == ':') { - path[len] = '.'; - len++; - path[len] = '\0'; - } - } - } else { - unc = 0; - path[0] = '.'; - path[1] = '\0'; - len = 1; - } - - if (stat(path, &statb) < 0 || (statb.st_mode & S_IFMT) != S_IFDIR) { - return NULL; - } - dirp = malloc(sizeof(DIR)); - - if (dirp == NULL) { - return dirp; - } - c = path[len - 1]; - if (c == '.') { - if (len == 1) { - len--; - } else { - c = path[len - 2]; - if (c == '\\' || c == ':') { - len--; - } else { - path[len] = '/'; - len++; - } - } - } else if (!unc && ((len != 1) || (c != '\\' && c != '/'))) { - path[len] = '/'; - len++; - } - strcpy(path + len, pattern); - - dirp->dd_loc = 0; - dirp->dd_contents = dirp->dd_cp = NULL; - - if ((s = getdirent(path)) == NULL) { - return dirp; - } - do { - if (((dp = malloc(sizeof(struct _dircontents))) == NULL) || - ((dp->_d_entry = malloc(strlen(s) + 1)) == NULL)) { - if (dp) - free(dp); - free_dircontents(dirp->dd_contents); - - return NULL; - } - if (dirp->dd_contents) - dirp->dd_cp = dirp->dd_cp->_d_next = dp; - else - dirp->dd_contents = dirp->dd_cp = dp; - - strcpy(dp->_d_entry, s); - dp->_d_next = NULL; - - } - while ((s = getdirent(NULL)) != NULL); - - dirp->dd_cp = dirp->dd_contents; - return dirp; -} - -DIR *opendir(char *name) -{ - return opendirx(name, "*"); -} - -void closedir(DIR *dirp) -{ - free_dircontents(dirp->dd_contents); - free(dirp); -} - -struct dirent *readdir(DIR *dirp) -{ - /* static struct dirent dp; */ - if (dirp->dd_cp == NULL) - return NULL; - - /*strcpy(dp.d_name,dirp->dd_cp->_d_entry); */ - - dp.d_name = dirp->dd_cp->_d_entry; - - dp.d_namlen = dp.d_reclen = - strlen(dp.d_name); - - dp.d_ino = (ino_t) (dirp->dd_loc + 1); /* fake the inode */ - - dirp->dd_cp = dirp->dd_cp->_d_next; - dirp->dd_loc++; - - return &dp; -} - -void seekdir(DIR *dirp, long off) -{ - long i = off; - struct _dircontents *dp; - - if (off >= 0) { - for (dp = dirp->dd_contents; --i >= 0 && dp; dp = dp->_d_next) ; - - dirp->dd_loc = off - (i + 1); - dirp->dd_cp = dp; - } -} - -long telldir(DIR *dirp) -{ - return dirp->dd_loc; -} - -static void free_dircontents(struct _dircontents *dp) -{ - struct _dircontents *odp; - - while (dp) { - if (dp->_d_entry) - free(dp->_d_entry); - - dp = (odp = dp)->_d_next; - free(odp); - } -} -/* end of "free_dircontents" */ - -static char *getdirent(char *dir) -{ - int got_dirent; - - if (dir != NULL) { /* get first entry */ - if ((FindHandle = FindFirstFile(dir, &FileFindData)) - == INVALID_HANDLE_VALUE) { - return NULL; - } - got_dirent = 1; - } else /* get next entry */ - got_dirent = FindNextFile(FindHandle, &FileFindData); - - if (got_dirent) - return FileFindData.cFileName; - else { - FindClose(FindHandle); - return NULL; - } -} -/* end of getdirent() */ - -struct passwd *_cdecl getpwnam(char *name) -{ - return NULL; -} - -struct passwd *_cdecl getpwuid(int uid) -{ - return NULL; -} - -int getuid() -{ - return 0; -} - -void _cdecl endpwent(void) -{ -} - -/* #endif */ diff --git a/lib/dirent.h b/lib/dirent.h deleted file mode 100644 index db598492..00000000 --- a/lib/dirent.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#) dirent.h 2.0 17 Jun 91 Public Domain. - * - * A public domain implementation of BSD directory routines for - * MS-DOS. Written by Michael Rendell ({uunet,utai}michael@garfield), - * August 1987 - * - * Enhanced and ported to OS/2 by Kai Uwe Rommel; added scandir() prototype - * December 1989, February 1990 - * Change of MAXPATHLEN for HPFS, October 1990 - * - * Unenhanced and ported to Windows NT by Bill Gallagher - * 17 Jun 91 - * changed d_name to char * instead of array, removed non-std extensions - * - * Cleanup, other hackery, Summer '92, Brian Moran , brianmo@microsoft.com - */ - -#ifndef _DIRENT -#define _DIRENT - -#include <direct.h> - -struct dirent { - ino_t d_ino; /* a bit of a farce */ - short d_reclen; /* more farce */ - short d_namlen; /* length of d_name */ - char *d_name; -}; - -struct _dircontents { - char *_d_entry; - struct _dircontents *_d_next; -}; - -typedef struct _dirdesc { - int dd_id; /* uniquely identify each open directory */ - long dd_loc; /* where we are in directory entry */ - struct _dircontents *dd_contents; /* pointer to contents of dir */ - struct _dircontents *dd_cp; /* pointer to current position */ -} DIR; - -extern DIR *opendir(char *); -extern struct dirent *readdir(DIR *); -extern void seekdir(DIR *, long); -extern long telldir(DIR *); -extern void closedir(DIR *); - -#define rewinddir(dirp) seekdir(dirp, 0L) - -#endif /* _DIRENT */ - -/* end of dirent.h */ |