Update of /cvsroot/libsysio/libsysio/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9447/src
Modified Files:
Tag: LLNL_HPSS
getdirentries.c readdir.c
Log Message:
Deal with directory record variants that include or don't d_off, d_offset,
d_reclen, and d_namlen.
Index: getdirentries.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/getdirentries.c,v
retrieving revision 1.20.2.1
retrieving revision 1.20.2.2
diff -u -w -b -B -p -r1.20.2.1 -r1.20.2.2
--- getdirentries.c 26 Aug 2005 17:07:27 -0000 1.20.2.1
+++ getdirentries.c 9 Sep 2005 14:58:20 -0000 1.20.2.2
@@ -201,11 +201,17 @@ SYSIO_INTERFACE_NAME(getdirentries)(int
n = _namlen(d64p);
reclen = _dreclen(n);
d64.d_ino = d64p->d_ino;
+#ifdef _DIRENT_HAVE_D_OFF
d64.d_off = d64p->d_off;
+#else
+ d64.d_offset = d64p->d_offset;
+#endif
#ifdef _DIRENT_HAVE_D_TYPE
d64.d_type = d64p->d_type;
#endif
+#ifdef _DIRENT_HAVE_D_RECLEN
d64.d_reclen = d64p->d_reclen;
+#endif
/*
* Copy name first.
*/
@@ -214,9 +220,18 @@ SYSIO_INTERFACE_NAME(getdirentries)(int
* Then, the rest.
*/
dp->d_ino = d64.d_ino;
+#ifdef _DIRENT_HAVE_D_OFF
dp->d_off = d64.d_off;
- if (dp->d_ino != d64.d_ino ||
- dp->d_off != d64.d_off) {
+#else
+ dp->d_offset = d64.d_offset;
+#endif
+ if (dp->d_ino != d64.d_ino
+#ifdef _DIRENT_HAVE_D_OFF
+ || dp->d_off != d64.d_off
+#else
+ || dp->d_offset != d64.d_offset
+#endif
+ ) {
/*
* If conversion failure then we are done.
*/
@@ -229,15 +244,22 @@ SYSIO_INTERFACE_NAME(getdirentries)(int
}
break;
}
- fil->f_pos = dp->d_off;
+ fil->f_pos =
+#ifdef _DIRENT_HAVE_D_OFF
+ dp->d_off;
+#else
+ dp->d_offset;
+#endif
#ifdef _DIRENT_HAVE_D_TYPE
dp->d_type = d64.d_type;
#endif
+#ifdef _DIRENT_HAVE_D_RECLEN
dp->d_reclen = reclen;
+#endif
/*
* Fill the remainder with zeros.
*/
- p = (char *)dp + dp->d_reclen;
+ p = (char *)dp + reclen;
#ifdef HAVE_D_NAMLEN
dp->d_namlen = n;
#endif
@@ -249,8 +271,8 @@ SYSIO_INTERFACE_NAME(getdirentries)(int
* Advance.
*/
dp = p;
- cc -= d64.d_reclen;
- d64p = (struct dirent64 *)((char *)d64p + d64.d_reclen);
+ cc -= reclen;
+ d64p = (struct dirent64 *)((char *)d64p + reclen);
}
if (cc < 0)
Index: readdir.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/readdir.c,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -w -b -B -p -r1.2 -r1.2.2.1
--- readdir.c 25 Jan 2005 00:37:14 -0000 1.2
+++ readdir.c 9 Sep 2005 14:58:20 -0000 1.2.2.1
@@ -92,6 +92,8 @@ _READDIR(DIR *dir)
#endif
#ifdef _DIRENT_HAVE_D_OFF
dir->filepos = dp->d_off;
+#elif defined(_DIRENT_HAVE_D_OFFSET)
+ dir->filepos = dp->d_offset;
#else
dir->filepos = dir->cur;
#endif
|