forked from Imagelibrary/rtems
* 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.
181 lines
3.5 KiB
C
181 lines
3.5 KiB
C
/* /dev/null
|
|
*
|
|
* Derived from rtems' stub driver.
|
|
*
|
|
* Author: Ralf Corsepius (corsepiu@faw.uni-ulm.de)
|
|
*
|
|
* COPYRIGHT (c) 1989-2000.
|
|
* On-Line Applications Research Corporation (OAR).
|
|
*
|
|
* The license and distribution terms for this file may be
|
|
* found in the file LICENSE in this distribution or at
|
|
* http://www.OARcorp.com/rtems/license.html.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include <rtems.h>
|
|
#include <rtems/devnull.h>
|
|
#include <rtems/libio.h>
|
|
|
|
/* null_initialize
|
|
*
|
|
* This routine is the null device driver init routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargp - pointer to parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_unsigned32 NULL_major;
|
|
static initialized;
|
|
|
|
rtems_device_driver null_initialize(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
rtems_device_driver status;
|
|
|
|
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);
|
|
|
|
NULL_major = major;
|
|
}
|
|
|
|
return RTEMS_SUCCESSFUL;
|
|
}
|
|
|
|
/* null_open
|
|
*
|
|
* This routine is the null device driver open routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargb - pointer to open parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_device_driver null_open(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
return NULL_SUCCESSFUL;
|
|
}
|
|
|
|
|
|
/* null_close
|
|
*
|
|
* This routine is the null device driver close routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargb - pointer to close parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_device_driver null_close(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
return NULL_SUCCESSFUL;
|
|
}
|
|
|
|
|
|
/* null_read
|
|
*
|
|
* This routine is the null device driver read routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargp - pointer to read parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_device_driver null_read(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
return NULL_SUCCESSFUL;
|
|
}
|
|
|
|
|
|
/* null_write
|
|
*
|
|
* This routine is the null device driver write routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargp - pointer to write parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_device_driver null_write(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *) pargp;
|
|
|
|
if ( rw_args )
|
|
rw_args->bytes_moved = rw_args->count;
|
|
|
|
return NULL_SUCCESSFUL;
|
|
}
|
|
|
|
|
|
/* null_control
|
|
*
|
|
* This routine is the null device driver control routine.
|
|
*
|
|
* Input parameters:
|
|
* major - device major number
|
|
* minor - device minor number
|
|
* pargp - pointer to cntrl parameter block
|
|
*
|
|
* Output parameters:
|
|
* rval - NULL_SUCCESSFUL
|
|
*/
|
|
|
|
rtems_device_driver null_control(
|
|
rtems_device_major_number major,
|
|
rtems_device_minor_number minor,
|
|
void *pargp
|
|
)
|
|
{
|
|
return NULL_SUCCESSFUL;
|
|
}
|