annotate libaudacious/vfs.c @ 2032:7aed5cf10141 trunk

[svn] - document the VFS layer.
author nenolod
date Sun, 03 Dec 2006 22:35:18 -0800
parents ebce0d5efac1
children c43fb0845b71
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
1 /* Audacious
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
2 * Copyright (c) 2006 William Pitcock
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
3 *
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
4 * This program is free software; you can redistribute it and/or modify
1460
411b4aaf928b [svn] fine
nemo
parents: 1459
diff changeset
5 * it under the terms of the GNU General Public License as published by
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
7 * (at your option) any later version.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
8 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
12 * GNU General Public License for more details.
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
13 *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
15 * along with this program; if not, write to the Free Software
1459
705d4c089fce [svn] Fix postal code.
chainsaw
parents: 1458
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
17 */
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
18
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
19 #include "vfs.h"
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
20 #include <stdio.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
21
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
22 #include <unistd.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
23 #include <sys/stat.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
24 #include <sys/types.h>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
25
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
26 static GList *vfs_transports = NULL;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
27
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
28 #ifdef VFS_DEBUG
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
29 # define DBG(x, args...) g_print(x, ## args);
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
30 #else
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
31 # define DBG(x, args...)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
32 #endif
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
33
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
34 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
35 * vfs_register_transport(VFSConstructor *vtable)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
36 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
37 * Registers a VFSConstructor vtable with the VFS system.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
38 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
39 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
40 * - a VFSConstructor object
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
41 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
42 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
43 * - TRUE on success, FALSE on failure.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
44 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
45 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
46 * - none
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
47 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
48 gboolean
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
49 vfs_register_transport(VFSConstructor *vtable)
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
50 {
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
51 vfs_transports = g_list_append(vfs_transports, vtable);
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
52
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
53 return TRUE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
54 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
55
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
56 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
57 * vfs_fopen(const gchar * path, const gchar * mode)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
58 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
59 * Opens a stream from a VFS transport using a VFSConstructor.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
60 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
61 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
62 * - path or URI to open
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
63 * - preferred access privileges (not guaranteed)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
64 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
65 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
66 * - on success, a VFSFile object representing the VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
67 * - on failure, nothing
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
68 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
69 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
70 * - file descriptors are opened or more memory is allocated.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
71 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
72 VFSFile *
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
73 vfs_fopen(const gchar * path,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
74 const gchar * mode)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
75 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
76 VFSFile *file;
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
77 gchar **vec;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
78 VFSConstructor *vtable = NULL;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
79 GList *node;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
80
550
adee87ebe853 [svn] Sanity checking inside vfs_() functions.
nenolod
parents: 0
diff changeset
81 if (!path || !mode)
adee87ebe853 [svn] Sanity checking inside vfs_() functions.
nenolod
parents: 0
diff changeset
82 return NULL;
adee87ebe853 [svn] Sanity checking inside vfs_() functions.
nenolod
parents: 0
diff changeset
83
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
84 vec = g_strsplit(path, "://", 2);
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
85
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
86 /* special case: no transport specified, look for the "/" transport */
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
87 if (vec[1] == NULL)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
88 {
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
89 for (node = vfs_transports; node != NULL; node = g_list_next(node))
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
90 {
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
91 vtable = (VFSConstructor *) node->data;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
92
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
93 if (*vtable->uri_id == '/')
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
94 break;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
95 }
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
96 }
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
97 else
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
98 {
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
99 for (node = vfs_transports; node != NULL; node = g_list_next(node))
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
100 {
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
101 vtable = (VFSConstructor *) node->data;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
102
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
103 if (!g_strcasecmp(vec[0], vtable->uri_id))
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
104 break;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
105 }
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
106 }
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
107
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
108 /* no transport vtable has been registered, bail. */
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
109 if (vtable == NULL)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
110 {
2031
ebce0d5efac1 [svn] - don't leak the split URI vector after doing the vtable lookup
nenolod
parents: 1999
diff changeset
111 g_strfreev(vec);
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
112 return NULL;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
113 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
114
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
115 file = vtable->vfs_fopen_impl(vec[1] ? vec[1] : vec[0], mode);
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
116
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
117 if (file == NULL)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
118 {
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
119 g_strfreev(vec);
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
120 return NULL;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
121 }
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
122
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
123 file->uri = g_strdup(path);
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
124 file->base = vtable;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
125
2031
ebce0d5efac1 [svn] - don't leak the split URI vector after doing the vtable lookup
nenolod
parents: 1999
diff changeset
126 g_strfreev(vec);
ebce0d5efac1 [svn] - don't leak the split URI vector after doing the vtable lookup
nenolod
parents: 1999
diff changeset
127
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
128 return file;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
129 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
130
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
131 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
132 * vfs_fclose(VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
133 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
134 * Closes a VFS stream and destroys a VFSFile object.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
135 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
136 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
137 * - a VFSFile object to destroy
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
138 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
139 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
140 * - -1 on success, otherwise 0
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
141 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
142 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
143 * - a file description is closed or allocated memory is freed
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
144 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
145 gint
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
146 vfs_fclose(VFSFile * file)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
147 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
148 gint ret = 0;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
149
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
150 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
151 return -1;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
152
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
153 if (file->base->vfs_fclose_impl(file) != 0)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
154 ret = -1;
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
155
1999
dcea7c329ad6 [svn] - don't memory leak the uri
nenolod
parents: 1998
diff changeset
156 if (file->uri != NULL)
dcea7c329ad6 [svn] - don't memory leak the uri
nenolod
parents: 1998
diff changeset
157 g_free(file->uri);
dcea7c329ad6 [svn] - don't memory leak the uri
nenolod
parents: 1998
diff changeset
158
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
159 g_free(file);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
160
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
161 return ret;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
162 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
163
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
164 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
165 * vfs_fread(gpointer ptr, size_t size, size_t nmemb, VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
166 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
167 * Reads from a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
168 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
169 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
170 * - pointer to destination buffer
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
171 * - size of each element to read
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
172 * - number of elements to read
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
173 * - VFSFile object that represents the VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
174 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
175 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
176 * - on success, the amount of elements successfully read
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
177 * - on failure, -1
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
178 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
179 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
180 * - on nonblocking sources, the socket may be unavailable after
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
181 * this call.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
182 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
183 size_t
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
184 vfs_fread(gpointer ptr,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
185 size_t size,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
186 size_t nmemb,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
187 VFSFile * file)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
188 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
189 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
190 return 0;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
191
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
192 return file->base->vfs_fread_impl(ptr, size, nmemb, file);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
193 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
194
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
195 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
196 * vfs_fwrite(gconstpointer ptr, size_t size, size_t nmemb, VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
197 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
198 * Writes to a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
199 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
200 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
201 * - const pointer to source buffer
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
202 * - size of each element to write
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
203 * - number of elements to write
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
204 * - VFSFile object that represents the VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
205 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
206 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
207 * - on success, the amount of elements successfully written
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
208 * - on failure, -1
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
209 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
210 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
211 * - on nonblocking sources, the socket may be unavailable after
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
212 * this call.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
213 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
214 size_t
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
215 vfs_fwrite(gconstpointer ptr,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
216 size_t size,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
217 size_t nmemb,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
218 VFSFile * file)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
219 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
220 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
221 return 0;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
222
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
223 return file->base->vfs_fwrite_impl(ptr, size, nmemb, file);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
224 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
225
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
226 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
227 * vfs_getc(VFSFile *stream)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
228 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
229 * Reads a character from a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
230 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
231 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
232 * - a VFSFile object representing a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
233 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
234 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
235 * - on success, a character
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
236 * - on failure, -1
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
237 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
238 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
239 * - on nonblocking sources, the socket may be unavailable after
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
240 * this call.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
241 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
242 gint
1683
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
243 vfs_getc(VFSFile *stream)
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
244 {
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
245 if (stream == NULL)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
246 return -1;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
247
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
248 return stream->base->vfs_getc_impl(stream);
1683
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
249 }
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
250
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
251 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
252 * vfs_ungetc(gint c, VFSFile *stream)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
253 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
254 * Pushes a character back to the VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
255 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
256 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
257 * - a character to push back
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
258 * - a VFSFile object representing a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
259 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
260 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
261 * - on success, 0
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
262 * - on failure, -1
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
263 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
264 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
265 * - on nonblocking sources, the socket may be unavailable after
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
266 * this call.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
267 */
1683
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
268 gint
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
269 vfs_ungetc(gint c, VFSFile *stream)
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
270 {
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
271 if (stream == NULL)
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
272 return -1;
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
273
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
274 return stream->base->vfs_ungetc_impl(c, stream);
1683
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
275 }
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
276
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
277 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
278 * vfs_fseek(VFSFile * file, gint offset, gint whence)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
279 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
280 * Seeks through a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
281 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
282 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
283 * - a VFSFile object which represents a VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
284 * - the offset to seek
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
285 * - whether or not the seek is absolute or non-absolute
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
286 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
287 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
288 * - on success, 1
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
289 * - on failure, 0
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
290 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
291 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
292 * - on nonblocking sources, this is not guaranteed to work
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
293 */
1683
e9c24e35bd76 [svn] - File stream API for audacious vfs; uses real getc/ungetc functions for vfs_stdio and emulated functions for vfs_gnome
giacomo
parents: 1460
diff changeset
294 gint
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
295 vfs_fseek(VFSFile * file,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
296 glong offset,
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
297 gint whence)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
298 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
299 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
300 return 0;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
301
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
302 return file->base->vfs_fseek_impl(file, offset, whence);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
303 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
304
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
305 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
306 * vfs_rewind(VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
307 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
308 * Rewinds a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
309 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
310 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
311 * - a VFSFile object which represents a VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
312 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
313 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
314 * - nothing
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
315 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
316 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
317 * - on nonblocking sources, this is not guaranteed to work
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
318 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
319 void
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
320 vfs_rewind(VFSFile * file)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
321 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
322 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
323 return;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
324
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
325 file->base->vfs_rewind_impl(file);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
326 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
327
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
328 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
329 * vfs_ftell(VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
330 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
331 * Returns the position of a VFS stream.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
332 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
333 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
334 * - a VFSFile object which represents a VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
335 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
336 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
337 * - on failure, -1.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
338 * - on success, the stream's position
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
339 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
340 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
341 * - on nonblocking sources, this is not guaranteed to work
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
342 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
343 glong
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
344 vfs_ftell(VFSFile * file)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
345 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
346 if (file == NULL)
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
347 return -1;
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
348
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
349 return file->base->vfs_ftell_impl(file);
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
350 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
351
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
352 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
353 * vfs_feof(VFSFile * file)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
354 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
355 * Returns whether or not the VFS stream has reached EOF.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
356 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
357 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
358 * - a VFSFile object which represents a VFS stream
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
359 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
360 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
361 * - on failure, FALSE.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
362 * - on success, whether or not the VFS stream is at EOF.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
363 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
364 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
365 * - none
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
366 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
367 gboolean
811
86ca43d8a845 [svn] - implement vfs_feof() and vfs_ftell() and update the scrobbler plugin to reflect that,
nenolod
parents: 550
diff changeset
368 vfs_feof(VFSFile * file)
86ca43d8a845 [svn] - implement vfs_feof() and vfs_ftell() and update the scrobbler plugin to reflect that,
nenolod
parents: 550
diff changeset
369 {
821
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
370 if (file == NULL)
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
371 return FALSE;
a17888ed66a8 [svn] - safety checks
nenolod
parents: 811
diff changeset
372
1997
93c59698f5fd [svn] - NewVFS lives ;)
nenolod
parents: 1976
diff changeset
373 return (gboolean) file->base->vfs_feof_impl(file);
811
86ca43d8a845 [svn] - implement vfs_feof() and vfs_ftell() and update the scrobbler plugin to reflect that,
nenolod
parents: 550
diff changeset
374 }
86ca43d8a845 [svn] - implement vfs_feof() and vfs_ftell() and update the scrobbler plugin to reflect that,
nenolod
parents: 550
diff changeset
375
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
376 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
377 * vfs_truncate(VFSFile * file, glong size)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
378 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
379 * Truncates a VFS stream to a certain size.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
380 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
381 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
382 * - a VFS stream to truncate
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
383 * - length to truncate at
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
384 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
385 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
386 * - -1 on failure
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
387 * - 0 on success
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
388 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
389 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
390 * - this is not guaranteed to work on non-blocking
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
391 * sources
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
392 */
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
393 gint
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
394 vfs_truncate(VFSFile * file, glong size)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
395 {
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
396 if (file == NULL)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
397 return -1;
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
398
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
399 return file->base->vfs_truncate_impl(file, size);
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
400 }
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
401
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
402 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
403 * vfs_file_test(const gchar * path, GFileTest test)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
404 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
405 * Wrapper for g_file_test().
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
406 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
407 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
408 * - a path to test
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
409 * - a GFileTest to run
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
410 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
411 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
412 * - the result of g_file_test().
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
413 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
414 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
415 * - g_file_test() is called.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
416 */
811
86ca43d8a845 [svn] - implement vfs_feof() and vfs_ftell() and update the scrobbler plugin to reflect that,
nenolod
parents: 550
diff changeset
417 gboolean
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
418 vfs_file_test(const gchar * path, GFileTest test)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
419 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
420 return g_file_test(path, test);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
421 }
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
422
2032
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
423 /*
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
424 * vfs_is_writable(const gchar * path)
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
425 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
426 * Tests if a file is writable.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
427 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
428 * Inputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
429 * - a path to test
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
430 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
431 * Outputs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
432 * - FALSE if the file is not writable
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
433 * - TRUE if the file is writable
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
434 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
435 * Side Effects:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
436 * - stat() is called.
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
437 *
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
438 * Bugs:
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
439 * - stat() is not considered part of stdio
7aed5cf10141 [svn] - document the VFS layer.
nenolod
parents: 2031
diff changeset
440 */
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
441 gboolean
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
442 vfs_is_writeable(const gchar * path)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
443 {
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
444 struct stat info;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
445
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
446 if (stat(path, &info) == -1)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
447 return FALSE;
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
448
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
449 return (info.st_mode & S_IWUSR);
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
450 }