annotate src/audacious/vfs_buffered_file.c @ 2647:2afc8e31a378 trunk

[svn] - this probably fixes bug #858
author nenolod
date Tue, 03 Apr 2007 11:54:52 -0700
parents 06e4bbdb6c45
children ac22b2cb6013
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
1 /* Audacious
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
2 * Copyright (c) 2006-2007 William Pitcock
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
3 *
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
6 * the Free Software Foundation; under version 2 of the License.
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
7 *
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
8 * This program is distributed in the hope that it will be useful,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
11 * GNU General Public License for more details.
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
12 *
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
13 * You should have received a copy of the GNU General Public License
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
14 * along with this program; if not, write to the Free Software
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
16 * 02110-1301, USA.
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
17 */
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
18
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
19 #include <glib.h>
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
20 #include <string.h>
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
21 #include "vfs.h"
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
22 #include "vfs_buffer.h"
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
23 #include "vfs_buffered_file.h"
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
24
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
25 VFSFile *
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
26 buffered_file_vfs_fopen_impl(const gchar * path,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
27 const gchar * mode)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
28 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
29 return NULL;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
30 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
31
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
32 gint
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
33 buffered_file_vfs_fclose_impl(VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
34 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
35 g_return_val_if_fail(file != NULL, -1);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
36
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
37 if (file->handle)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
38 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
39 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
40
2589
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
41 if (handle->fd != NULL)
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
42 vfs_fclose(handle->fd);
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
43
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
44 vfs_fclose(handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
45 g_free(handle->mem);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
46 g_free(handle);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
47 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
48
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
49 return 0;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
50 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
51
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
52 size_t
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
53 buffered_file_vfs_fread_impl(gpointer i_ptr,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
54 size_t size,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
55 size_t nmemb,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
56 VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
57 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
58 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
59
2372
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
60 /* is this request within the buffered area, or should we switch to
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
61 * an FD? --nenolod
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
62 */
2647
2afc8e31a378 [svn] - this probably fixes bug #858
nenolod
parents: 2622
diff changeset
63 if (handle->which == FALSE &&
2afc8e31a378 [svn] - this probably fixes bug #858
nenolod
parents: 2622
diff changeset
64 (vfs_ftell(handle->buffer)) + (size * nmemb) >
2372
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
65 ((VFSBuffer *) handle->buffer->handle)->size)
2429
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
66 {
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
67 vfs_fseek(handle->fd, vfs_ftell(handle->buffer), SEEK_SET);
2372
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
68 handle->which = TRUE;
2429
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
69 }
2372
d68e6f302855 [svn] - that should have been in vfs_fread
nenolod
parents: 2371
diff changeset
70
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
71 return vfs_fread(i_ptr, size, nmemb, handle->which == TRUE ? handle->fd : handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
72 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
73
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
74 size_t
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
75 buffered_file_vfs_fwrite_impl(gconstpointer i_ptr,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
76 size_t size,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
77 size_t nmemb,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
78 VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
79 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
80 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
81
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
82 return vfs_fwrite(i_ptr, size, nmemb, handle->fd);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
83 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
84
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
85 gint
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
86 buffered_file_vfs_getc_impl(VFSFile *stream)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
87 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
88 VFSBufferedFile *handle = (VFSBufferedFile *) stream->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
89
2371
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
90 /* is this request within the buffered area, or should we switch to
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
91 * an FD? --nenolod
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
92 */
2382
d41965d1806a [svn] - in vfs_buffered_file, we should only switch to live FD after 32768,
nenolod
parents: 2379
diff changeset
93 if ((vfs_ftell(handle->buffer)) + 1 >
2371
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
94 ((VFSBuffer *) handle->buffer->handle)->size)
2429
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
95 {
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
96 vfs_fseek(handle->fd, vfs_ftell(handle->buffer), SEEK_SET);
2371
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
97 handle->which = TRUE;
2429
ca5b5523cc2d [svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents: 2382
diff changeset
98 }
2371
3b8b7d4dc10b [svn] - possible fix for VFSBufferedFile crash
nenolod
parents: 2341
diff changeset
99
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
100 return vfs_getc(handle->which == TRUE ? handle->fd : handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
101 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
102
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
103 gint
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
104 buffered_file_vfs_ungetc_impl(gint c, VFSFile *stream)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
105 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
106 return -1;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
107 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
108
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
109 gint
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
110 buffered_file_vfs_fseek_impl(VFSFile * file,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
111 glong offset,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
112 gint whence)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
113 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
114 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
115
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
116 vfs_fseek(handle->buffer, offset, whence);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
117
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
118 /* if we go OOB, switch to live FD */
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
119 if (vfs_ftell(handle->buffer) > ((VFSBuffer *) handle->buffer->handle)->size)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
120 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
121 vfs_rewind(handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
122 handle->which = TRUE;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
123 vfs_fseek(handle->buffer, offset, whence);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
124 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
125
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
126 return 0;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
127 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
128
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
129 void
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
130 buffered_file_vfs_rewind_impl(VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
131 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
132 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
133
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
134 vfs_rewind(handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
135 handle->which = FALSE;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
136 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
137
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
138 glong
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
139 buffered_file_vfs_ftell_impl(VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
140 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
141 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
142
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
143 return vfs_ftell(handle->which == TRUE ? handle->fd : handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
144 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
145
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
146 gboolean
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
147 buffered_file_vfs_feof_impl(VFSFile * file)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
148 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
149 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
150
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
151 return vfs_feof(handle->which == TRUE ? handle->fd : handle->buffer);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
152 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
153
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
154 gint
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
155 buffered_file_vfs_truncate_impl(VFSFile * file, glong size)
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
156 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
157 return 0;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
158 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
159
2588
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
160 gchar *
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
161 buffered_file_vfs_metadata_impl(VFSFile * file, const gchar * field)
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
162 {
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
163 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle;
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
164
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
165 return vfs_get_metadata(handle->fd, field);
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
166 }
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
167
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
168 VFSConstructor buffered_file_const = {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
169 NULL, // not a normal VFS class
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
170 buffered_file_vfs_fopen_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
171 buffered_file_vfs_fclose_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
172 buffered_file_vfs_fread_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
173 buffered_file_vfs_fwrite_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
174 buffered_file_vfs_getc_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
175 buffered_file_vfs_ungetc_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
176 buffered_file_vfs_fseek_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
177 buffered_file_vfs_rewind_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
178 buffered_file_vfs_ftell_impl,
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
179 buffered_file_vfs_feof_impl,
2588
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
180 buffered_file_vfs_truncate_impl,
c51a5a735f65 [svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents: 2562
diff changeset
181 buffered_file_vfs_metadata_impl
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
182 };
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
183
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
184 VFSFile *
2430
4e2fc64d95ef [svn] - make vfs_buffered_file_new_from_uri declaration const
nenolod
parents: 2429
diff changeset
185 vfs_buffered_file_new_from_uri(const gchar *uri)
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
186 {
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
187 VFSFile *handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
188 VFSBufferedFile *fd;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
189 gsize sz;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
190
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
191 g_return_val_if_fail(uri != NULL, NULL);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
192
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
193 handle = g_new0(VFSFile, 1);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
194 fd = g_new0(VFSBufferedFile, 1);
2622
06e4bbdb6c45 [svn] - due to some bug in buffer management, bump the buffer side of things up to ~40kb instead of 32kb for now.
nenolod
parents: 2589
diff changeset
195 fd->mem = g_malloc0(40000);
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
196 fd->fd = vfs_fopen(uri, "rb");
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
197
2374
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
198 if (fd->fd == NULL)
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
199 {
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
200 g_free(fd->mem);
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
201 g_free(fd);
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
202 g_free(handle);
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
203
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
204 return NULL;
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
205 }
6c5d4d28cc6b [svn] - return NULL if vfs_fopen request failed
nenolod
parents: 2372
diff changeset
206
2622
06e4bbdb6c45 [svn] - due to some bug in buffer management, bump the buffer side of things up to ~40kb instead of 32kb for now.
nenolod
parents: 2589
diff changeset
207 sz = vfs_fread(fd->mem, 1, 40000, fd->fd);
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
208
2379
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
209 if (!sz)
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
210 {
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
211 g_free(fd->mem);
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
212 g_free(fd);
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
213 g_free(handle);
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
214
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
215 return NULL;
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
216 }
e146debd1393 [svn] Check for sz == 0 in vfs_buffered_file_new_from_uri(), return NULL if it's the case.
hansmi
parents: 2374
diff changeset
217
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
218 fd->buffer = vfs_buffer_new(fd->mem, sz);
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
219
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
220 handle->handle = fd;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
221 handle->base = &buffered_file_const;
2561
5b761b745289 [svn] - provide fd->uri for buffered files
nenolod
parents: 2430
diff changeset
222 handle->uri = g_strdup(uri);
2562
07b990906823 [svn] - add reference-counting to VFS and add new function, vfs_dup() to
nenolod
parents: 2561
diff changeset
223 handle->ref = 1;
2341
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
224
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
225 return handle;
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
226 }
02a850a2533b [svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff changeset
227
2589
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
228 VFSFile *
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
229 vfs_buffered_file_release_live_fd(VFSFile *fd)
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
230 {
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
231 VFSBufferedFile *file = (VFSBufferedFile *) fd;
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
232 VFSFile *out;
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
233
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
234 g_return_val_if_fail(file != NULL, NULL);
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
235
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
236 out = file->fd;
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
237 file->fd = NULL;
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
238
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
239 vfs_fclose(fd);
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
240
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
241 return out;
ea470384e752 [svn] - add vfs_buffered_file_release_live_fd().
nenolod
parents: 2588
diff changeset
242 }