From 262be76294c1c1b2cfdb5e3d77118b6aae5ed430 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Tue, 21 Jul 2009 11:58:47 +0100 Subject: [PATCH] Make DRelease take an anonymous pointer DRelease is used to free data blocks returned by the dir package. These can be any of a number of different types, which we were previously dealing with by casting everything to (struct buffer *) before calling DRelease. Instead, make DRelease take a (void *), so we can free any dir package product without requiring casts. Reviewed-on: http://gerrit.openafs.org/http://gerrit.openafs.org/159 Reviewed-by: Russ Allbery Tested-by: Russ Allbery --- src/afs/LINUX/osi_vnodeops.c | 4 +- src/afs/VNOPS/afs_vnop_lookup.c | 6 +-- src/afs/VNOPS/afs_vnop_readdir.c | 12 ++--- src/afs/afs_buffer.c | 3 +- src/afs/afs_prototypes.h | 1 - src/dir/buffer.c | 6 ++- src/dir/dir.c | 91 +++++++++++++++++--------------- src/dir/dir.h | 2 +- src/dir/salvage.c | 80 ++++++++++++++-------------- 9 files changed, 107 insertions(+), 98 deletions(-) diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 74ec9ad01..0747dd297 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -310,7 +310,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir) else { printf("afs_linux_readdir: afs_dir_GetBlob failed, null name (inode %lx, dirpos %d)\n", (unsigned long)&tdc->f.inode, dirpos); - DRelease((struct buffer *) de, 0); + DRelease(de, 0); ReleaseSharedLock(&avc->lock); afs_PutDCache(tdc); code = -ENOENT; @@ -361,7 +361,7 @@ afs_linux_readdir(struct file *fp, void *dirbuf, filldir_t filldir) #else code = (*filldir) (dirbuf, de->name, len, offset, ino); #endif - DRelease((struct buffer *)de, 0); + DRelease(de, 0); if (code) break; offset = dirpos + 1 + ((len + 16) >> 5); diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index 0c8ad6a6f..7b3ef680e 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -773,7 +773,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp) /* dont copy more than we have room for */ if (fidIndex >= nentries) { - DRelease((struct buffer *)dirEntryp, 0); + DRelease(dirEntryp, 0); break; } @@ -814,7 +814,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp) } if (!tvcp) { - DRelease((struct buffer *)dirEntryp, 0); + DRelease(dirEntryp, 0); ReleaseReadLock(&dcp->lock); ReleaseReadLock(&adp->lock); afs_PutDCache(dcp); @@ -875,7 +875,7 @@ afs_DoBulkStat(struct vcache *adp, long dirCookie, struct vrequest *areqp) * used by this dir entry. */ temp = afs_dir_NameBlobs(dirEntryp->name) << 5; - DRelease((struct buffer *)dirEntryp, 0); + DRelease(dirEntryp, 0); if (temp <= 0) break; dirCookie += temp; diff --git a/src/afs/VNOPS/afs_vnop_readdir.c b/src/afs/VNOPS/afs_vnop_readdir.c index 3d3d4dcc6..c602250d7 100644 --- a/src/afs/VNOPS/afs_vnop_readdir.c +++ b/src/afs/VNOPS/afs_vnop_readdir.c @@ -91,7 +91,7 @@ BlobScan(struct dcache * afile, afs_int32 ablob) } /* now relativeBlob is the page-relative first allocated blob, * or EPP (if there are none in this page). */ - DRelease((struct buffer *)tpe, 0); + DRelease(tpe, 0); if (i != EPP) return i + pageBlob; ablob = pageBlob + EPP; /* go around again */ @@ -763,7 +763,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred) *eofp = 1; /* Set it properly */ #endif if (ode) - DRelease((struct buffer *)ode, 0); + DRelease(ode, 0); goto dirend; } /* by here nde is set */ @@ -782,7 +782,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred) if (DIRSIZ_LEN(n_slen) >= (AFS_UIO_RESID(auio) - len)) { #endif /* AFS_SGI53_ENV */ /* No can do no more now; ya know... at this time */ - DRelease((struct buffer *)nde, 0); /* can't use this one. */ + DRelease(nde, 0); /* can't use this one. */ if (len) { #ifdef AFS_HPUX_ENV sdirEntry->d_fileno = @@ -830,7 +830,7 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred) code = EINVAL; } if (ode) - DRelease((struct buffer *)ode, 0); + DRelease(ode, 0); goto dirend; } @@ -880,12 +880,12 @@ afs_readdir(OSI_VC_DECL(avc), struct uio *auio, struct AFS_UCRED *acred) len = DIRSIZ_LEN(o_slen = n_slen); #endif /* AFS_SGI53_ENV */ if (ode) - DRelease((struct buffer *)ode, 0); + DRelease(ode, 0); ode = nde; AFS_UIO_SETOFFSET(auio, (afs_int32) ((us + afs_dir_NameBlobs(nde->name)) << 5)); } if (ode) - DRelease((struct buffer *)ode, 0); + DRelease(ode, 0); dirend: ReleaseReadLock(&tdc->lock); diff --git a/src/afs/afs_buffer.c b/src/afs/afs_buffer.c index b15a635af..58d9fce05 100644 --- a/src/afs/afs_buffer.c +++ b/src/afs/afs_buffer.c @@ -360,10 +360,11 @@ afs_newslot(struct dcache *adc, afs_int32 apage, register struct buffer *lp) } void -DRelease(register struct buffer *bp, int flag) +DRelease(void *loc, int flag) { /* Release a buffer, specifying whether or not the buffer has been * modified by the locker. */ + register struct buffer *bp = (struct buffer *)loc; register int index; #if defined(AFS_USEBUFFERS) register struct buffer *tp; diff --git a/src/afs/afs_prototypes.h b/src/afs/afs_prototypes.h index 9a84e0e12..f886fd01f 100644 --- a/src/afs/afs_prototypes.h +++ b/src/afs/afs_prototypes.h @@ -26,7 +26,6 @@ extern void afs_FreeAllAxs(struct axscache **headp); /* afs_buffer.c */ extern void DInit(int abuffers); extern void *DRead(register struct dcache * fid, register int page); -extern void DRelease(register struct buffer *bp, int flag); extern int DVOffset(register void *ap); extern void DZap(struct dcache * fid); extern void DFlush(void); diff --git a/src/dir/buffer.c b/src/dir/buffer.c index dd134a9da..98277882e 100644 --- a/src/dir/buffer.c +++ b/src/dir/buffer.c @@ -287,10 +287,12 @@ newslot(afs_int32 *afid, afs_int32 apage, register struct buffer *lp) return lp; } +/* Release a buffer, specifying whether or not the buffer has been modified + * by the locker. */ void -DRelease(register struct buffer *bp, int flag) +DRelease(void *loc, int flag) { - /* Release a buffer, specifying whether or not the buffer has been modified by the locker. */ + struct buffer *bp = (struct buffer *)loc; register int index; if (!bp) diff --git a/src/dir/dir.c b/src/dir/dir.c index 18ab0dac1..de69433ac 100644 --- a/src/dir/dir.c +++ b/src/dir/dir.c @@ -114,16 +114,17 @@ static struct DirEntry *FindItem(void *dir, char *ename, unsigned short **previtem); +/* Find out how many entries are required to store a name. */ int NameBlobs(char *name) -{ /* Find out how many entries are required to store a name. */ +{ register int i; i = strlen(name) + 1; return 1 + ((i + 15) >> 5); } -/* Create an entry in a file. Dir is a file representation, while entry is a string name. */ - +/* Create an entry in a file. Dir is a file representation, while entry is + * a string name. */ int Create(void *dir, char *entry, void *voidfid) { @@ -140,8 +141,8 @@ Create(void *dir, char *entry, void *voidfid) /* First check if file already exists. */ ep = FindItem(dir, entry, &pp); if (ep) { - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)pp, 0); + DRelease(ep, 0); + DRelease(pp, 0); return EEXIST; } blobs = NameBlobs(entry); /* number of entries required */ @@ -159,14 +160,14 @@ Create(void *dir, char *entry, void *voidfid) /* Now we just have to thread it on the hash table list. */ dhp = (struct DirHeader *)DRead(dir, 0); if (!dhp) { - DRelease((struct buffer *)ep, 1); + DRelease(ep, 1); return EIO; } i = DirHash(entry); ep->next = dhp->hashTable[i]; dhp->hashTable[i] = htons(firstelt); - DRelease((struct buffer *)dhp, 1); - DRelease((struct buffer *)ep, 1); + DRelease(dhp, 1); + DRelease(ep, 1); return 0; } @@ -187,7 +188,7 @@ Length(void *dir) if (dhp->alloMap[i] != EPP) ctr++; } - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return ctr * AFS_PAGESIZE; } @@ -202,10 +203,10 @@ Delete(void *dir, char *entry) if (firstitem == 0) return ENOENT; *previtem = firstitem->next; - DRelease((struct buffer *)previtem, 1); + DRelease(previtem, 1); index = DVOffset(firstitem) / 32; nitems = NameBlobs(firstitem->name); - DRelease((struct buffer *)firstitem, 0); + DRelease(firstitem, 0); FreeBlobs(dir, index, nitems); return 0; } @@ -247,7 +248,7 @@ FindBlobs(void *dir, int nblobs) } pp = (struct PageHeader *)DRead(dir, i); /* read the page in. */ if (!pp) { - DRelease((struct buffer *)dhp, 1); + DRelease(dhp, 1); break; } for (j = 0; j <= EPP - nblobs; j++) { @@ -266,17 +267,17 @@ FindBlobs(void *dir, int nblobs) * and free up any resources we've got allocated. */ if (i < MAXPAGES) dhp->alloMap[i] -= nblobs; - DRelease((struct buffer *)dhp, 1); + DRelease(dhp, 1); for (k = 0; k < nblobs; k++) pp->freebitmap[(j + k) >> 3] |= 1 << ((j + k) & 7); - DRelease((struct buffer *)pp, 1); + DRelease(pp, 1); return j + i * EPP; } - DRelease((struct buffer *)pp, 0); /* This dir page is unchanged. */ + DRelease(pp, 0); /* This dir page is unchanged. */ } } /* If we make it here, the directory is full. */ - DRelease((struct buffer *)dhp, 1); + DRelease(dhp, 1); return -1; } @@ -294,7 +295,7 @@ AddPage(void *dir, int pageno) pp->freebitmap[0] = 0x01; for (i = 1; i < EPP / 8; i++) /* It's a constant */ pp->freebitmap[i] = 0; - DRelease((struct buffer *)pp, 1); + DRelease(pp, 1); } /* Free a whole bunch of directory entries. */ @@ -313,13 +314,13 @@ FreeBlobs(void *dir, register int firstblob, int nblobs) return; if (page < MAXPAGES) dhp->alloMap[page] += nblobs; - DRelease((struct buffer *)dhp, 1); + DRelease(dhp, 1); pp = (struct PageHeader *)DRead(dir, page); if (pp) for (i = 0; i < nblobs; i++) pp->freebitmap[(firstblob + i) >> 3] &= ~(1 << ((firstblob + i) & 7)); - DRelease((struct buffer *)pp, 1); + DRelease(pp, 1); } /* @@ -345,7 +346,7 @@ MakeDir(void *dir, afs_int32 * me, afs_int32 * parent) dhp->alloMap[i] = EPP; for (i = 0; i < NHASHENT; i++) dhp->hashTable[i] = 0; - DRelease((struct buffer *)dhp, 1); + DRelease(dhp, 1); Create(dir, ".", me); Create(dir, "..", parent); /* Virtue is its own .. */ return 0; @@ -363,10 +364,10 @@ Lookup(void *dir, char *entry, void *voidfid) firstitem = FindItem(dir, entry, &previtem); if (firstitem == 0) return ENOENT; - DRelease((struct buffer *)previtem, 0); + DRelease(previtem, 0); fid[1] = ntohl(firstitem->fid.vnode); fid[2] = ntohl(firstitem->fid.vunique); - DRelease((struct buffer *)firstitem, 0); + DRelease(firstitem, 0); return 0; } @@ -382,12 +383,12 @@ LookupOffset(void *dir, char *entry, void *voidfid, long *offsetp) firstitem = FindItem(dir, entry, &previtem); if (firstitem == 0) return ENOENT; - DRelease((struct buffer *)previtem, 0); + DRelease(previtem, 0); fid[1] = ntohl(firstitem->fid.vnode); fid[2] = ntohl(firstitem->fid.vunique); if (offsetp) *offsetp = DVOffset(firstitem); - DRelease((struct buffer *)firstitem, 0); + DRelease(firstitem, 0); return 0; } @@ -419,7 +420,7 @@ EnumerateDir(void *dir, int (*hookproc) (void *dir, char *name, if (!ep) { if (DErrno) { /* we failed, return why */ - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return DErrno; } break; @@ -428,12 +429,12 @@ EnumerateDir(void *dir, int (*hookproc) (void *dir, char *name, num = ntohs(ep->next); code = (*hookproc) (hook, ep->name, ntohl(ep->fid.vnode), ntohl(ep->fid.vunique)); - DRelease((struct buffer *)ep, 0); + DRelease(ep, 0); if (code) break; } } - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -457,15 +458,15 @@ IsEmpty(void *dir) if (!ep) break; if (strcmp(ep->name, "..") && strcmp(ep->name, ".")) { - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 1; } num = ntohs(ep->next); - DRelease((struct buffer *)ep, 0); + DRelease(ep, 0); } } - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -500,10 +501,16 @@ DirHash(register char *string) return tval; } + +/* Find a directory entry, given its name. This entry returns a pointer + * to a locked buffer, and a pointer to a locked buffer (in previtem) + * referencing the found item (to aid the delete code). If no entry is + * found, however, no items are left locked, and a null pointer is + * returned instead. */ + static struct DirEntry * FindItem(void *dir, char *ename, unsigned short **previtem) { - /* Find a directory entry, given its name. This entry returns a pointer to a locked buffer, and a pointer to a locked buffer (in previtem) referencing the found item (to aid the delete code). If no entry is found, however, no items are left locked, and a null pointer is returned instead. */ register int i; register struct DirHeader *dhp; register unsigned short *lp; @@ -514,12 +521,12 @@ FindItem(void *dir, char *ename, unsigned short **previtem) return 0; if (dhp->hashTable[i] == 0) { /* no such entry */ - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } tp = GetBlob(dir, (u_short) ntohs(dhp->hashTable[i])); if (!tp) { - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } lp = &(dhp->hashTable[i]); @@ -530,16 +537,16 @@ FindItem(void *dir, char *ename, unsigned short **previtem) *previtem = lp; return tp; } - DRelease((struct buffer *)lp, 0); + DRelease(lp, 0); lp = &(tp->next); if (tp->next == 0) { /* The end of the line */ - DRelease((struct buffer *)lp, 0); /* Release all locks. */ + DRelease(lp, 0); /* Release all locks. */ return 0; } tp = GetBlob(dir, (u_short) ntohs(tp->next)); if (!tp) { - DRelease((struct buffer *)lp, 0); + DRelease(lp, 0); return 0; } } @@ -569,20 +576,20 @@ FindFid (void *dir, afs_uint32 vnode, afs_uint32 unique) while(tp) { if (vnode == ntohl(tp->fid.vnode) && unique == ntohl(tp->fid.vunique)) { - DRelease(dhp,0); + DRelease(dhp, 0); return tp; } lp = &(tp->next); if (tp->next == 0) break; tp = GetBlob(dir,(u_short)ntohs(tp->next)); - DRelease(lp,0); + DRelease(lp, 0); } - DRelease(lp,0); + DRelease(lp, 0); } } - DRelease(dhp,0); - return (struct DirEntry *)0; + DRelease(dhp, 0); + return NULL; } int diff --git a/src/dir/dir.h b/src/dir/dir.h index 998f70e73..bad7c06cf 100644 --- a/src/dir/dir.h +++ b/src/dir/dir.h @@ -101,7 +101,7 @@ extern struct DirEntry *GetBlob(void *dir, afs_int32 blobno); extern int DirHash(register char *string); extern int DStat(int *abuffers, int *acalls, int *aios); -extern void DRelease(struct buffer *bp, int flag); +extern void DRelease(void *loc, int flag); extern int DVOffset(register void *ap); extern int DFlushVolume(register afs_int32 vid); extern int DFlushEntry(register afs_int32 *fid); diff --git a/src/dir/salvage.c b/src/dir/salvage.c index dffec6e05..b20e73b7b 100644 --- a/src/dir/salvage.c +++ b/src/dir/salvage.c @@ -106,7 +106,7 @@ DirOK(void *file) /* Check magic number for first page */ if (dhp->header.tag != htons(1234)) { printf("Bad first pageheader magic number.\n"); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -127,13 +127,13 @@ DirOK(void *file) * two must exist for "." and ".." */ printf("The dir header alloc map for page %d is bad.\n", i); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } } else { if ((j < 0) || (j > EPP)) { printf("The dir header alloc map for page %d is bad.\n", i); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } } @@ -144,7 +144,7 @@ DirOK(void *file) printf ("A partially-full page occurs in slot %d, after the dir end.\n", i); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } } else if (j == EPP) { /* is this the last page */ @@ -162,7 +162,7 @@ DirOK(void *file) if (usedPages < up) { printf ("Count of used directory pages does not match count in directory header\n"); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -174,7 +174,7 @@ DirOK(void *file) /* Read the page header */ pp = (struct PageHeader *)DRead(file, i); if (!pp) { - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); if (DErrno != 0) { /* couldn't read page, but not because it wasn't there permanently */ printf("Failed to read dir page %d (errno %d)\n", i, DErrno); @@ -188,8 +188,8 @@ DirOK(void *file) /* check the tag field */ if (pp->tag != htons(1234)) { printf("Directory page %d has a bad magic number.\n", i); - DRelease((struct buffer *)pp, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(pp, 0); + DRelease(dhp, 0); return 0; } @@ -223,12 +223,12 @@ DirOK(void *file) printf ("Header alloMap count doesn't match count in freebitmap for page %d.\n", i); - DRelease((struct buffer *)pp, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(pp, 0); + DRelease(dhp, 0); return 0; } - DRelease((struct buffer *)pp, 0); + DRelease(pp, 0); } /* Initialize the in-memory freebit map for all pages. */ @@ -256,7 +256,7 @@ DirOK(void *file) /* Verify that the entry is within range */ if (entry < 0 || entry >= maxents) { printf("Out-of-range hash id %d in chain %d.\n", entry, i); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -270,11 +270,11 @@ DirOK(void *file) */ printf("Could not get dir blob %d (errno %d)\n", entry, DErrno); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); Die("dirok3"); } printf("Invalid hash id %d in chain %d.\n", entry, i); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } ne = ntohs(ep->next); @@ -282,8 +282,8 @@ DirOK(void *file) /* There can't be more than maxents entries */ if (++entcount >= maxents) { printf("Directory's hash chain %d is circular.\n", i); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } @@ -291,8 +291,8 @@ DirOK(void *file) if (ep->name[0] == '\000') { printf("Dir entry %x in chain %d has bogus (null) name.\n", (int)ep, i); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } @@ -300,8 +300,8 @@ DirOK(void *file) if (ep->flag != FFIRST) { printf("Dir entry %x in chain %d has bogus flag field.\n", (int)ep, i); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } @@ -310,8 +310,8 @@ DirOK(void *file) if (j >= MAXENAME) { /* MAXENAME counts the null */ printf("Dir entry %x in chain %d has too-long name.\n", (int)ep, i); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } @@ -328,8 +328,8 @@ DirOK(void *file) printf ("Dir entry %x should be in hash bucket %d but IS in %d.\n", (int)ep, j, i); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } @@ -341,8 +341,8 @@ DirOK(void *file) printf ("Dir entry %x, index 13 has name '%s' should be '.'\n", (int)ep, ep->name); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } } @@ -355,15 +355,15 @@ DirOK(void *file) printf ("Dir entry %x, index 14 has name '%s' should be '..'\n", (int)ep, ep->name); - DRelease((struct buffer *)ep, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(ep, 0); + DRelease(dhp, 0); return 0; } } /* CHECK FOR DUPLICATE NAMES? */ - DRelease((struct buffer *)ep, 0); + DRelease(ep, 0); } } @@ -371,7 +371,7 @@ DirOK(void *file) if (!havedot || !havedotdot) { printf ("Directory entry '.' or '..' does not exist or is in the wrong index.\n"); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } @@ -385,7 +385,7 @@ DirOK(void *file) printf ("Failed on second attempt to read dir page %d (errno %d)\n", i, DErrno); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); /* if DErrno is 0, then the dir is really bad, and we return dir *not* OK. * otherwise, we want to return true (1), meaning the dir isn't known * to be bad (we can't tell, since I/Os are failing. @@ -402,17 +402,17 @@ DirOK(void *file) printf ("Entry freebitmap error, page %d, map offset %d, %x should be %x.\n", i, j, pp->freebitmap[j], eaMap[count + j]); - DRelease((struct buffer *)pp, 0); - DRelease((struct buffer *)dhp, 0); + DRelease(pp, 0); + DRelease(dhp, 0); return 0; } } - DRelease((struct buffer *)pp, 0); + DRelease(pp, 0); } /* Finally cleanup and return. */ - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 1; } @@ -425,7 +425,7 @@ DirOK(void *file) * parent directory. */ int -DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu, +DirSalvage(void *fromFile, void *toFile, afs_int32 vn, afs_int32 vu, afs_int32 pvn, afs_int32 pvu) { /* First do a MakeDir on the target. */ @@ -479,7 +479,7 @@ DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu, printf ("can't continue down hash chain (entry %d, errno %d)\n", entry, DErrno); - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return DErrno; } printf @@ -500,15 +500,15 @@ DirSalvage(char *fromFile, char *toFile, afs_int32 vn, afs_int32 vu, printf ("Create of %s returned code %d, skipping to next hash chain.\n", tname, code); - DRelease((struct buffer *)ep, 0); + DRelease(ep, 0); break; } } - DRelease((struct buffer *)ep, 0); + DRelease(ep, 0); } } /* Clean up things. */ - DRelease((struct buffer *)dhp, 0); + DRelease(dhp, 0); return 0; } -- 2.39.5