11905Swollman/* @(#)rls.c	2.2 88/08/12 4.0 RPCSRC */
21905Swollman/*
31905Swollman * rls.c: Remote directory listing client
41905Swollman */
51905Swollman#include <stdio.h>
61905Swollman#include <rpc/rpc.h>		/* always need this */
71905Swollman#include "dir.h"		/* need this too: will be generated by rpcgen*/
81905Swollman
91905Swollmanextern int errno;
101905Swollman
111905Swollmanmain(argc, argv)
121905Swollman	int argc;
131905Swollman	char *argv[];
141905Swollman{
151905Swollman	CLIENT *cl;
161905Swollman	char *server;
171905Swollman	char *dir;
181905Swollman	readdir_res *result;
191905Swollman	namelist nl;
201905Swollman
218875Srgrimes
221905Swollman	if (argc != 3) {
231905Swollman		fprintf(stderr, "usage: %s host directory\n", argv[0]);
241905Swollman		exit(1);
251905Swollman	}
261905Swollman
271905Swollman	/*
281905Swollman	 * Remember what our command line arguments refer to
291905Swollman	 */
301905Swollman	server = argv[1];
311905Swollman	dir = argv[2];
321905Swollman
331905Swollman	/*
341905Swollman	 * Create client "handle" used for calling DIRPROG on the
351905Swollman	 * server designated on the command line. We tell the rpc package
361905Swollman	 * to use the "tcp" protocol when contacting the server.
371905Swollman	 */
381905Swollman	cl = clnt_create(server, DIRPROG, DIRVERS, "tcp");
391905Swollman	if (cl == NULL) {
401905Swollman		/*
411905Swollman		 * Couldn't establish connection with server.
421905Swollman		 * Print error message and die.
431905Swollman		 */
441905Swollman		clnt_pcreateerror(server);
451905Swollman		exit(1);
461905Swollman	}
478875Srgrimes
481905Swollman	/*
491905Swollman	 * Call the remote procedure "readdir" on the server
501905Swollman	 */
511905Swollman	result = readdir_1(&dir, cl);
521905Swollman	if (result == NULL) {
531905Swollman		/*
548875Srgrimes		 * An error occurred while calling the server.
551905Swollman	 	 * Print error message and die.
561905Swollman		 */
571905Swollman		clnt_perror(cl, server);
581905Swollman		exit(1);
591905Swollman	}
601905Swollman
611905Swollman	/*
621905Swollman	 * Okay, we successfully called the remote procedure.
631905Swollman	 */
641905Swollman	if (result->errno != 0) {
651905Swollman		/*
661905Swollman		 * A remote system error occurred.
671905Swollman		 * Print error message and die.
681905Swollman		 */
691905Swollman		errno = result->errno;
701905Swollman		perror(dir);
711905Swollman		exit(1);
721905Swollman	}
731905Swollman
741905Swollman	/*
751905Swollman	 * Successfuly got a directory listing.
761905Swollman	 * Print it out.
771905Swollman	 */
781905Swollman	for (nl = result->readdir_res_u.list; nl != NULL; nl = nl->next) {
791905Swollman		printf("%s\n", nl->name);
801905Swollman	}
811905Swollman}
82