dir_proc.c revision 1906
152419Sjulian/* @(#)dir_proc.c 2.1 88/08/02 4.0 RPCSRC */ 252419Sjulian/* 352419Sjulian * dir_proc.c: remote readdir implementation 452419Sjulian */ 552419Sjulian#include <rpc/rpc.h> 652419Sjulian#include <sys/dir.h> 752419Sjulian#include "dir.h" 852419Sjulian 952419Sjulianextern int errno; 1052419Sjulianextern char *malloc(); 1152419Sjulianextern char *strcpy(); 1252419Sjulian 1352419Sjulianreaddir_res * 1452419Sjulianreaddir_1(dirname) 1552419Sjulian nametype *dirname; 1652419Sjulian{ 1752419Sjulian DIR *dirp; 1852419Sjulian struct direct *d; 1952419Sjulian namelist nl; 2052419Sjulian namelist *nlp; 2152419Sjulian static readdir_res res; /* must be static! */ 2252419Sjulian 2352419Sjulian /* 2452419Sjulian * Open directory 2552419Sjulian */ 2652419Sjulian dirp = opendir(*dirname); 2752419Sjulian if (dirp == NULL) { 2852419Sjulian res.errno = errno; 2952419Sjulian return (&res); 3052419Sjulian } 3152419Sjulian 3252419Sjulian /* 3352419Sjulian * Free previous result 3452419Sjulian */ 3552419Sjulian xdr_free(xdr_readdir_res, &res); 3652419Sjulian 3752419Sjulian /* 3852419Sjulian * Collect directory entries 3952419Sjulian */ 4052752Sjulian nlp = &res.readdir_res_u.list; 4152419Sjulian while (d = readdir(dirp)) { 4252419Sjulian nl = *nlp = (namenode *) malloc(sizeof(namenode)); 4352419Sjulian nl->name = malloc(strlen(d->d_name)+1); 4452419Sjulian strcpy(nl->name, d->d_name); 4552419Sjulian nlp = &nl->next; 4652419Sjulian } 4752419Sjulian *nlp = NULL; 4852419Sjulian 4952419Sjulian /* 5052419Sjulian * Return the result 5152419Sjulian */ 5252419Sjulian res.errno = 0; 5352419Sjulian closedir(dirp); 5452419Sjulian return (&res); 5552419Sjulian} 5652419Sjulian