busybox/e2fsprogs/old_e2fsprogs/ext2fs/io_manager.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * io_manager.c --- the I/O manager abstraction
   4 */
   5
   6#include <stdio.h>
   7#include <string.h>
   8#if HAVE_UNISTD_H
   9#include <unistd.h>
  10#endif
  11#include <fcntl.h>
  12#include <time.h>
  13#if HAVE_SYS_STAT_H
  14#include <sys/stat.h>
  15#endif
  16#if HAVE_SYS_TYPES_H
  17#include <sys/types.h>
  18#endif
  19
  20#include "ext2_fs.h"
  21#include "ext2fs.h"
  22
  23errcode_t io_channel_set_options(io_channel channel, const char *opts)
  24{
  25        errcode_t retval = 0;
  26        char *next, *ptr, *options, *arg;
  27
  28        EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
  29
  30        if (!opts)
  31                return 0;
  32
  33        if (!channel->manager->set_option)
  34                return EXT2_ET_INVALID_ARGUMENT;
  35
  36        options = malloc(strlen(opts)+1);
  37        if (!options)
  38                return EXT2_ET_NO_MEMORY;
  39        strcpy(options, opts);
  40        ptr = options;
  41
  42        while (ptr && *ptr) {
  43                next = strchr(ptr, '&');
  44                if (next)
  45                        *next++ = 0;
  46
  47                arg = strchr(ptr, '=');
  48                if (arg)
  49                        *arg++ = 0;
  50
  51                retval = (channel->manager->set_option)(channel, ptr, arg);
  52                if (retval)
  53                        break;
  54                ptr = next;
  55        }
  56        free(options);
  57        return retval;
  58}
  59
  60errcode_t io_channel_write_byte(io_channel channel, unsigned long offset,
  61                                int count, const void *data)
  62{
  63        EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
  64
  65        if (channel->manager->write_byte)
  66                return channel->manager->write_byte(channel, offset,
  67                                                    count, data);
  68
  69        return EXT2_ET_UNIMPLEMENTED;
  70}
  71