didEnd = 1;
}
lock_ReleaseWrite(&scp->rw);
- *scpp = scp;
}
}
if (fnamep)
free(fnamep);
+ if (scp) {
+ if (scpp)
+ *scpp = scp;
+ else
+ cm_ReleaseSCache(scp);
+ }
return code;
}
}
long cm_MakeDir(cm_scache_t *dscp, clientchar_t *cnamep, long flags, cm_attr_t *attrp,
- cm_user_t *userp, cm_req_t *reqp)
+ cm_user_t *userp, cm_req_t *reqp, cm_scache_t **scpp)
{
cm_conn_t *connp;
long code;
didEnd = 1;
}
lock_ReleaseWrite(&scp->rw);
- cm_ReleaseSCache(scp);
}
}
free(fnamep);
+ if (scp) {
+ if (scpp)
+ *scpp = scp;
+ else
+ cm_ReleaseSCache(scp);
+ }
+
/* and return error code */
return code;
}
cm_scache_t **retscp);
extern long cm_MakeDir(cm_scache_t *dscp, clientchar_t *lastNamep, long flags,
- cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
+ cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp,
+ cm_scache_t **scpp);
extern long cm_RemoveDir(cm_scache_t *dscp, fschar_t *lastNamep, clientchar_t *originalNamep,
cm_user_t *userp, cm_req_t *reqp);
setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
setAttr.clientModTime = time(NULL);
- code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req);
+ code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req, NULL);
if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
smb_NotifyChange(FILE_ACTION_ADDED,
FILE_NOTIFY_CHANGE_DIR_NAME,
continue; /* the supplied path can't have consecutive slashes either , but */
/* cp is the next component to be created. */
- code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req);
+ code = cm_MakeDir(tscp1, cp, 0, &setAttr, userp, &req, NULL);
if (code == 0 && (tscp1->flags & CM_SCACHEFLAG_ANYWATCH))
smb_NotifyChange(FILE_ACTION_ADDED,
FILE_NOTIFY_CHANGE_DIR_NAME,
openAction = 2; /* created directory */
setAttr.mask = CM_ATTRMASK_CLIENTMODTIME;
setAttr.clientModTime = time(NULL);
- code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req);
+ code = cm_MakeDir(dscp, lastNamep, 0, &setAttr, userp, &req, NULL);
if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
smb_NotifyChange(FILE_ACTION_ADDED,
FILE_NOTIFY_CHANGE_DIR_NAME,