/* * fopendev.c */ #include #include #include FILE *fopendev(const struct dev_info *dev, const char *mode) { int flags = O_RDONLY; int plus = 0; int fd; while ( *mode ) { switch ( *mode ) { case 'r': flags = O_RDONLY; break; case 'w': flags = O_WRONLY|O_CREAT|O_TRUNC; break; case 'a': flags = O_WRONLY|O_CREAT|O_APPEND; break; case '+': plus = 1; break; } mode++; } if ( plus ) { flags = (flags & ~(O_RDONLY|O_WRONLY)) | O_RDWR; } fd = opendev(file, flags); if ( fd < 0 ) return NULL; else return fdopen(fd, mode); }