[Libsysio-commit] HEAD: libsysio/drivers/incore fs_incore.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2005-08-04 20:17:17
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4518/drivers/incore Modified Files: fs_incore.c Log Message: Removed the internal getdirentries inode operation. The getdirentries function does not return the *next* block in it's basep argument. It simply return the cookie for the current block. We needed one that returns the *next*, so a new interface called filldirentries is present with this change. It takes, as it's second argument, a pointer to a value/result pair. The value should be set to the position to be read. The result is the position of the next block. All the included drivers have been updated. External drivers will require similar updates. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -w -b -B -p -r1.23 -r1.24 --- fs_incore.c 25 Jan 2005 00:36:47 -0000 1.23 +++ fs_incore.c 4 Aug 2005 20:17:09 -0000 1.24 @@ -131,10 +131,10 @@ static int _sysio_incore_inop_setattr(st struct inode *ino, unsigned mask, struct intnl_stat *stbuf); -static ssize_t _sysio_incore_dirop_getdirentries(struct inode *ino, +static ssize_t _sysio_incore_dirop_filldirentries(struct inode *ino, + _SYSIO_OFF_T *posp, char *buf, - size_t nbytes, - _SYSIO_OFF_T *basep); + size_t nbytes); static int _sysio_incore_dirop_mkdir(struct pnode *pno, mode_t mode); static int _sysio_incore_dirop_rmdir(struct pnode *pno); static int _sysio_incore_inop_open(struct pnode *pno, int flags, mode_t mode); @@ -187,7 +187,7 @@ static struct inode_ops _sysio_incore_di _sysio_incore_dirop_lookup, _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, - _sysio_incore_dirop_getdirentries, + _sysio_incore_dirop_filldirentries, _sysio_incore_dirop_mkdir, _sysio_incore_dirop_rmdir, _sysio_incore_dirop_symlink, @@ -217,11 +217,11 @@ static struct inode_ops _sysio_incore_di struct inode **, \ struct intent *, \ const char *))_sysio_do_illop -#define _sysio_incore_filop_getdirentries \ +#define _sysio_incore_filop_filldirentries \ (ssize_t (*)(struct inode *, \ + _SYSIO_OFF_T *, \ char *, \ - size_t, \ - _SYSIO_OFF_T *))_sysio_do_illop + size_t))_sysio_do_illop #define _sysio_incore_filop_mkdir \ (int (*)(struct pnode *, mode_t))_sysio_do_illop #define _sysio_incore_filop_rmdir \ @@ -243,7 +243,7 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_filop_lookup, _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, - _sysio_incore_filop_getdirentries, + _sysio_incore_filop_filldirentries, _sysio_incore_filop_mkdir, _sysio_incore_filop_rmdir, _sysio_incore_filop_symlink, @@ -272,7 +272,7 @@ static struct inode_ops _sysio_incore_de _sysio_incore_filop_lookup, _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, - _sysio_incore_filop_getdirentries, + _sysio_incore_filop_filldirentries, _sysio_incore_filop_mkdir, _sysio_incore_filop_rmdir, _sysio_incore_filop_symlink, @@ -955,31 +955,30 @@ incore_directory_enumerate(struct intnl_ } static ssize_t -_sysio_incore_dirop_getdirentries(struct inode *ino, +_sysio_incore_dirop_filldirentries(struct inode *ino, + _SYSIO_OFF_T *posp, char *buf, - size_t nbytes, - _SYSIO_OFF_T *basep) + size_t nbytes) { struct incore_inode *icino = I2IC(ino); off_t off; struct intnl_dirent *de; struct copy_info copy_info; - if (*basep > icino->ici_st.st_size) + if (*posp >= icino->ici_st.st_size) return 0; de = incore_directory_probe(icino->ici_data, icino->ici_st.st_size, - *basep, + *posp, (probe_ty )incore_directory_position, NULL, - (char *)icino->ici_data + *basep); + (char *)icino->ici_data + *posp); if (!de) { /* * Past EOF. */ - *basep = 0; return 0; } @@ -997,7 +996,7 @@ _sysio_incore_dirop_getdirentries(struct icino->ici_st.st_atime = time(NULL); if (!nbytes) return -EOVERFLOW; - *basep = nbytes; + *posp += nbytes; return (ssize_t )nbytes; } |