summaryrefslogtreecommitdiffstats
path: root/c/src/libmisc/devnull
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2001-04-20 13:37:05 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2001-04-20 13:37:05 +0000
commita5bdcd9881aa1bf8533b933a96812441ba3b7214 (patch)
treeb39151e32fff98167bfd22cdfbe6574840c15783 /c/src/libmisc/devnull
parent2001-04-20 Joel Sherrill <joel@OARcorp.com> (diff)
downloadrtems-a5bdcd9881aa1bf8533b933a96812441ba3b7214.tar.bz2
2001-04-20 Joel Sherrill <joel@OARcorp.com>
* devnull/devnull.c (null_initialize): Added check to ensure that the driver is only initialized once. Otherwise, it will abort when the device /dev/null is present. (null_write): Do not dereference a NULL pointer.
Diffstat (limited to 'c/src/libmisc/devnull')
-rw-r--r--c/src/libmisc/devnull/devnull.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/c/src/libmisc/devnull/devnull.c b/c/src/libmisc/devnull/devnull.c
index c569fcb2ba..6ea15ea286 100644
--- a/c/src/libmisc/devnull/devnull.c
+++ b/c/src/libmisc/devnull/devnull.c
@@ -32,6 +32,7 @@
*/
rtems_unsigned32 NULL_major;
+static initialized;
rtems_device_driver null_initialize(
rtems_device_major_number major,
@@ -39,18 +40,22 @@ rtems_device_driver null_initialize(
void *pargp
)
{
- rtems_device_driver status ;
+ rtems_device_driver status;
- status = rtems_io_register_name(
- "/dev/null",
- major,
- (rtems_device_minor_number) 0
+ if ( !initialized ) {
+ initialized = 1;
+
+ status = rtems_io_register_name(
+ "/dev/null",
+ major,
+ (rtems_device_minor_number) 0
);
- if (status != RTEMS_SUCCESSFUL)
- rtems_fatal_error_occurred(status);
+ if (status != RTEMS_SUCCESSFUL)
+ rtems_fatal_error_occurred(status);
- NULL_major = major;
+ NULL_major = major;
+ }
return RTEMS_SUCCESSFUL;
}
@@ -143,9 +148,10 @@ rtems_device_driver null_write(
void *pargp
)
{
- rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp ;
+ rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp;
- rw_args->bytes_moved = rw_args->count ;
+ if ( rw_args )
+ rw_args->bytes_moved = rw_args->count;
return NULL_SUCCESSFUL;
}