1/* @(#)rls.c	2.2 88/08/12 4.0 RPCSRC */
2/*
3 * rls.c: Remote directory listing client
4 */
5#include <stdio.h>
6#include <rpc/rpc.h>		/* always need this */
7#include "dir.h"		/* need this too: will be generated by rpcgen*/
8
9extern int errno;
10
11main(argc, argv)
12	int argc;
13	char *argv[];
14{
15	CLIENT *cl;
16	char *server;
17	char *dir;
18	readdir_res *result;
19	namelist nl;
20
21
22	if (argc != 3) {
23		fprintf(stderr, "usage: %s host directory\n", argv[0]);
24		exit(1);
25	}
26
27	/*
28	 * Remember what our command line arguments refer to
29	 */
30	server = argv[1];
31	dir = argv[2];
32
33	/*
34	 * Create client "handle" used for calling DIRPROG on the
35	 * server designated on the command line. We tell the rpc package
36	 * to use the "tcp" protocol when contacting the server.
37	 */
38	cl = clnt_create(server, DIRPROG, DIRVERS, "tcp");
39	if (cl == NULL) {
40		/*
41		 * Couldn't establish connection with server.
42		 * Print error message and die.
43		 */
44		clnt_pcreateerror(server);
45		exit(1);
46	}
47
48	/*
49	 * Call the remote procedure "readdir" on the server
50	 */
51	result = readdir_1(&dir, cl);
52	if (result == NULL) {
53		/*
54		 * An error occurred while calling the server.
55	 	 * Print error message and die.
56		 */
57		clnt_perror(cl, server);
58		exit(1);
59	}
60
61	/*
62	 * Okay, we successfully called the remote procedure.
63	 */
64	if (result->errno != 0) {
65		/*
66		 * A remote system error occurred.
67		 * Print error message and die.
68		 */
69		errno = result->errno;
70		perror(dir);
71		exit(1);
72	}
73
74	/*
75	 * Successfuly got a directory listing.
76	 * Print it out.
77	 */
78	for (nl = result->readdir_res_u.list; nl != NULL; nl = nl->next) {
79		printf("%s\n", nl->name);
80	}
81}
82