diff options
Diffstat (limited to 'c/src/lib')
-rw-r--r-- | c/src/lib/ChangeLog | 7 | ||||
-rw-r--r-- | c/src/lib/include/rtems/libio_.h | 5 | ||||
-rw-r--r-- | c/src/lib/libc/libio.c | 18 |
3 files changed, 24 insertions, 6 deletions
diff --git a/c/src/lib/ChangeLog b/c/src/lib/ChangeLog index 73d7179e02..57d5ae4f85 100644 --- a/c/src/lib/ChangeLog +++ b/c/src/lib/ChangeLog @@ -1,3 +1,10 @@ +2001-10-25 Jennifer Averett <jennifer@OARcorp.com> + + * libc/libio.c: Initialize more fields to NULL/0 during initialiation. + * include/rtems/libio_.h: Fix freenode macro so it works for sockets + which do not have the full set of filesystem operations and are + initialized via something other than open(). + 2001-10-18 Till Straumann <strauman@SLAC.Stanford.EDU> * libc/open.c, libc/close.c: Moved freenode from open to diff --git a/c/src/lib/include/rtems/libio_.h b/c/src/lib/include/rtems/libio_.h index 7e0f6df71e..6a4943be75 100644 --- a/c/src/lib/include/rtems/libio_.h +++ b/c/src/lib/include/rtems/libio_.h @@ -165,8 +165,9 @@ extern rtems_libio_t *rtems_libio_iop_freelist; #define rtems_filesystem_freenode( _node ) \ do { \ - if ( (_node)->ops->freenod_h ) \ - (*(_node)->ops->freenod_h)( (_node) ); \ + if ( (_node)->ops )\ + if ( (_node)->ops->freenod_h ) \ + (*(_node)->ops->freenod_h)( (_node) ); \ } while (0) /* diff --git a/c/src/lib/libc/libio.c b/c/src/lib/libc/libio.c index 1216ec15a5..f5cd36dbd9 100644 --- a/c/src/lib/libc/libio.c +++ b/c/src/lib/libc/libio.c @@ -206,10 +206,20 @@ rtems_libio_t *rtems_libio_allocate( void ) if (rc != RTEMS_SUCCESSFUL) goto failed; rtems_libio_iop_freelist = iop->data1; - iop->data1 = 0; - iop->flags = LIBIO_FLAGS_OPEN; - iop->size = 0; - iop->offset = 0; + + iop->driver = NULL; + iop->size = 0; + iop->offset = 0; + iop->flags = LIBIO_FLAGS_OPEN; + iop->pathinfo.node_access = NULL; + iop->pathinfo.handlers = NULL; + iop->pathinfo.ops = NULL; + iop->pathinfo.mt_entry = NULL; + iop->data0 = 0; + iop->data1 = NULL; + iop->file_info = NULL; + iop->handlers = NULL; + goto done; } |