home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tkisrc04.zip / tcl / os2 / unixlib.c < prev    next >
C/C++ Source or Header  |  1998-08-07  |  1KB  |  73 lines

  1.  
  2. #define INCL_DOS
  3. #define INCL_DOSERRORS
  4. #include <os2.h>
  5. #include "unixlib.h"
  6. #include <string.h>
  7.  
  8. #include <stdlib.h>
  9.  
  10. DIR *opendir(const char *path)
  11.     {
  12.     DIR *dir = malloc(sizeof(DIR));
  13.     FILEFINDBUF3 findBuf;
  14.     ULONG numEntries = 1;
  15.     int rc;
  16.  
  17.     dir->handle = HDIR_CREATE;
  18.  
  19.     rc = DosFindFirst("*", &dir->handle, FILE_NORMAL, &findBuf,
  20.                             sizeof(findBuf), &numEntries, FIL_STANDARD);
  21.     
  22.     if (rc && rc != ERROR_NO_MORE_FILES && rc != ERROR_FILE_NOT_FOUND)
  23.         {
  24.         free(dir);
  25.         return 0;
  26.         }
  27.     else if (rc)
  28.         {
  29.         dir->gotOne = 0;
  30.         return dir;
  31.         }
  32.     
  33.     dir->gotOne = 1;
  34.     dir->cur.d_ino = 0;
  35.     dir->cur.d_off = findBuf.cbFile;
  36.     strcpy(dir->cur.d_name, findBuf.achName);
  37.     
  38.     return dir;
  39.     }
  40.  
  41. struct dirent *readdir(DIR *dir)
  42.     {
  43.     FILEFINDBUF3 findBuf;
  44.     ULONG numEntries = 1;
  45.     int rc;
  46.     
  47.     if (dir->gotOne)
  48.         {
  49.         dir->gotOne = 0;
  50.         return &dir->cur;
  51.         }
  52.     
  53.     rc = DosFindNext(dir->handle, &findBuf, sizeof(findBuf), &numEntries);
  54.     
  55.     if (rc)
  56.         return 0;
  57.     
  58.     dir->cur.d_ino = 0;
  59.     dir->cur.d_off = findBuf.cbFile;
  60.     strcpy(dir->cur.d_name, findBuf.achName);
  61.     return &dir->cur;
  62.     }
  63.  
  64. int closedir(DIR *dir)
  65.     {
  66.     if (DosFindClose(dir->handle))
  67.         return -1;
  68.     free(dir);
  69.     return 0;
  70.     }
  71.  
  72.  
  73.