Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/share/examples/sunrpc/dir/dir_proc.c
39554 views
1
/*
2
* dir_proc.c: remote readdir implementation
3
*/
4
#include <rpc/rpc.h>
5
#include <sys/dir.h>
6
#include "dir.h"
7
8
extern int errno;
9
extern char *malloc();
10
extern char *strcpy();
11
12
readdir_res *
13
readdir_1(dirname)
14
nametype *dirname;
15
{
16
DIR *dirp;
17
struct direct *d;
18
namelist nl;
19
namelist *nlp;
20
static readdir_res res; /* must be static! */
21
22
/*
23
* Open directory
24
*/
25
dirp = opendir(*dirname);
26
if (dirp == NULL) {
27
res.errno = errno;
28
return (&res);
29
}
30
31
/*
32
* Free previous result
33
*/
34
xdr_free(xdr_readdir_res, &res);
35
36
/*
37
* Collect directory entries
38
*/
39
nlp = &res.readdir_res_u.list;
40
while (d = readdir(dirp)) {
41
nl = *nlp = (namenode *) malloc(sizeof(namenode));
42
nl->name = malloc(strlen(d->d_name)+1);
43
strcpy(nl->name, d->d_name);
44
nlp = &nl->next;
45
}
46
*nlp = NULL;
47
48
/*
49
* Return the result
50
*/
51
res.errno = 0;
52
closedir(dirp);
53
return (&res);
54
}
55
56