/* * mknod() * * This routine is not defined in the POSIX 1003.1b standard but is * commonly supported on most UNIX and POSIX systems. It is the * foundation for creating file system objects. * * COPYRIGHT (c) 1989-1999. * 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.rtems.com/license/LICENSE. * * $Id$ */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include #include int mknod( const char *pathname, mode_t mode, dev_t dev ) { rtems_filesystem_location_info_t temp_loc; int i; const char *name_start; int result; /* * The file type is field within the mode. Check we have a sane mode set. */ switch (mode & S_IFMT) { case S_IFDIR: case S_IFCHR: case S_IFBLK: case S_IFREG: case S_IFIFO: break; default: rtems_set_errno_and_return_minus_one( EINVAL ); } rtems_filesystem_get_start_loc( pathname, &i, &temp_loc ); result = (*temp_loc.ops->evalformake_h)( &pathname[i], &temp_loc, &name_start ); if ( result != 0 ) return -1; result = (*temp_loc.ops->mknod_h)( name_start, mode, dev, &temp_loc ); rtems_filesystem_freenode( &temp_loc ); return result; }