Hi!

- bugfix: INT21/29: into FcbParseFname() was not passed options from AL.

--- Begin Message ---
diff -ruNp old/kernel/fcbfns.c new/kernel/fcbfns.c
--- old/kernel/fcbfns.c 2004-05-24 04:42:56.000000000 +0000
+++ new/kernel/fcbfns.c 2004-07-24 22:04:40.000000000 +0000
@@ -85,7 +85,7 @@ BYTE FAR *FatGetDrvData(UBYTE drive, UWO
 #define PARSE_RET_BADDRIVE      0xff
 
 #ifndef IPL
-UWORD FcbParseFname(int *wTestMode, const BYTE FAR * lpFileName, fcb FAR * lpFcb)
+ofs_t FcbParseFname(UBYTE *wTestMode, const char FAR * lpFileName, fcb FAR * lpFcb)
 {
   WORD wRetCodeName = FALSE, wRetCodeExt = FALSE;
 
@@ -157,7 +157,9 @@ UWORD FcbParseFname(int *wTestMode, cons
         GetNameField(++lpFileName, (BYTE FAR *) lpFcb->fcb_fext,
                      FEXT_SIZE, (BOOL *) & wRetCodeExt);
 
-  *wTestMode = (wRetCodeName | wRetCodeExt) ? PARSE_RET_WILD : PARSE_RET_NOWILD;
+  *wTestMode = PARSE_RET_WILD;
+  if (!(wRetCodeName | wRetCodeExt))
+    *wTestMode = PARSE_RET_NOWILD;
   return FP_OFF(lpFileName);
 }
 
@@ -539,13 +541,14 @@ UBYTE FcbRename(xfcb FAR * lpXfcb)
     else do
     {
       /* 'A:' + '.' + '\0' */
-      BYTE loc_szBuffer[2 + FNAME_SIZE + 1 + FEXT_SIZE + 1];
+      char loc_szBuffer[2 + FNAME_SIZE + 1 + FEXT_SIZE + 1];
       fcb LocalFcb;
       BYTE *pToName;
       const BYTE FAR *pFromPattern = Dmatch.dm_name;
-      int i = 0;
+      int i;
 
-      FcbParseFname(&i, pFromPattern, &LocalFcb);
+      loc_szBuffer [0] = 0; /* dummy place */
+      FcbParseFname((UBYTE*)loc_szBuffer, pFromPattern, &LocalFcb);
       /* Overlay the pattern, skipping '?'            */
       /* I'm cheating because this assumes that the   */
       /* struct alignments are on byte boundaries     */
@@ -691,4 +694,3 @@ UBYTE FcbFindFirstNext(xfcb FAR * lpXfcb
   return FCB_SUCCESS;
 }
 #endif
-
diff -ruNp old/kernel/inthndlr.c new/kernel/inthndlr.c
--- old/kernel/inthndlr.c       2004-07-15 02:16:58.000000000 +0000
+++ new/kernel/inthndlr.c       2004-07-24 21:26:42.000000000 +0000
@@ -669,9 +662,7 @@ dispatch:
 
       /* Parse File Name                                              */
     case 0x29:
-      rc = 0;
-      lr.SI = FcbParseFname(&rc, MK_FP(lr.DS, lr.SI), FP_ES_DI);
-      lr.AL = rc;
+      lr.SI = FcbParseFname(&lr.AL, MK_FP(lr.DS, lr.SI), FP_ES_DI);
       break;
 
       /* Get Date                                                     */
diff -ruNp old/kernel/proto.h new/kernel/proto.h
--- old/kernel/proto.h  2004-07-08 19:16:58.000000000 +0000
+++ new/kernel/proto.h  2004-07-24 22:04:32.000000000 +0000
@@ -211,7 +211,7 @@ VOID DosCharOutput(COUNT c);
 VOID DosDisplayOutput(COUNT c);
 BYTE FAR *FatGetDrvData(UBYTE drive, UWORD * spc, UWORD * bps,
                    UWORD * nc);
-UWORD FcbParseFname(int *wTestMode, const BYTE FAR *lpFileName, fcb FAR * lpFcb);
+ofs_t FcbParseFname(UBYTE *wTestMode, const char FAR * lpFileName, fcb FAR * lpFcb);
 const BYTE FAR *ParseSkipWh(const BYTE FAR * lpFileName);
 BOOL TestCmnSeps(BYTE FAR * lpFileName);
 BOOL TestFieldSeps(BYTE FAR * lpFileName);

--- End Message ---

Reply via email to