FCB: Rename should support asterisk wildcards - based on dosemu fdpp patch f3cb0719ca, fixes issue #43

This commit is contained in:
Kenneth J Davis 2021-08-21 11:09:17 -04:00
parent cb908cf803
commit 23d9c2ecf0

View File

@ -510,6 +510,8 @@ UBYTE FcbDelete(xfcb FAR * lpXfcb)
UBYTE FcbRename(xfcb FAR * lpXfcb) UBYTE FcbRename(xfcb FAR * lpXfcb)
{ {
BYTE buf[FNAME_SIZE + FEXT_SIZE];
BOOL bWildCard;
rfcb FAR *lpRenameFcb; rfcb FAR *lpRenameFcb;
COUNT FcbDrive; COUNT FcbDrive;
UBYTE result = FCB_SUCCESS; UBYTE result = FCB_SUCCESS;
@ -517,7 +519,10 @@ UBYTE FcbRename(xfcb FAR * lpXfcb)
/* Build a traditional DOS file name */ /* Build a traditional DOS file name */
lpRenameFcb = (rfcb FAR *) CommonFcbInit(lpXfcb, SecPathName, &FcbDrive); lpRenameFcb = (rfcb FAR *) CommonFcbInit(lpXfcb, SecPathName, &FcbDrive);
/* expand wildcards in dest */
GetNameField(lpRenameFcb->renNewName, buf, FNAME_SIZE, &bWildCard);
GetNameField(lpRenameFcb->renNewExtent, buf + FNAME_SIZE, FEXT_SIZE, &bWildCard);
/* check for a device */ /* check for a device */
if (IsDevice(SecPathName)) if (IsDevice(SecPathName))
{ {
@ -541,6 +546,7 @@ UBYTE FcbRename(xfcb FAR * lpXfcb)
fcb LocalFcb; fcb LocalFcb;
BYTE *pToName; BYTE *pToName;
const BYTE FAR *pFromPattern = Dmatch.dm_name; const BYTE FAR *pFromPattern = Dmatch.dm_name;
const char *pToPattern = buf;
int i; int i;
UBYTE mode = 0; UBYTE mode = 0;
@ -549,13 +555,12 @@ UBYTE FcbRename(xfcb FAR * lpXfcb)
/* I'm cheating because this assumes that the */ /* I'm cheating because this assumes that the */
/* struct alignments are on byte boundaries */ /* struct alignments are on byte boundaries */
pToName = LocalFcb.fcb_fname; pToName = LocalFcb.fcb_fname;
pFromPattern = lpRenameFcb->renNewName;
for (i = 0; i < FNAME_SIZE + FEXT_SIZE; i++) for (i = 0; i < FNAME_SIZE + FEXT_SIZE; i++)
{ {
if (*pFromPattern != '?') if (*pToPattern != '?')
*pToName = *pFromPattern; *pToName = *pToPattern;
pToName++; pToName++;
pFromPattern++; pToPattern++;
} }
SecPathName[0] = 'A' + FcbDrive - 1; SecPathName[0] = 'A' + FcbDrive - 1;