home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / comm / amitcp-sdk-4.0.lha / AmiTCP-SDK / src / examples / rpc / dir / dir_proc.c next >
Encoding:
C/C++ Source or Header  |  1994-03-09  |  930 b   |  54 lines

  1. /* @(#)dir_proc.c    2.1 88/08/02 4.0 RPCSRC */
  2. /*
  3.  * dir_proc.c: remote readdir implementation
  4.  */
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <errno.h>
  8. #include <rpc/rpc.h>
  9. #include <sys/dir.h>
  10. #include "dir.h"
  11.  
  12. readdir_res *
  13. readdir_1_svc(nametype *dirname, struct svc_req *rqstp)
  14. {
  15.     DIR *dirp;
  16.     struct dirent *d;
  17.     namelist nl;
  18.     namelist *nlp;
  19.     static readdir_res res; /* must be static! */
  20.     
  21.     /*
  22.      * Open directory
  23.      */
  24.     dirp = opendir(*dirname);
  25.     if (dirp == NULL) {
  26.         res.errno = errno;
  27.         return (&res);
  28.     }
  29.  
  30.     /*
  31.      * Free previous result
  32.      */
  33.     xdr_free(xdr_readdir_res, &res);
  34.  
  35.     /*
  36.      * Collect directory entries
  37.      */
  38.     nlp = &res.readdir_res_u.list;
  39.     while (d = readdir(dirp)) {
  40.         nl = *nlp = (namenode *) malloc(sizeof(namenode));
  41.         nl->name = malloc(strlen(d->d_name)+1);
  42.         strcpy(nl->name, d->d_name);
  43.         nlp = &nl->next;
  44.     }
  45.     *nlp = NULL;
  46.  
  47.     /*
  48.      * Return the result
  49.      */
  50.     res.errno = 0;
  51.     closedir(dirp);
  52.     return (&res);
  53. }
  54.