Here is the IsShareInstalled patch which also does
not seem to be commited to SVN yet?? The goal is
to reduce the share install check call floods that
FreeDOS would normally cause. The side effect is
minimally later detection of share, should be fine.
Thanks for commenting :-)

Eric



diff -bur freedos/kernel/dosfns.c rayer/kernel/dosfns.c
--- freedos/kernel/dosfns.c     2007-07-28 18:40:25.000000000 +0200
+++ rayer/kernel/dosfns.c       2008-11-30 18:38:06.000000000 +0100
@@ -289,7 +289,7 @@

   /* a block transfer                           */
   /* /// Added for SHARE - Ron Cemer */
-  if (IsShareInstalled() && (s->sft_shroff >= 0))
+  if (IsShareInstalled(FALSE) && (s->sft_shroff >= 0))
   {
     int rc = share_access_check(cu_psp, s->sft_shroff, s->sft_posit,
                                  (unsigned long)n, 1);
@@ -581,7 +581,7 @@
   }

 /* /// Added for SHARE.  - Ron Cemer */
-  if (IsShareInstalled())
+  if (IsShareInstalled(TRUE))
   {
     if ((sftp->sft_shroff =
          share_open_check(PriPathName, cu_psp,
@@ -625,7 +625,7 @@
   else
   {
 /* /// Added for SHARE *** CURLY BRACES ADDED ALSO!!! ***.  - Ron Cemer */
-    if (IsShareInstalled())
+    if (IsShareInstalled(TRUE))
     {
       share_close_file(sftp->sft_shroff);
       sftp->sft_shroff = -1;
@@ -755,7 +755,7 @@
     return dos_commit(sftp->sft_status);

 /* /// Added for SHARE *** CURLY BRACES ADDED ALSO!!! ***.  - Ron Cemer */
-  if (IsShareInstalled())
+  if (IsShareInstalled(TRUE))
   {
     if (sftp->sft_shroff >= 0)
       share_close_file(sftp->sft_shroff);
@@ -1354,7 +1354,7 @@
     return remote_lock_unlock(s, pos, len, unlock);

   /* Invalid function unless SHARE is installed or remote. */
-  if (!IsShareInstalled())
+  if (!IsShareInstalled(FALSE))
     return DE_INVLDFUNC;

   /* Lock violation if this SFT entry does not support locking. */
@@ -1444,10 +1444,13 @@
 }

 /* /// Added for SHARE.  - Ron Cemer */
+/* Eric 8/2008: only re-check (2f.1000) on open/close, not on each
access */

-BOOL IsShareInstalled(void)
+BOOL IsShareInstalled(BOOL recheck)
 {
   extern unsigned char ASMPASCAL share_check(void);
+  if (recheck == FALSE)
+    return share_installed;
   if (!share_installed && share_check() == 0xff)
     share_installed = TRUE;
   return share_installed;
diff -bur freedos/kernel/fatfs.c rayer/kernel/fatfs.c
--- freedos/kernel/fatfs.c      2008-04-04 17:36:58.000000000 +0200
+++ rayer/kernel/fatfs.c        2008-11-30 18:34:28.000000000 +0100
@@ -447,7 +447,7 @@
   f_node_ptr fnp2;
   int i, fd;

-  if (!IsShareInstalled())
+  if (!IsShareInstalled(FALSE))
     return;

   fd = xlt_fnp(fnp);
--- freedos/kernel/proto.h      2008-04-04 17:36:58.000000000 +0200
+++ rayer/kernel/proto.h        2008-11-30 18:34:56.000000000 +0100
@@ -112,7 +112,7 @@
 COUNT DosRenameTrue(BYTE * path1, BYTE * path2, int attrib);
 COUNT DosMkRmdir(const char FAR * dir, int action);
 struct dhdr FAR *IsDevice(const char FAR * FileName);
-BOOL IsShareInstalled(void);
+BOOL IsShareInstalled(BOOL recheck);
 COUNT DosLockUnlock(COUNT hndl, LONG pos, LONG len, COUNT unlock);
 int idx_to_sft_(int SftIndex);
 sft FAR *idx_to_sft(int SftIndex);


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Freedos-kernel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-kernel

Reply via email to