diff options
Diffstat (limited to 'contrib/syslinux-4.02/com32/lib/fopendev.c')
-rw-r--r-- | contrib/syslinux-4.02/com32/lib/fopendev.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/com32/lib/fopendev.c b/contrib/syslinux-4.02/com32/lib/fopendev.c new file mode 100644 index 0000000..cd2f00f --- /dev/null +++ b/contrib/syslinux-4.02/com32/lib/fopendev.c @@ -0,0 +1,43 @@ +/* + * fopendev.c + */ + +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> + +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); +} |