2 * Copyright 2000, International Business Machines Corporation and others.
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
10 #include <afsconfig.h>
11 #include <afs/param.h>
14 #include <sys/types.h>
19 #include <netinet/in.h>
24 #include <sys/fcntl.h>
30 #include <afs/afsint.h>
32 #include <afs/assert.h>
34 #include <afs/ihandle.h>
38 /* returns 0 on success, errno on failure */
40 ReallyRead(DirHandle * file, int block, char *data)
45 fdP = IH_OPEN(file->dirh_handle);
50 if (FDH_SEEK(fdP, block * AFS_PAGESIZE, SEEK_SET) < 0) {
55 code = FDH_READ(fdP, data, AFS_PAGESIZE);
56 if (code != AFS_PAGESIZE) {
68 /* returns 0 on success, errno on failure */
70 ReallyWrite(DirHandle * file, int block, char *data)
73 extern int VolumeChanged;
78 fdP = IH_OPEN(file->dirh_handle);
83 if (FDH_SEEK(fdP, block * AFS_PAGESIZE, SEEK_SET) < 0) {
88 code = FDH_WRITE(fdP, data, AFS_PAGESIZE);
89 if (code != AFS_PAGESIZE) {
102 /* SetSalvageDirHandle:
103 * Create a handle to a directory entry and reference it (IH_INIT).
104 * The handle needs to be dereferenced with the FidZap() routine.
107 SetSalvageDirHandle(DirHandle * dir, afs_int32 volume, afs_int32 device,
110 private int SalvageCacheCheck = 1;
111 memset(dir, 0, sizeof(DirHandle));
113 dir->dirh_volume = volume;
114 dir->dirh_device = device;
115 dir->dirh_inode = inode;
116 IH_INIT(dir->dirh_handle, device, volume, inode);
118 /* Always re-read for a new dirhandle */
119 dir->dirh_cacheCheck = SalvageCacheCheck++;
123 FidZap(DirHandle * file)
125 IH_RELEASE(file->dirh_handle);
126 memset(file, 0, sizeof(DirHandle));
130 FidZero(DirHandle * file)
132 memset(file, 0, sizeof(DirHandle));
136 FidEq(DirHandle * afile, DirHandle * bfile)
138 if (afile->dirh_volume != bfile->dirh_volume)
140 if (afile->dirh_device != bfile->dirh_device)
142 if (afile->dirh_cacheCheck != bfile->dirh_cacheCheck)
144 if (afile->dirh_inode != bfile->dirh_inode)
150 FidVolEq(DirHandle * afile, afs_int32 vid)
152 if (afile->dirh_volume != vid)
158 FidCpy(DirHandle * tofile, DirHandle * fromfile)
161 IH_COPY(tofile->dirh_handle, fromfile->dirh_handle);