Import Debian changes 1.8.5-1
[hcoop/debian/openafs.git] / src / venus / whatfid.c
CommitLineData
805e021f
CE
1/*
2 * Copyright 2000, International Business Machines Corporation and others.
3 * All Rights Reserved.
4 *
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
8 */
9
10/* file whatfid.c */
11
12
13#include <afsconfig.h>
14#include <afs/param.h>
15#include <afs/stds.h>
16
17#include <roken.h>
18
19#include <afs/com_err.h>
20#include <afs/vice.h>
21#include <afs/venus.h>
22#include "afs/prs_fs.h"
23#include <afs/afsint.h>
24#include <afs/cellconfig.h>
25#include <afs/cmd.h>
26
27
28struct VenusFid {
29 afs_int32 Cell;
30 struct AFSFid Fid;
31};
32
33
34char *pn;
35void PioctlError();
36
37#include "AFS_component_version_number.c"
38
39int WhatFidCmd_FileParm;
40int WhatFidCmd_FollowLinkParm;
41int
42WhatFidCmd(struct cmd_syndesc *as, void *arock)
43{
44 afs_int32 code;
45 struct ViceIoctl blob;
46 struct VenusFid vFid;
47 struct cmd_item *ti;
48 struct VolumeStatus *status;
49 char *name;
50 int follow = 1;
51
52 if (as->parms[1].items)
53 follow = 0;
54 for (ti = as->parms[0].items; ti; ti = ti->next) {
55 /* once per file */
56 blob.out_size = sizeof(struct VenusFid);
57 blob.in_size = 0;
58 blob.out = (char *)&vFid;
59 code = pioctl(ti->data, VIOCGETFID, &blob, follow);
60 if (code) {
61 PioctlError(code, ti->data);
62 continue;
63 }
64 printf("%s: %x:%d.%d.%d\n", ti->data, vFid.Cell, vFid.Fid.Volume,
65 vFid.Fid.Vnode, vFid.Fid.Unique);
66 }
67 return 0;
68}
69
70
71
72main(argc, argv)
73 int argc;
74 char **argv;
75{
76 afs_int32 code;
77 struct cmd_syndesc *ts;
78
79#ifdef AFS_AIX32_ENV
80 /*
81 * The following signal action for AIX is necessary so that in case of a
82 * crash (i.e. core is generated) we can include the user's data section
83 * in the core dump. Unfortunately, by default, only a partial core is
84 * generated which, in many cases, isn't too useful.
85 */
86 struct sigaction nsa;
87
88 sigemptyset(&nsa.sa_mask);
89 nsa.sa_handler = SIG_DFL;
90 nsa.sa_flags = SA_FULLDUMP;
91 sigaction(SIGSEGV, &nsa, NULL);
92#endif
93
94 pn = argv[0];
95
96 ts = cmd_CreateSyntax("initcmd", WhatFidCmd, NULL, 0, "list fid for file(s)");
97 WhatFidCmd_FileParm = cmd_AddParm(ts, "-path", CMD_LIST, 0, "pathnames");
98 WhatFidCmd_FollowLinkParm =
99 cmd_AddParm(ts, "-link", CMD_FLAG, CMD_OPTIONAL,
100 "do not follow symlinks");
101
102 exit(cmd_Dispatch(argc, argv));
103}
104
105void
106PioctlError(code, filename)
107 int code;
108 char *filename;
109{ /*Die */
110
111 if (errno == EINVAL) {
112 if (filename)
113 fprintf(stderr,
114 "%s: Invalid argument; it is possible that %s is not in AFS.\n",
115 pn, filename);
116 else
117 fprintf(stderr, "%s: Invalid argument.\n", pn);
118 } else if (errno == ENOENT) {
119 if (filename)
120 fprintf(stderr, "%s: File '%s' doesn't exist\n", pn, filename);
121 else
122 fprintf(stderr, "%s: no such file returned\n", pn);
123 } else if (errno == EROFS)
124 fprintf(stderr,
125 "%s: You can not change a backup or readonly volume\n", pn);
126 else if (errno == EACCES || errno == EPERM) {
127 if (filename)
128 fprintf(stderr,
129 "%s: You don't have the required access rights on '%s'\n",
130 pn, filename);
131 else
132 fprintf(stderr,
133 "%s: You do not have the required rights to do this operation\n",
134 pn);
135 } else {
136 if (filename)
137 fprintf(stderr, "%s:'%s'", pn, filename);
138 else
139 fprintf(stderr, "%s", pn);
140 fprintf(stderr, ": %s\n", afs_error_message(errno));
141 }
142} /*Die */