home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / librarie / posix10.sit / POSIX / ThinkCPosix / opendir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-15  |  1.3 KB  |  84 lines

  1. /* $Id: $ */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "ThinkCPosix.h"
  7.  
  8. DIR *
  9. opendir(path)
  10.     char *path;
  11. {
  12.     CInfoPBRec cipbr;
  13.     HFileInfo *fpb = (HFileInfo*)&cipbr;
  14.     DirInfo *dpb = (DirInfo*)&cipbr;
  15.     DIR *dp;
  16.     char name[FILENAME_MAX];
  17.     short err;
  18.     
  19.     strncpy(name, path, sizeof(name)-1);
  20.     c2pstr(name);
  21.     fpb->ioNamePtr= (unsigned char*)name;
  22.     fpb->ioVRefNum= 0;
  23.     fpb->ioFDirIndex= 0;
  24.     fpb->ioFVersNum= 0;
  25.     dpb->ioDrDirID= 0;
  26.     err= PBGetCatInfo(&cipbr, FALSE);
  27.     if (err != noErr) {
  28.         errno = ENOENT;
  29.         return NULL;
  30.     }
  31.     dp = (DIR*)calloc(1, sizeof(DIR));
  32.     if (dp != NULL) {
  33.         dp->dirid = fpb->ioDirID;
  34.         dp->nextfile = 1;
  35.     }
  36.     return dp;
  37. }
  38.  
  39. /*
  40.  * Close a directory.
  41.  */
  42.  
  43. int
  44. closedir(dp)
  45.     DIR *dp;
  46. {
  47.     free(dp);
  48.     return 0;
  49. }
  50.  
  51. /*
  52.  * Read the next directory entry.
  53.  */
  54.  
  55. struct direct *
  56. readdir(dp)
  57.     DIR *dp;
  58. {
  59.     CInfoPBRec cipbr;
  60.     HFileInfo *fpb = (HFileInfo*)&cipbr;
  61.     DirInfo *dpb = (DirInfo*)&cipbr;
  62.     short err;
  63.     static struct direct dir;
  64.  
  65.     fpb->ioDirID= dp->dirid;
  66.     fpb->ioNamePtr= (unsigned char*)dir.d_name;
  67.     fpb->ioVRefNum= 0;
  68.     fpb->ioFDirIndex= dp->nextfile++;
  69.     fpb->ioFVersNum= 0;
  70.     err= PBGetCatInfo(&cipbr, FALSE);
  71.     if (err != noErr) {
  72.         errno = EIO;
  73.         return NULL;
  74.     }
  75.     p2cstr(dir.d_name);
  76.     return &dir;
  77. }
  78.  
  79. void rewinddir(dp)
  80. DIR *dp;
  81. {
  82.         dp->nextfile = 1;
  83. }
  84.