Path: blob/main/share/examples/sunrpc/dir/dir_proc.c
39554 views
/*1* dir_proc.c: remote readdir implementation2*/3#include <rpc/rpc.h>4#include <sys/dir.h>5#include "dir.h"67extern int errno;8extern char *malloc();9extern char *strcpy();1011readdir_res *12readdir_1(dirname)13nametype *dirname;14{15DIR *dirp;16struct direct *d;17namelist nl;18namelist *nlp;19static readdir_res res; /* must be static! */2021/*22* Open directory23*/24dirp = opendir(*dirname);25if (dirp == NULL) {26res.errno = errno;27return (&res);28}2930/*31* Free previous result32*/33xdr_free(xdr_readdir_res, &res);3435/*36* Collect directory entries37*/38nlp = &res.readdir_res_u.list;39while (d = readdir(dirp)) {40nl = *nlp = (namenode *) malloc(sizeof(namenode));41nl->name = malloc(strlen(d->d_name)+1);42strcpy(nl->name, d->d_name);43nlp = &nl->next;44}45*nlp = NULL;4647/*48* Return the result49*/50res.errno = 0;51closedir(dirp);52return (&res);53}545556