#include    <sys/types.h>
#include    <dirent.h>
#include    <rpc/rpc.h>

#define BUF_SIZE    8192
#define RLS_PROG ((u_long)0x20000000)
#define RLS_VER ((u_long)1)
#define RLS_PROC ((u_long)1)

void main()
{
bool_t   xdr_rls();
char     *do_rls();

    registerrpc(RLS_PROG,RLS_VER,RLS_PROC,do_rls,xdr_rls,xdr_rls);
    svc_run();
}

char *do_rls(char *buf)
{
DIR	*dirp;
struct dirent	*dp;
static char	ret_buf[BUF_SIZE];
char	tmp[512];
char	dir[512];

	strcpy(dir,buf);

	dirp=opendir(dir);
	if(dirp==NULL){
		strcpy(ret_buf,"opendir error");
		return(ret_buf);
	}
	strcpy(ret_buf,"");
	while(dp=readdir(dirp)){
		sprintf(tmp,"%s/%s\n",dir,dp->d_name);
		strcat(ret_buf,tmp);
	}
	closedir(dirp);
	return(ret_buf);
}

bool_t xdr_rls(XDR *xdrs,char *objp)
{
    return(xdr_string(xdrs,&objp,BUF_SIZE));
}
