[Libsysio-commit] LLNL_HPSS: libsysio/drivers/native fs_native.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2005-09-09 14:58:37
|
Update of /cvsroot/libsysio/libsysio/drivers/native In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9447/drivers/native Modified Files: Tag: LLNL_HPSS fs_native.c Log Message: Deal with directory record variants that include or don't d_off, d_offset, d_reclen, and d_namlen. Index: fs_native.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/native/fs_native.c,v retrieving revision 1.56.2.1 retrieving revision 1.56.2.2 diff -u -w -b -B -p -r1.56.2.1 -r1.56.2.2 --- fs_native.c 6 Sep 2005 14:35:32 -0000 1.56.2.1 +++ fs_native.c 9 Sep 2005 14:58:20 -0000 1.56.2.2 @@ -1021,7 +1021,7 @@ native_filldirentries(struct inode *ino, struct linux_dirent *ldp; struct dirent64 *d64p; size_t namlen; - size_t reclen; + size_t reclen, areclen; #else #define bp buf #define count nbytes @@ -1054,24 +1054,38 @@ native_filldirentries(struct inode *ino, if (nbytes <= reclen) break; d64p->d_ino = ldp->ld_ino; - d64p->d_off = nino->ni_fpos = ldp->ld_off; +#ifdef _DIRENT_HAVE_D_OFF + d64p->d_off = +#else + d64p->d_offset = +#endif + nino->ni_fpos = ldp->ld_off; +#ifdef _DIRENT_HAVE_D_RECLEN d64p->d_reclen = +#endif + areclen = (((reclen + sizeof(long))) / sizeof(long)) * sizeof(long); - if (nbytes < d64p->d_reclen) - d64p->d_reclen = reclen + 1; + if (nbytes < areclen) { +#ifdef _DIRENT_HAVE_D_RECLEN + d64p->d_reclen = +#endif + areclen = reclen + 1; + } +#ifdef _DIRENT_HAVE_D_TYPE d64p->d_type = DT_UNKNOWN; /* you lose -- sorry. */ +#endif (void )memcpy(d64p->d_name, ldp->ld_name, namlen); /* * Zero pad the rest. */ - for (cp = d64p->d_name + namlen, n = d64p->d_reclen - reclen; + for (cp = d64p->d_name + namlen, n = areclen - reclen; n; n--) *cp++ = 0; cc -= ldp->ld_reclen; ldp = (struct linux_dirent *)((char *)ldp + ldp->ld_reclen); - nbytes -= d64p->d_reclen; - d64p = (struct dirent64 *)((char *)d64p + d64p->d_reclen); + nbytes -= areclen; + d64p = (struct dirent64 *)((char *)d64p + areclen); } free(bp); cc = |