cvs-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Cvs-cvs] ccvs/windows-NT ChangeLog dirent.c dirent.h


From: Derek Robert Price
Subject: [Cvs-cvs] ccvs/windows-NT ChangeLog dirent.c dirent.h
Date: Tue, 11 Jul 2006 12:35:10 +0000

CVSROOT:        /cvsroot/cvs
Module name:    ccvs
Changes by:     Derek Robert Price <dprice>     06/07/11 12:35:09

Modified files:
        windows-NT     : ChangeLog dirent.c dirent.h 

Log message:
        * dirent.h: Remove #include <config.h>.
        (struct dirent): Remove unimplemented d_ino since POSIX declares it an
        extension.  Add d_namlen.
        (struct direcontents): Add length field.
        [_D_EXACT_NAMLEN]: Define.
        [MAXNAMLEN]: Replace with...
        [NAME_MAX]: ...this macro, for POSIX.
        * dirent.c: #include <config.h>.
        (opendir): Don't check return from xmalloc.  Store length of dir name.
        (readdir_r): Remove d_ino.  Store d_namlen.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/ccvs/windows-NT/ChangeLog?cvsroot=cvs&r1=1.376&r2=1.377
http://cvs.savannah.gnu.org/viewcvs/ccvs/windows-NT/dirent.c?cvsroot=cvs&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/ccvs/windows-NT/dirent.h?cvsroot=cvs&r1=1.1&r2=1.2

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/cvs/ccvs/windows-NT/ChangeLog,v
retrieving revision 1.376
retrieving revision 1.377
diff -u -b -r1.376 -r1.377
--- ChangeLog   10 Jul 2006 20:23:48 -0000      1.376
+++ ChangeLog   11 Jul 2006 12:35:08 -0000      1.377
@@ -1,3 +1,16 @@
+2006-07-11  Derek Price  <address@hidden>
+
+       * dirent.h: Remove #include <config.h>.
+       (struct dirent): Remove unimplemented d_ino since POSIX declares it an
+       extension.  Add d_namlen.
+       (struct direcontents): Add length field.
+       [_D_EXACT_NAMLEN]: Define.
+       [MAXNAMLEN]: Replace with...
+       [NAME_MAX]: ...this macro, for POSIX.
+       * dirent.c: #include <config.h>.
+       (opendir): Don't check return from xmalloc.  Store length of dir name.
+       (readdir_r): Remove d_ino.  Store d_namlen.
+
 2006-07-10  Jim Hyslop <address@hidden>
 
        Commit Derek Price's patch to eliminate obsolete ndir.h, with some

Index: dirent.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/windows-NT/dirent.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- dirent.c    10 Jul 2006 20:23:48 -0000      1.1
+++ dirent.c    11 Jul 2006 12:35:09 -0000      1.2
@@ -21,6 +21,9 @@
  * appear to be <dirent.c> as opposed to its former incarnation as <ndir.c>.
  */
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
 
 /* Validate API.  */
 #include <sys/types.h>
@@ -81,27 +84,15 @@
   do
     {
       dp = xmalloc (sizeof (struct _dircontents));
-      if (!dp)
-       {
-         free_dircontents (dirp->dd_contents);
-         return NULL;
-       }
-
-      dp->_d_entry = xmalloc (strlen (find_buf.name) + 1);
-      if (!dp->_d_entry)
-       {
-         free (dp);
-         free_dircontents (dirp->dd_contents);
-         return NULL;
-       }
+      dp->_d_length = strlen (find_buf.name);
+      dp->_d_entry = xmalloc (dp->_d_length + 1);
+      memcpy (dp->_d_entry, find_buf.name, dp->_d_length + 1);
 
       if (dirp->dd_contents)
        dirp->dd_cp = dirp->dd_cp->_d_next = dp;
       else
        dirp->dd_contents = dirp->dd_cp = dp;
 
-      strcpy (dp->_d_entry, find_buf.name);
-
       dp->_d_next = NULL;
 
     } while (!_findnext (hFile, &find_buf));
@@ -132,8 +123,9 @@
     *result = NULL;
   else
     {
-      strcpy (dp->d_name, dirp->dd_cp->_d_entry);
-      dp->d_ino = 0;
+      dp->d_namlen = dirp->dd_cp->_d_length;
+      memcpy (dp->d_name, dirp->dd_cp->_d_entry, dp->d_namlen + 1);
+
       dirp->dd_cp = dirp->dd_cp->_d_next;
       dirp->dd_loc++;
       *result = dp;

Index: dirent.h
===================================================================
RCS file: /cvsroot/cvs/ccvs/windows-NT/dirent.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- dirent.h    10 Jul 2006 20:23:48 -0000      1.1
+++ dirent.h    11 Jul 2006 12:35:09 -0000      1.2
@@ -18,31 +18,31 @@
    August 1897 */
 
 /* Minor adaptations made in 2006 by Derek R. Price <address@hidden> to
- * appear to be <dirent.h> as opposed to its former incarnation as <ndir.h>.
+ * comply with the POSIX.1 <dirent.h> specification, as opposed to its former
+ * incarnation as <ndir.h>.
  */
 
 #ifndef WINDOWSNT_DIRENT_H_INCLUDED
 #define WINDOWSNT_DIRENT_H_INCLUDED
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #define        rewinddir(dirp) seekdir (dirp, 0L)
 
 /* 255 is said to be big enough for Windows NT.  The more elegant
-   solution would be declaring d_name as one byte long and allocating
-   it to the actual size needed.  */
-#define        MAXNAMLEN       255
-
+ * solution would be declaring d_name as one byte long and allocating
+ * it to the actual size needed.
+ */
+#ifndef NAME_MAX
+# define NAME_MAX 255
+#endif
 struct dirent
 {
-  ino_t d_ino;                 /* a bit of a farce */
-  char d_name[MAXNAMLEN + 1];  /* garentee null termination */
+  size_t d_namlen;             /* GNU extension.  */
+  char d_name[NAME_MAX + 1];   /* guarantee null termination */
 };
 
 struct _dircontents
 {
+  size_t _d_length;
   char *_d_entry;
   struct _dircontents *_d_next;
 };
@@ -62,4 +62,6 @@
 void seekdir (DIR *, long);
 long telldir (DIR *);
 
+#define _D_EXACT_NAMLEN(dp) (dp)->d_namlen
+
 #endif /* WINDOWSNT_DIRENT_H_INCLUDED */
\ No newline at end of file




reply via email to

[Prev in Thread] Current Thread [Next in Thread]