mirror of
https://github.com/FDOS/kernel.git
synced 2025-07-24 22:34:29 +02:00
FCB: Rename should support asterisk wildcards - based on dosemu fdpp patch f3cb0719ca
, fixes issue #43
This commit is contained in:
parent
cb908cf803
commit
23d9c2ecf0
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user