Hi!

- optimization for SftSeek(); later it will be optimized together with
  DosSeek() to make better calling from inthndlr.c.
- common code from DosFindFirst() and DosFindNext() moved to pop_dmp().

--- Begin Message ---
diff -ruNp old/kernel/dosfns.c new/kernel/dosfns.c
--- old/kernel/dosfns.c 2004-05-23 14:18:10.000000000 +0000
+++ new/kernel/dosfns.c 2004-07-20 16:59:04.000000000 +0000
@@ -308,22 +308,31 @@ long DosRWSft(int sft_idx, size_t n, voi
   }
 }
 
-COUNT SftSeek(int sft_idx, LONG new_pos, COUNT mode)
+#define SEEK_SET 0
+#define SEEK_CUR 1
+#define SEEK_END 2
+
+/* !!! `mode' should be `unsigned' --avb */
+int SftSeek(int sft_idx, LONG new_pos, int mode)
 {
   sft FAR *s = idx_to_sft(sft_idx);
   if (FP_OFF(s) == (size_t) -1)
     return DE_INVLDHNDL;
         
   /* Test for invalid mode                        */
-  if (mode < 0 || mode > 2)
+  if ((unsigned)mode > SEEK_END) /* 2 */
     return DE_INVLDFUNC;
 
   lpCurSft = s;
 
   if (s->sft_flags & SFT_FSHARED)
   {
+    if (mode == SEEK_CUR)
+    {
+      new_pos += s->sft_posit;
+    }
     /* seek from end of file */
-    if (mode == 2)
+    else if (mode == SEEK_END)
     {
 /*
  *  RB list has it as Note:
@@ -336,41 +345,24 @@ COUNT SftSeek(int sft_idx, LONG new_pos,
  *  Mfs.c looks for these mode bits set, so here is my best guess.;^)
  */
       if (s->sft_mode & (O_DENYREAD | O_DENYNONE))
-        s->sft_posit = remote_lseek(s, new_pos);
+        new_pos = remote_lseek(s, new_pos);
       else
-        s->sft_posit = s->sft_size + new_pos;
-      return SUCCESS;
-    }
-    if (mode == 0)
-    {
-      s->sft_posit = new_pos;
-      return SUCCESS;
-    }
-    if (mode == 1)
-    {
-      s->sft_posit += new_pos;
-      return SUCCESS;
+        new_pos += s->sft_size;
     }
-    return DE_INVLDFUNC;
   }
-
   /* Do special return for character devices      */
-  if (s->sft_flags & SFT_FDEVICE)
+  else if (s->sft_flags & SFT_FDEVICE)
   {
-    s->sft_posit = 0l;
-    return SUCCESS;
+    new_pos = 0;
   }
   else
   {
-    LONG result = dos_lseek(s->sft_status, new_pos, mode);
-    if (result < 0l)
-      return (int)result;
-    else
-    {
-      s->sft_posit = result;
-      return SUCCESS;
-    }
+    if ((new_pos = dos_lseek(s->sft_status, new_pos, mode)) < 0)
+      return (int)new_pos;
   }
+
+  s->sft_posit = new_pos;
+  return SUCCESS;
 }
 
 ULONG DosSeek(unsigned hndl, LONG new_pos, COUNT mode)
@@ -1018,22 +1010,27 @@ COUNT DosChangeDir(BYTE FAR * s)
   return SUCCESS;
 }
 
-STATIC VOID pop_dmp(dmatch FAR * dmp)
+STATIC int pop_dmp(int rc, dmatch FAR * save_dta)
 {
-  dmp->dm_attr_fnd = (BYTE) SearchDir.dir_attrib;
-  dmp->dm_time = SearchDir.dir_time;
-  dmp->dm_date = SearchDir.dir_date;
-  dmp->dm_size = (LONG) SearchDir.dir_size;
-  ConvertName83ToNameSZ(dmp->dm_name, (BYTE FAR *) SearchDir.dir_name);
+  dta = save_dta;
+  if (rc == SUCCESS)
+  {
+    fmemcpy(save_dta, &sda_tmp_dm, 21);
+    save_dta->dm_attr_fnd = SearchDir.dir_attrib;
+    save_dta->dm_time = SearchDir.dir_time;
+    save_dta->dm_date = SearchDir.dir_date;
+    save_dta->dm_size = SearchDir.dir_size;
+    ConvertName83ToNameSZ(save_dta->dm_name, SearchDir.dir_name);
+  }
+  return rc;
 }
 
+/* !!! `name' should be `const char FAR*' --avb */
 COUNT DosFindFirst(UCOUNT attr, BYTE FAR * name)
 {
-  int rc;
-  register dmatch FAR *dmp = dta;
-
-  rc = truename(name, PriPathName,
-                CDS_MODE_CHECK_DEV_PATH | CDS_MODE_ALLOW_WILDCARDS);
+  dmatch FAR *save_dta = dta;
+  int rc = truename(name, PriPathName,
+                    CDS_MODE_CHECK_DEV_PATH | CDS_MODE_ALLOW_WILDCARDS);
   if (rc < SUCCESS)
     return rc;
 
@@ -1065,32 +1062,26 @@ COUNT DosFindFirst(UCOUNT attr, BYTE FAR
     SearchDir.dir_attrib = D_DEVICE;
     SearchDir.dir_time = dos_gettime();
     SearchDir.dir_date = dos_getdate();
-    p = (char *)FP_OFF(get_root(PriPathName));
-    memset(SearchDir.dir_name, ' ', FNAME_SIZE + FEXT_SIZE);
+    p = (const char *)get_root(PriPathName);
     for (i = 0; i < FNAME_SIZE && *p && *p != '.'; i++)
       SearchDir.dir_name[i] = *p++;
+    for (; i < FNAME_SIZE + FEXT_SIZE; i++)
+      SearchDir.dir_name[i] = ' ';
     rc = SUCCESS;
     /* /// End of additions.  - Ron Cemer ; heavily edited - Bart Oldeman */
   }
   else
     rc = dos_findfirst(attr, PriPathName);
 
-  dta = dmp;
-  if (rc == SUCCESS)
-  {
-    fmemcpy(dta, &sda_tmp_dm, 21);
-    pop_dmp(dmp);
-  }
-  return rc;
+  return pop_dmp(rc, save_dta);
 }
 
 COUNT DosFindNext(void)
 {
-  COUNT rc;
-  register dmatch FAR *dmp = dta;
+  dmatch FAR *save_dta = dta;
 
   /* findnext will always fail on a device name device name or volume id */
-  if (dmp->dm_attr_fnd & (D_DEVICE | D_VOLID))
+  if (save_dta->dm_attr_fnd & (D_DEVICE | D_VOLID))
     return DE_NFILES;
 
 /*
@@ -1111,21 +1102,13 @@ COUNT DosFindNext(void)
  *  (12h, DE_NFILES)
  */
 #if 0
-  printf("findnext: %d\n", dmp->dm_drive);
+  printf("findnext: %d\n", save_dta->dm_drive);
 #endif
-  fmemcpy(&sda_tmp_dm, dmp, 21);
+  fmemcpy(dta = &sda_tmp_dm, save_dta, 21);
   memset(&SearchDir, 0, sizeof(struct dirent));
-  dta = &sda_tmp_dm;
-  rc = (sda_tmp_dm.dm_drive & 0x80) ?
-    network_redirector_fp(REM_FINDNEXT, &sda_tmp_dm) : dos_findnext();
-
-  dta = dmp;
-  if (rc == SUCCESS)
-  {
-    fmemcpy(dmp, &sda_tmp_dm, 21);
-    pop_dmp(dmp);
-  }
-  return rc;
+  return pop_dmp(sda_tmp_dm.dm_drive & 0x80
+                       ? network_redirector_fp(REM_FINDNEXT, &sda_tmp_dm)
+                       : dos_findnext(), save_dta);
 }
 
 COUNT DosGetFtime(COUNT hndl, date * dp, time * tp)
diff -ruNp old/kernel/main.c new/kernel/main.c
--- old/kernel/main.c   2004-07-08 00:18:18.000000000 +0000
+++ new/kernel/main.c   2004-07-18 07:52:18.000000000 +0000
@@ -328,7 +328,7 @@ STATIC VOID FsConfig(VOID)
   for (i = 0; i < LoL->lastdrive; i++)
   {
     struct cds FAR *pcds_table = &LoL->CDSp[i];
-    fmemcpy(pcds_table->cdsCurrentPath, "A:\\\0", 4);
+    fmemcpy(pcds_table->cdsCurrentPath, "A:\\", 4);
     pcds_table->cdsCurrentPath[0] += i;
     pcds_table->cdsFlags = 0;
     if (i < LoL->nblkdev && (LONG) dpb != -1l)

--- End Message ---

Reply via email to