1 /*
2 * Copyright (c) 2007 Vreixo Formoso
3 *
4 * This file is part of the libisofs project; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License version 2
6 * or later as published by the Free Software Foundation.
7 * See COPYING file for details.
8 */
9
10 #ifdef HAVE_CONFIG_H
11 #include "../config.h"
12 #endif
13
14 #include "fsource.h"
15 #include <stdlib.h>
16
17 /**
18 * Values belong 1000 are reserved for libisofs usage
19 */
20 unsigned int iso_fs_global_id = 1000;
21
iso_file_source_ref(IsoFileSource * src)22 void iso_file_source_ref(IsoFileSource *src)
23 {
24 ++src->refcount;
25 }
26
iso_file_source_unref(IsoFileSource * src)27 void iso_file_source_unref(IsoFileSource *src)
28 {
29 if (--src->refcount == 0) {
30 src->class->free(src);
31 free(src);
32 }
33 }
34
iso_filesystem_ref(IsoFilesystem * fs)35 void iso_filesystem_ref(IsoFilesystem *fs)
36 {
37 ++fs->refcount;
38 }
39
iso_filesystem_unref(IsoFilesystem * fs)40 void iso_filesystem_unref(IsoFilesystem *fs)
41 {
42 if (--fs->refcount == 0) {
43 fs->free(fs);
44 free(fs);
45 }
46 }
47
48 /*
49 * this are just helpers to invoque methods in class
50 */
51
52 inline
iso_file_source_get_path(IsoFileSource * src)53 char* iso_file_source_get_path(IsoFileSource *src)
54 {
55 return src->class->get_path(src);
56 }
57
58 inline
iso_file_source_get_name(IsoFileSource * src)59 char* iso_file_source_get_name(IsoFileSource *src)
60 {
61 return src->class->get_name(src);
62 }
63
64 inline
iso_file_source_lstat(IsoFileSource * src,struct stat * info)65 int iso_file_source_lstat(IsoFileSource *src, struct stat *info)
66 {
67 return src->class->lstat(src, info);
68 }
69
70 inline
iso_file_source_access(IsoFileSource * src)71 int iso_file_source_access(IsoFileSource *src)
72 {
73 return src->class->access(src);
74 }
75
76 inline
iso_file_source_stat(IsoFileSource * src,struct stat * info)77 int iso_file_source_stat(IsoFileSource *src, struct stat *info)
78 {
79 return src->class->stat(src, info);
80 }
81
82 inline
iso_file_source_open(IsoFileSource * src)83 int iso_file_source_open(IsoFileSource *src)
84 {
85 return src->class->open(src);
86 }
87
88 inline
iso_file_source_close(IsoFileSource * src)89 int iso_file_source_close(IsoFileSource *src)
90 {
91 return src->class->close(src);
92 }
93
94 inline
iso_file_source_read(IsoFileSource * src,void * buf,size_t count)95 int iso_file_source_read(IsoFileSource *src, void *buf, size_t count)
96 {
97 return src->class->read(src, buf, count);
98 }
99
100 inline
iso_file_source_lseek(IsoFileSource * src,off_t offset,int flag)101 off_t iso_file_source_lseek(IsoFileSource *src, off_t offset, int flag)
102 {
103 return src->class->lseek(src, offset, flag);
104 }
105
106 inline
iso_file_source_readdir(IsoFileSource * src,IsoFileSource ** child)107 int iso_file_source_readdir(IsoFileSource *src, IsoFileSource **child)
108 {
109 return src->class->readdir(src, child);
110 }
111
112 inline
iso_file_source_readlink(IsoFileSource * src,char * buf,size_t bufsiz)113 int iso_file_source_readlink(IsoFileSource *src, char *buf, size_t bufsiz)
114 {
115 return src->class->readlink(src, buf, bufsiz);
116 }
117
118 inline
iso_file_source_get_filesystem(IsoFileSource * src)119 IsoFilesystem* iso_file_source_get_filesystem(IsoFileSource *src)
120 {
121 return src->class->get_filesystem(src);
122 }
123
124
125 inline
iso_file_source_get_aa_string(IsoFileSource * src,unsigned char ** aa_string,int flag)126 int iso_file_source_get_aa_string(IsoFileSource *src,
127 unsigned char **aa_string, int flag)
128 {
129 if (src->class->version < 1) {
130 *aa_string = NULL;
131 return 1;
132 }
133 return src->class->get_aa_string(src, aa_string, flag);
134 }
135
136