This is the mail archive of the ecos-patches@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Misc generic code changes


Andrew Lunn wrote:
+
+        // s now points to a name candidate
+#ifdef CYGPKG_LIBC_STDIO_FILEIO
+        int fd = open( s, O_RDONLY );
+        close(fd);
+        if (fd < 0 && ENOENT == errno) // we have a winner
+            break;
+#else
+        break; // no real filesystem, so just go with what we've come up with
+#endif


Wouldn't it be better to close just the winner and not close all the
loosers who should have an fd of -1 making the close pointless and a
waste of time.

Yep, you're right. Done!


Jifl

Index: ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/stdio/current/ChangeLog,v
retrieving revision 1.25
diff -u -5 -p -r1.25 ChangeLog
--- ChangeLog	15 Mar 2004 15:21:43 -0000	1.25
+++ ChangeLog	15 Mar 2004 16:31:21 -0000
@@ -1,5 +1,9 @@
+2004-03-15  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/common/fileops.cxx (tmpnam): Only close if open() succeded.
+
 2004-03-12  Jonathan Larmour  <jifl@eCosCentric.com>

* src/input/vfscanf.cxx (vfscanf): Silence warning.

* include/stdio.h:
Index: src/common/fileops.cxx
===================================================================
RCS file: /cvs/ecos/ecos/packages/language/c/libc/stdio/current/src/common/fileops.cxx,v
retrieving revision 1.1
diff -u -5 -p -r1.1 fileops.cxx
--- src/common/fileops.cxx 15 Mar 2004 15:21:44 -0000 1.1
+++ src/common/fileops.cxx 15 Mar 2004 16:31:21 -0000
@@ -199,12 +199,13 @@ __externC char *tmpnam( char *s ) __THRO
totaliters++;


         // s now points to a name candidate
 #ifdef CYGPKG_LIBC_STDIO_FILEIO
         int fd = open( s, O_RDONLY );
-        close(fd);
-        if (fd < 0 && ENOENT == errno) // we have a winner
+        if (fd >= 0)
+            close(fd);
+        else if ( ENOENT == errno ) // we have a winner
             break;
 #else
         break; // no real filesystem, so just go with what we've come up with
 #endif
     }


Jifl -- eCosCentric http://www.eCosCentric.com/ The eCos and RedBoot experts >>>>> Visit us in booth 2527 at the Embedded Systems Conference 2004 <<<<< March 30 - April 1, San Francisco http://www.esconline.com/electronicaUSA/ --["No sense being pessimistic, it wouldn't work anyway"]-- Opinions==mine


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]