char *maskp; /* pointer to star pattern of old file name */
int flags; /* tilde, casefold, etc */
char *newNamep; /* ptr to the new file's name */
+ int any;
} smb_renameRock_t;
int smb_RenameProc(cm_scache_t *dscp, cm_dirEntry_t *dep, void *vrockp, osi_hyper_t *offp)
smb_renameRock_t *rockp;
int caseFold;
int match;
- char shortName[13];
+ char shortName[13]="";
rockp = (smb_renameRock_t *) vrockp;
match = smb_V3MatchMask(shortName, rockp->maskp, caseFold);
}
if (match) {
- code = cm_Rename(rockp->odscp, dep->name,
+ rockp->any = 1;
+
+ code = cm_Rename(rockp->odscp, dep->name,
rockp->ndscp, rockp->newNamep, rockp->userp,
rockp->reqp);
/* if the call worked, stop doing the search now, since we
* really only want to rename one file.
*/
+ osi_Log1(smb_logp, "cm_Rename returns %ld", code);
if (code == 0)
code = CM_ERROR_STOPNOW;
}
- else code = 0;
+ else
+ code = 0;
return code;
}
rock.maskp = oldLastNamep;
rock.flags = ((strchr(oldLastNamep, '~') != NULL) ? SMB_MASKFLAG_TILDE : 0);
rock.newNamep = newLastNamep;
+ rock.any = 0;
/* Check if the file already exists; if so return error */
code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp);
thyper.HighPart = 0;
code = cm_ApplyDir(oldDscp, smb_RenameProc, &rock, &thyper, userp, &req, NULL);
+ if (code == 0 && !rock.any) {
+ thyper.LowPart = 0;
+ thyper.HighPart = 0;
+ rock.flags |= SMB_MASKFLAG_CASEFOLD;
+ code = cm_ApplyDir(oldDscp, smb_RenameProc, &rock, &thyper, userp, &req, NULL);
+ }
osi_Log1(smb_logp, "smb_RenameProc returns %ld", code);
if (code == CM_ERROR_STOPNOW)
char *oldPathp;
char *newPathp;
char *tp;
+ long code;
tp = smb_GetSMBData(inp, NULL);
oldPathp = smb_ParseASCIIBlock(tp, &tp);
OemToChar(newPathp,newPathp);
osi_Log2(smb_logp, "smb rename [%s] to [%s]",
- osi_LogSaveString(smb_logp, oldPathp),
- osi_LogSaveString(smb_logp, newPathp));
+ osi_LogSaveString(smb_logp, oldPathp),
+ osi_LogSaveString(smb_logp, newPathp));
- return smb_Rename(vcp,inp,oldPathp,newPathp,0);
+ code = smb_Rename(vcp,inp,oldPathp,newPathp,0);
+
+ osi_Log1(smb_logp, "smb rename returns 0x%x", code);
+ return code;
}
rock.userp = userp;
rock.reqp = &req;
rock.dscp = dscp;
+
/* First do a case sensitive match, and if that fails, do a case insensitive match */
code = cm_ApplyDir(dscp, smb_RmdirProc, &rock, &thyper, userp, &req, NULL);
if (code == 0 && !rock.any) {