tattr.unixModeBits = 0644;
tattr.clientModTime = time(NULL);
- code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp);
+ code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp, NULL);
}
if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
tattr.mask = CM_ATTRMASK_UNIXMODEBITS;
tattr.unixModeBits = 0755;
- code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp);
+ code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp, NULL);
}
if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH))
}
long cm_SymLink(cm_scache_t *dscp, clientchar_t *cnamep, fschar_t *contentsp, 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)
{
cm_conn_t *connp;
long code;
cm_dirOp_t dirop;
fschar_t *fnamep = NULL;
+ if (scpp)
+ *scpp = NULL;
+
/* Check for RO volume */
if (dscp->flags & CM_SCACHEFLAG_RO)
return CM_ERROR_READONLY;
userp, reqp, 0);
}
lock_ReleaseWrite(&scp->rw);
- cm_ReleaseSCache(scp);
+
+ if (scpp) {
+ *scpp = scp;
+ } else {
+ cm_ReleaseSCache(scp);
+ }
}
}
long flags, cm_user_t *userp, cm_req_t *reqp);
extern long cm_SymLink(cm_scache_t *dscp, clientchar_t *namep, fschar_t *contentsp,
- long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
+ long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp,
+ cm_scache_t **scpp);
extern long cm_AssembleLink(cm_scache_t *linkScp, fschar_t *pathSuffixp,
cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,