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>
15 #include <sys/types.h>
20 #include <netinet/in.h>
25 #include <sys/fcntl.h>
31 #include <afs/afsint.h>
33 #include <afs/afs_assert.h>
35 #include <afs/ihandle.h>
39 /* returns 0 on success, errno on failure */
41 ReallyRead(DirHandle * file, int block, char *data)
47 fdP = IH_OPEN(file->dirh_handle);
52 nBytes = FDH_PREAD(fdP, data, AFS_PAGESIZE, ((afs_foff_t)block) * AFS_PAGESIZE);
53 if (nBytes != AFS_PAGESIZE) {
65 /* returns 0 on success, errno on failure */
67 ReallyWrite(DirHandle * file, int block, char *data)
70 extern int VolumeChanged;
76 fdP = IH_OPEN(file->dirh_handle);
81 nBytes = FDH_PWRITE(fdP, data, AFS_PAGESIZE, ((afs_foff_t)block) * AFS_PAGESIZE);
82 if (nBytes != AFS_PAGESIZE) {
95 /* SetSalvageDirHandle:
96 * Create a handle to a directory entry and reference it (IH_INIT).
97 * The handle needs to be dereferenced with the FidZap() routine.
100 SetSalvageDirHandle(DirHandle * dir, afs_uint32 volume, afs_int32 device,
103 private int SalvageCacheCheck = 1;
104 memset(dir, 0, sizeof(DirHandle));
106 dir->dirh_volume = volume;
107 dir->dirh_device = device;
108 dir->dirh_inode = inode;
109 IH_INIT(dir->dirh_handle, device, volume, inode);
111 /* Always re-read for a new dirhandle */
112 dir->dirh_cacheCheck = SalvageCacheCheck++;
116 FidZap(DirHandle * file)
118 IH_RELEASE(file->dirh_handle);
119 memset(file, 0, sizeof(DirHandle));
123 FidZero(DirHandle * file)
125 memset(file, 0, sizeof(DirHandle));
129 FidEq(DirHandle * afile, DirHandle * bfile)
131 if (afile->dirh_volume != bfile->dirh_volume)
133 if (afile->dirh_device != bfile->dirh_device)
135 if (afile->dirh_cacheCheck != bfile->dirh_cacheCheck)
137 if (afile->dirh_inode != bfile->dirh_inode)
143 FidVolEq(DirHandle * afile, afs_int32 vid)
145 if (afile->dirh_volume != vid)
151 FidCpy(DirHandle * tofile, DirHandle * fromfile)
154 IH_COPY(tofile->dirh_handle, fromfile->dirh_handle);
161 osi_Panic("%s\n", msg);