diff options
Diffstat (limited to 'src/archive')
-rw-r--r-- | src/archive/iso9660_archive_plugin.c (renamed from src/archive/iso_plugin.c) | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/src/archive/iso_plugin.c b/src/archive/iso9660_archive_plugin.c index a2880ba86..7e1901623 100644 --- a/src/archive/iso_plugin.c +++ b/src/archive/iso9660_archive_plugin.c @@ -33,16 +33,16 @@ #define CEILING(x, y) ((x+(y-1))/y) -typedef struct { +struct iso9660_archive_file { iso9660_t *iso; iso9660_stat_t *statbuf; size_t cur_ofs; size_t max_blocks; GSList *list; GSList *iter; -} iso_context; +}; -static const struct input_plugin iso_inputplugin; +static const struct input_plugin iso9660_input_plugin; static inline GQuark iso9660_quark(void) @@ -53,7 +53,7 @@ iso9660_quark(void) /* archive open && listing routine */ static void -listdir_recur(const char *psz_path, iso_context *context) +listdir_recur(const char *psz_path, struct iso9660_archive_file *context) { iso9660_t *iso = context->iso; CdioList_t *entlist; @@ -87,9 +87,10 @@ listdir_recur(const char *psz_path, iso_context *context) } static struct archive_file * -iso_open(char * pathname) +iso9660_archive_open(char * pathname) { - iso_context *context = g_malloc(sizeof(iso_context)); + struct iso9660_archive_file *context = + g_new(struct iso9660_archive_file, 1); context->list = NULL; @@ -106,17 +107,21 @@ iso_open(char * pathname) } static void -iso_scan_reset(struct archive_file *file) +iso9660_archive_scan_reset(struct archive_file *file) { - iso_context *context = (iso_context *) file; + struct iso9660_archive_file *context = + (struct iso9660_archive_file *)file; + //reset iterator context->iter = context->list; } static char * -iso_scan_next(struct archive_file *file) +iso9660_archive_scan_next(struct archive_file *file) { - iso_context *context = (iso_context *) file; + struct iso9660_archive_file *context = + (struct iso9660_archive_file *)file; + char *data = NULL; if (context->iter != NULL) { ///fetch data and goto next @@ -127,9 +132,11 @@ iso_scan_next(struct archive_file *file) } static void -iso_close(struct archive_file *file) +iso9660_archive_close(struct archive_file *file) { - iso_context *context = (iso_context *) file; + struct iso9660_archive_file *context = + (struct iso9660_archive_file *)file; + GSList *tmp; if (context->list) { //free list @@ -146,12 +153,14 @@ iso_close(struct archive_file *file) /* single archive handling */ static bool -iso_open_stream(struct archive_file *file, struct input_stream *is, +iso9660_archive_open_stream(struct archive_file *file, struct input_stream *is, const char *pathname, GError **error_r) { - iso_context *context = (iso_context *) file; + struct iso9660_archive_file *context = + (struct iso9660_archive_file *)file; + //setup file ops - is->plugin = &iso_inputplugin; + is->plugin = &iso9660_input_plugin; //insert back reference is->data = context; //we are not seekable @@ -170,19 +179,19 @@ iso_open_stream(struct archive_file *file, struct input_stream *is, } static void -iso_is_close(struct input_stream *is) +iso9660_input_close(struct input_stream *is) { - iso_context *context = (iso_context *) is->data; + struct iso9660_archive_file *context = is->data; g_free(context->statbuf); - iso_close((struct archive_file *)context); + iso9660_archive_close((struct archive_file *)context); } static size_t -iso_is_read(struct input_stream *is, void *ptr, size_t size, GError **error_r) +iso9660_input_read(struct input_stream *is, void *ptr, size_t size, GError **error_r) { - iso_context *context = (iso_context *) is->data; + struct iso9660_archive_file *context = (struct iso9660_archive_file *) is->data; int toread, readed = 0; int no_blocks, cur_block; size_t left_bytes = context->statbuf->size - context->cur_ofs; @@ -218,31 +227,32 @@ iso_is_read(struct input_stream *is, void *ptr, size_t size, GError **error_r) } static bool -iso_is_eof(struct input_stream *is) +iso9660_input_eof(struct input_stream *is) { - iso_context *context = (iso_context *) is->data; + struct iso9660_archive_file *context = is->data; + return (context->cur_ofs == context->statbuf->size); } /* exported structures */ -static const char *const iso_extensions[] = { +static const char *const iso9660_archive_extensions[] = { "iso", NULL }; -static const struct input_plugin iso_inputplugin = { - .close = iso_is_close, - .read = iso_is_read, - .eof = iso_is_eof, +static const struct input_plugin iso9660_input_plugin = { + .close = iso9660_input_close, + .read = iso9660_input_read, + .eof = iso9660_input_eof, }; -const struct archive_plugin iso_plugin = { +const struct archive_plugin iso9660_archive_plugin = { .name = "iso", - .open = iso_open, - .scan_reset = iso_scan_reset, - .scan_next = iso_scan_next, - .open_stream = iso_open_stream, - .close = iso_close, - .suffixes = iso_extensions + .open = iso9660_archive_open, + .scan_reset = iso9660_archive_scan_reset, + .scan_next = iso9660_archive_scan_next, + .open_stream = iso9660_archive_open_stream, + .close = iso9660_archive_close, + .suffixes = iso9660_archive_extensions }; |