Mercurial > audlegacy-plugins
annotate src/stdio/stdio.c @ 984:df7b09989aee trunk
[svn] - We got a new plugin, captain!
- FileWriter is the ultimate plugin for dumping audio to files. It
should be the successor of Disk Writer and Out-Lame, as it supports the
same output formats as those (WAVE and MP3). The main advantage of
having only one file dumping plugin for many formats is that not every
plugin has to think about file handling (where to write files to, how to
call them etc.) that much anymore.
- FileWriter is also very extensible - adding new output formats should
be very easy.
| author | mf0102 |
|---|---|
| date | Mon, 30 Apr 2007 14:16:32 -0700 |
| parents | f1642ee1115c |
| children | 183d03932c9e |
| rev | line source |
|---|---|
| 306 | 1 /* Audacious |
| 2 * Copyright (c) 2006 William Pitcock | |
| 3 * | |
| 4 * This program is free software; you can redistribute it and/or modify | |
| 5 * it under the terms of the GNU General Public License as published by | |
| 6 * the Free Software Foundation; either version 2 of the License, or | |
| 7 * (at your option) any later version. | |
| 8 * | |
| 9 * This program is distributed in the hope that it will be useful, | |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 * GNU General Public License for more details. | |
| 13 * | |
| 14 * You should have received a copy of the GNU General Public License | |
| 15 * along with this program; if not, write to the Free Software | |
| 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
| 17 */ | |
| 18 | |
| 19 #include <audacious/vfs.h> | |
| 20 #include <audacious/plugin.h> | |
| 21 #include <stdio.h> | |
| 22 | |
| 23 #include <unistd.h> | |
| 24 #include <sys/stat.h> | |
| 25 #include <sys/types.h> | |
| 26 | |
|
500
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
27 #include <string.h> |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
28 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
29 static gchar * |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
30 vfs_stdio_urldecode_path(const gchar * encoded_path) |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
31 { |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
32 const gchar *cur, *ext; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
33 gchar *path, *tmp; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
34 gint realchar; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
35 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
36 if (!encoded_path) |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
37 return NULL; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
38 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
39 if (!str_has_prefix_nocase(encoded_path, "file:")) |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
40 return NULL; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
41 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
42 cur = encoded_path + 5; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
43 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
44 if (str_has_prefix_nocase(cur, "//localhost")) |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
45 cur += 11; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
46 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
47 if (*cur == '/') |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
48 while (cur[1] == '/') |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
49 cur++; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
50 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
51 tmp = g_malloc0(strlen(cur) + 1); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
52 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
53 while ((ext = strchr(cur, '%')) != NULL) { |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
54 strncat(tmp, cur, ext - cur); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
55 ext++; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
56 cur = ext + 2; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
57 if (!sscanf(ext, "%2x", &realchar)) { |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
58 /* Assume it is a literal '%'. Several file |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
59 * managers send unencoded file: urls on drag |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
60 * and drop. */ |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
61 realchar = '%'; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
62 cur -= 2; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
63 } |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
64 tmp[strlen(tmp)] = realchar; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
65 } |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
66 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
67 path = g_strconcat(tmp, cur, NULL); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
68 g_free(tmp); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
69 return path; |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
70 } |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
71 |
| 306 | 72 VFSFile * |
| 73 stdio_vfs_fopen_impl(const gchar * path, | |
| 74 const gchar * mode) | |
| 75 { | |
| 76 VFSFile *file; | |
|
500
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
77 gchar *decpath; |
| 306 | 78 |
| 79 if (!path || !mode) | |
| 80 return NULL; | |
| 81 | |
|
500
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
82 decpath = vfs_stdio_urldecode_path(path); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
83 |
| 306 | 84 file = g_new(VFSFile, 1); |
| 85 | |
|
500
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
86 file->handle = fopen(decpath != NULL ? decpath : path, mode); |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
87 |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
88 if (decpath != NULL) |
|
1d81ea250dce
[svn] - URIs are now passed naked instead of mangled by the VFS subsystem.
nenolod
parents:
326
diff
changeset
|
89 g_free(decpath); |
| 306 | 90 |
| 91 if (file->handle == NULL) { | |
| 92 g_free(file); | |
| 93 file = NULL; | |
| 94 } | |
| 95 | |
| 96 return file; | |
| 97 } | |
| 98 | |
| 99 gint | |
| 100 stdio_vfs_fclose_impl(VFSFile * file) | |
| 101 { | |
| 102 gint ret = 0; | |
| 103 | |
| 104 if (file == NULL) | |
| 105 return -1; | |
| 106 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
107 if (file->handle) |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
108 { |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
109 FILE *handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
110 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
111 if (fclose(handle) != 0) |
| 306 | 112 ret = -1; |
| 113 } | |
| 114 | |
| 115 return ret; | |
| 116 } | |
| 117 | |
| 118 size_t | |
| 119 stdio_vfs_fread_impl(gpointer ptr, | |
| 120 size_t size, | |
| 121 size_t nmemb, | |
| 122 VFSFile * file) | |
| 123 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
124 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
125 |
| 306 | 126 if (file == NULL) |
| 127 return 0; | |
| 128 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
129 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
130 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
131 return fread(ptr, size, nmemb, handle); |
| 306 | 132 } |
| 133 | |
| 134 size_t | |
| 135 stdio_vfs_fwrite_impl(gconstpointer ptr, | |
| 136 size_t size, | |
| 137 size_t nmemb, | |
| 138 VFSFile * file) | |
| 139 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
140 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
141 |
| 306 | 142 if (file == NULL) |
| 143 return 0; | |
| 144 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
145 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
146 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
147 return fwrite(ptr, size, nmemb, handle); |
| 306 | 148 } |
| 149 | |
| 150 gint | |
| 151 stdio_vfs_getc_impl(VFSFile *stream) | |
| 152 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
153 FILE *handle = (FILE *) stream->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
154 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
155 return getc( handle ); |
| 306 | 156 } |
| 157 | |
| 158 gint | |
| 159 stdio_vfs_ungetc_impl(gint c, VFSFile *stream) | |
| 160 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
161 FILE *handle = (FILE *) stream->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
162 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
163 return ungetc( c , handle ); |
| 306 | 164 } |
| 165 | |
| 166 gint | |
| 167 stdio_vfs_fseek_impl(VFSFile * file, | |
| 168 glong offset, | |
| 169 gint whence) | |
| 170 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
171 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
172 |
| 306 | 173 if (file == NULL) |
| 174 return 0; | |
| 175 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
176 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
177 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
178 return fseek(handle, offset, whence); |
| 306 | 179 } |
| 180 | |
| 181 void | |
| 182 stdio_vfs_rewind_impl(VFSFile * file) | |
| 183 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
184 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
185 |
| 306 | 186 if (file == NULL) |
| 187 return; | |
| 188 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
189 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
190 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
191 rewind(handle); |
| 306 | 192 } |
| 193 | |
| 194 glong | |
| 195 stdio_vfs_ftell_impl(VFSFile * file) | |
| 196 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
197 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
198 |
| 306 | 199 if (file == NULL) |
| 200 return 0; | |
| 201 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
202 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
203 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
204 return ftell(handle); |
| 306 | 205 } |
| 206 | |
| 207 gboolean | |
| 208 stdio_vfs_feof_impl(VFSFile * file) | |
| 209 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
210 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
211 |
| 306 | 212 if (file == NULL) |
| 213 return FALSE; | |
| 214 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
215 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
216 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
217 return (gboolean) feof(handle); |
| 306 | 218 } |
| 219 | |
| 220 gint | |
| 221 stdio_vfs_truncate_impl(VFSFile * file, glong size) | |
| 222 { | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
223 FILE *handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
224 |
| 306 | 225 if (file == NULL) |
| 226 return -1; | |
| 227 | |
|
326
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
228 handle = (FILE *) file->handle; |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
229 |
|
90a843d02970
[svn] - some OSes use macros for some f*() functions, therefore make sure we
nenolod
parents:
306
diff
changeset
|
230 return ftruncate(fileno(handle), size); |
| 306 | 231 } |
| 232 | |
| 965 | 233 off_t |
| 234 stdio_vfs_fsize_impl(VFSFile * file) | |
| 235 { | |
| 236 FILE *handle; | |
| 237 struct stat s; | |
| 238 | |
| 239 if (file == NULL) | |
| 240 return -1; | |
| 241 | |
| 242 handle = (FILE *) file->handle; | |
| 243 | |
| 244 if (-1 == fstat(fileno(handle), &s)) | |
| 245 return -1; | |
| 246 | |
| 247 return s.st_size; | |
| 248 } | |
| 249 | |
| 306 | 250 VFSConstructor file_const = { |
| 251 "file://", | |
| 252 stdio_vfs_fopen_impl, | |
| 253 stdio_vfs_fclose_impl, | |
| 254 stdio_vfs_fread_impl, | |
| 255 stdio_vfs_fwrite_impl, | |
| 256 stdio_vfs_getc_impl, | |
| 257 stdio_vfs_ungetc_impl, | |
| 258 stdio_vfs_fseek_impl, | |
| 259 stdio_vfs_rewind_impl, | |
| 260 stdio_vfs_ftell_impl, | |
| 261 stdio_vfs_feof_impl, | |
| 965 | 262 stdio_vfs_truncate_impl, |
| 263 stdio_vfs_fsize_impl | |
| 306 | 264 }; |
| 265 | |
| 266 VFSConstructor default_const = { | |
| 267 "/", | |
| 268 stdio_vfs_fopen_impl, | |
| 269 stdio_vfs_fclose_impl, | |
| 270 stdio_vfs_fread_impl, | |
| 271 stdio_vfs_fwrite_impl, | |
| 272 stdio_vfs_getc_impl, | |
| 273 stdio_vfs_ungetc_impl, | |
| 274 stdio_vfs_fseek_impl, | |
| 275 stdio_vfs_rewind_impl, | |
| 276 stdio_vfs_ftell_impl, | |
| 277 stdio_vfs_feof_impl, | |
| 965 | 278 stdio_vfs_truncate_impl, |
| 279 stdio_vfs_fsize_impl | |
| 306 | 280 }; |
| 281 | |
| 282 static void init(void) | |
| 283 { | |
| 284 vfs_register_transport(&default_const); | |
| 285 vfs_register_transport(&file_const); | |
| 286 } | |
| 287 | |
| 288 static void cleanup(void) | |
| 289 { | |
| 290 #if 0 | |
| 291 vfs_unregister_transport(&default_const); | |
| 292 vfs_unregister_transport(&file_const); | |
| 293 #endif | |
| 294 } | |
| 295 | |
| 296 LowlevelPlugin llp_stdio = { | |
| 297 NULL, | |
| 298 NULL, | |
| 299 "file:// URI Transport", | |
| 300 init, | |
| 301 cleanup, | |
| 302 }; | |
| 303 | |
| 304 LowlevelPlugin *get_lplugin_info(void) | |
| 305 { | |
| 306 return &llp_stdio; | |
| 307 } | |
| 308 |
