+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
+#endif
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NON_CONFORMING_SWPRINTFS
}
(*ResultCB)->ResultBufferLength = dwMaxEntryLength = ResultBufferLength;
-
- pDirEnumResp = (AFSDirEnumResp *)&(*ResultCB)->ResultData;
-
- pCurrentEntry = (AFSDirEnumEntry *)&pDirEnumResp->Entry;
- dwMaxEntryLength -= FIELD_OFFSET( AFSDirEnumResp, Entry); /* AFSDirEnumResp */
+ if (ResultBufferLength) {
+ pDirEnumResp = (AFSDirEnumResp *)&(*ResultCB)->ResultData;
+ pCurrentEntry = (AFSDirEnumEntry *)&pDirEnumResp->Entry;
+ dwMaxEntryLength -= FIELD_OFFSET( AFSDirEnumResp, Entry); /* AFSDirEnumResp */
+ }
if (DirID.Cell != 0) {
fid.cell = DirID.Cell;
code, status);
}
- if (ResultBufferLength)
+ if (ResultBufferLength) {
(*ResultCB)->ResultBufferLength = ResultBufferLength - dwMaxEntryLength;
- pDirEnumResp->EnumHandle = (ULONG_PTR) enump;
+ pDirEnumResp->EnumHandle = (ULONG_PTR) enump;
+ }
if (dscp)
cm_ReleaseSCache(dscp);
memset(*ResultCB, 0, size);
(*ResultCB)->ResultBufferLength = ResultBufferLength;
- pCurrentEntry = (AFSDirEnumEntry *)&(*ResultCB)->ResultData;
+ if (ResultBufferLength)
+ pCurrentEntry = (AFSDirEnumEntry *)&(*ResultCB)->ResultData;
if (ParentID.Cell != 0) {
parentFid.cell = ParentID.Cell;
wchar_t shortName[13]=L"";
if (bVol) {
- cm_Gen8Dot3VolNameW(scp->fid.cell, scp->fid.volume, shortName);
+ cm_Gen8Dot3VolNameW(scp->fid.cell, scp->fid.volume, shortName, NULL);
} else if (!cm_Is8Dot3(wszName)) {
cm_dirFid_t dfid;
memset(*ResultCB, 0, size);
(*ResultCB)->ResultBufferLength = ResultBufferLength;
dwRemaining = ResultBufferLength;
- pCurrentEntry = (AFSDirEnumEntry *)&(*ResultCB)->ResultData;
+ if (ResultBufferLength)
+ pCurrentEntry = (AFSDirEnumEntry *)&(*ResultCB)->ResultData;
RDR_InitReq(&req);
if ( bWow64 )
lock_ReleaseWrite(&scp->rw);
code = cm_CheckNTOpen(scp, OpenCB->DesiredAccess, OPEN_ALWAYS, userp, &req, &ldp);
- if (code == 0) {
- cm_CheckNTOpenDone(scp, userp, &req, &ldp);
-
+ if (code == 0)
code = RDR_CheckAccess(scp, userp, &req, OpenCB->DesiredAccess, &pResultCB->GrantedAccess);
- }
+ cm_CheckNTOpenDone(scp, userp, &req, &ldp);
cm_ReleaseSCache(scp);
if (code) {
osi_hyper_t thyper;
cm_req_t req;
int dirty = 0;
- DWORD status;
+ int released = 0;
+ DWORD status;
RDR_InitReq(&req);
if ( bWow64 )
FileId.Cell, FileId.Volume,
FileId.Vnode, FileId.Unique);
-
*ResultCB = (AFSCommResult *)malloc( sizeof( AFSCommResult));
if (!(*ResultCB))
return;
if (ReleaseExtentsCB->FileExtents[count].Flags) {
lock_ObtainMutex(&bufp->mx);
- if ( ReleaseExtentsCB->FileExtents[count].Flags & AFS_EXTENT_FLAG_RELEASE ) {
+ if ( ReleaseExtentsCB->Flags & AFS_EXTENT_FLAG_RELEASE ||
+ ReleaseExtentsCB->FileExtents[count].Flags & AFS_EXTENT_FLAG_RELEASE ) {
bufp->flags &= ~CM_BUF_REDIR;
buf_Release(bufp);
+ released++;
}
if ( ReleaseExtentsCB->FileExtents[count].Flags & AFS_EXTENT_FLAG_DIRTY ) {
buf_SetDirty(bufp, 0, cm_data.blockSize, userp);
- dirty = 1;
+ dirty++;
}
lock_ReleaseMutex(&bufp->mx);
}
}
if (dirty) {
- for ( count = 0; code == 0 && count < ReleaseExtentsCB->ExtentCount; count++) {
+ for ( count = 0; code == 0 && count < ReleaseExtentsCB->ExtentCount && dirty > 0; count++, dirty--) {
thyper.QuadPart = ReleaseExtentsCB->FileExtents[count].FileOffset.QuadPart;
bufp = buf_Find(scp, &thyper);
cm_ReleaseSCache(scp);
+ osi_Log5(afsd_logp, "RDR_ReleaseFileExtents File FID cell=0x%x vol=0x%x vn=0x%x uniq=0x%x Released %d",
+ FileId.Cell, FileId.Volume,
+ FileId.Vnode, FileId.Unique, released);
if (code) {
smb_MapNTError(code, &status);
(*ResultCB)->ResultStatus = status;
cm_req_t req;
unsigned int fileno, extentno;
AFSReleaseFileExtentsResultFileCB *pNextFileCB;
-
RDR_InitReq(&req);
if ( ReleaseFileExtentsResultCB->FileCount == 0 ) {
cm_fid_t Fid;
cm_scache_t * scp = NULL;
int dirty = 0;
+ int released = 0;
char * p;
userp = RDR_UserFromProcessId( pFileCB->ProcessId);
if (pExtent->Flags) {
lock_ObtainMutex(&bufp->mx);
- if (pExtent->Flags & AFS_EXTENT_FLAG_RELEASE ) {
+ if ( ReleaseFileExtentsResultCB->Flags & AFS_EXTENT_FLAG_RELEASE ||
+ pExtent->Flags & AFS_EXTENT_FLAG_RELEASE ) {
bufp->flags &= ~CM_BUF_REDIR;
buf_Release(bufp);
+ released++;
}
if ( pExtent->Flags & AFS_EXTENT_FLAG_DIRTY ) {
buf_SetDirty(bufp, 0, cm_data.blockSize, userp);
- dirty = 1;
+ dirty++;
}
lock_ReleaseMutex(&bufp->mx);
}
}
}
+ osi_Log5(afsd_logp, "RDR_ProcessReleaseFileExtentsResult File FID cell=0x%x vol=0x%x vn=0x%x uniq=0x%x Released %d",
+ Fid.cell, Fid.volume, Fid.vnode, Fid.unique, released);
+
cleanup_file:
if (userp)
cm_ReleaseUser(userp);
pNextFileCB = (AFSReleaseFileExtentsResultFileCB *)p;
}
- osi_Log1(afsd_logp, "RDR_ReleaseFileExtents DONE code=0x%x", code);
+ osi_Log1(afsd_logp, "RDR_ProcessReleaseFileExtentsResult DONE code=0x%x", code);
return code;
}