lock_ObtainMutex(&cm_Freelance_Lock);
scp->length.LowPart = (DWORD)strlen(mp)+4;
+ scp->length.HighPart = 0;
strncpy(scp->mountPointStringp,mp,MOUNTPOINTLEN);
scp->mountPointStringp[MOUNTPOINTLEN-1] = '\0';
lock_ReleaseMutex(&cm_Freelance_Lock);
/* we don't know the required access rights */
if (bufLocked) lock_ReleaseMutex(&bufp->mx);
code = cm_GetAccessRights(scp, userp, reqp);
- if (code)
- return code;
if (bufLocked) {
lock_ReleaseMutex(&scp->mx);
lock_ObtainMutex(&bufp->mx);
lock_ObtainMutex(&scp->mx);
}
+ if (code)
+ return code;
continue;
}
}
statusp->FileType = CM_SCACHETYPE_DIRECTORY;
statusp->LinkCount = scp->linkCount;
statusp->Length = cm_fakeDirSize;
+ statusp->Length_hi = 0;
statusp->DataVersion = cm_data.fakeDirVersion;
statusp->Author = 0x1;
statusp->Owner = 0x0;
statusp->Group = 0;
statusp->SyncCounter = 0;
statusp->dataVersionHigh = 0;
+ statusp->errorCode = 0;
}
#endif /* AFS_FREELANCE_CLIENT */
+ if (statusp->errorCode != 0) {
+ scp->flags |= CM_SCACHEFLAG_EACCESS;
+ osi_Log2(afsd_logp, "Merge, Failure scp %x code 0x%x", scp, statusp->errorCode);
+ return;
+ } else {
+ scp->flags &= ~CM_SCACHEFLAG_EACCESS;
+ }
+
if (!(flags & CM_MERGEFLAG_FORCE)
&& statusp->DataVersion < (unsigned long) scp->dataVersion) {
struct cm_cell *cellp;
}
if (!(scp->mask & CM_SCACHEMASK_LENGTH)) {
scp->length.LowPart = statusp->Length;
- scp->length.HighPart = 0;
+ scp->length.HighPart = statusp->Length_hi;
}
scp->serverLength.LowPart = statusp->Length;
- scp->serverLength.HighPart = 0;
+ scp->serverLength.HighPart = statusp->Length_hi;
scp->linkCount = statusp->LinkCount;
scp->dataVersion = statusp->DataVersion;
scp->fileType = CM_SCACHETYPE_SYMLINK;
}
else {
- osi_Log1(afsd_logp, "Merge, Invalid File Type, scp %x", scp);
- scp->fileType = 0; /* invalid */
+ osi_Log2(afsd_logp, "Merge, Invalid File Type (%d), scp %x", statusp->FileType, scp);
+ scp->fileType = CM_SCACHETYPE_INVALID; /* invalid */
}
/* and other stuff */
scp->parentVnode = statusp->ParentVnode;