2 * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of version 2 of the GNU General Public License as
6 * published by the Free Software Foundation.
8 * This program is distributed in the hope that it would be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * Further, this software is distributed without any warranty that it is
13 * free of the rightful claim of any third person regarding infringement
14 * or the like. Any license provided herein, whether implied or
15 * otherwise, applies only to this software file. Patent licenses, if
16 * any, provided herein do not apply to combinations of this program with
17 * other software, or any other product whatsoever.
19 * You should have received a copy of the GNU General Public License along
20 * with this program; if not, write the Free Software Foundation, Inc., 59
21 * Temple Place - Suite 330, Boston MA 02111-1307, USA.
23 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24 * Mountain View, CA 94043, or:
28 * For further information regarding this notice, see:
30 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
35 /*---------------------------------------------------------------------------
37 Test program used to test the DMAPI function dm_get_dirattrs(). The
40 get_dirattrs [-b buflen] [-l loc] [-s sid] dirpath
42 where dirpath is the name of a directory, buflen is the size of the buffer
43 to use in the call, loc is a starting location, and sid is the session ID
44 whose attributes you are interested in.
46 ----------------------------------------------------------------------------*/
48 extern char *sys_errlist[];
60 fprintf(stderr, "usage:\t%s [-b buflen] [-l loc] [-s sid] dirpath\n",
71 dm_sessid_t sid = DM_NO_SESSION;
76 size_t buflen = 10000;
86 if (Progname = strrchr(argv[0], '/')) {
92 /* Crack and validate the command line options. */
94 while ((opt = getopt(argc, argv, "b:l:s:")) != EOF) {
97 buflen = atol(optarg);
109 if (optind + 1 != argc)
111 dirpath = argv[optind++];
113 if (dm_init_service(&name) == -1) {
114 fprintf(stderr, "Can't inititalize the DMAPI\n");
117 if (sid == DM_NO_SESSION)
118 find_test_session(&sid);
120 /* Get the diretory's handle. */
122 if (dm_path_to_handle(dirpath, &hanp, &hlen)) {
123 fprintf(stderr, "can't get handle for file %s, %s\n",
124 dirpath, strerror(errno));
128 if ((bufp = malloc(buflen == 0 ? 1 : buflen)) == NULL) {
129 fprintf(stderr, "malloc failed, %s\n", strerror(errno));
133 mask = DM_AT_HANDLE|DM_AT_EMASK|DM_AT_PMANR|DM_AT_PATTR|DM_AT_DTIME|DM_AT_CFLAG|DM_AT_STAT;
135 if ((error = dm_get_dirattrs(sid, hanp, hlen, DM_NO_TOKEN, mask,
136 &loc, buflen, bufp, &rlenp)) < 0) {
137 if (errno == E2BIG) {
138 fprintf(stderr, "dm_get_dirattrs buffer too small, "
139 "should be %d bytes\n", rlenp);
141 fprintf(stderr, "dm_get_dirattrs failed, %s\n",
146 fprintf(stdout, "rc = %d, rlenp is %d, loc is %lld\n", error,
151 statp = (dm_stat_t *)bufp;
152 while (statp != NULL) {
154 hantoa((char *)statp + statp->dt_handle.vd_offset,
155 statp->dt_handle.vd_length, buffer);
156 fprintf(stdout, "handle %s\n", buffer);
157 fprintf(stdout, "name %s\n",
158 (char *)statp + statp->dt_compname.vd_offset);
161 statp = DM_STEP_TO_NEXT(statp, dm_stat_t *);
165 dm_handle_free(hanp, hlen);