Mercurial > audlegacy
annotate src/audacious/vfs_buffered_file.c @ 4490:2e56a47e7a5d
Correctly check for USE_DBUS and USE_EGGSM.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 21 Apr 2008 07:32:45 +0300 |
parents | 4eeb4c36867c |
children |
rev | line source |
---|---|
2896
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
1 /* Audacious |
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
2 * Copyright (c) 2006-2007 William Pitcock |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
3 * |
2896
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
4 * This program is free software; you can redistribute it and/or modify |
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
3121
3b6d316f8b09
GPL3 relicensing.
William Pitcock <nenolod@atheme-project.org>
parents:
2896
diff
changeset
|
6 * the Free Software Foundation; under version 3 of the License. |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
7 * |
2896
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
8 * This program is distributed in the hope that it will be useful, |
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
11 * GNU General Public License for more details. |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
12 * |
2896
51dda959be4d
Backed out changeset 7d3beedf1db8677dab2327bc8d85af4746344f6e
William Pitcock <nenolod@atheme.org>
parents:
2861
diff
changeset
|
13 * You should have received a copy of the GNU General Public License |
3121
3b6d316f8b09
GPL3 relicensing.
William Pitcock <nenolod@atheme-project.org>
parents:
2896
diff
changeset
|
14 * along with this program. If not, see <http://www.gnu.org/licenses>. |
3123
f1c756f39e6c
Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents:
3121
diff
changeset
|
15 * |
f1c756f39e6c
Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents:
3121
diff
changeset
|
16 * The Audacious team does not consider modular code linking to |
f1c756f39e6c
Invoke "Plugins are not derived work" clause provided by GPL3.
William Pitcock <nenolod@atheme-project.org>
parents:
3121
diff
changeset
|
17 * Audacious or using our public API to be a derived work. |
2341
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 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
20 #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
|
21 #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
|
22 #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
|
23 #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
|
24 #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
|
25 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
26 VFSFile * |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
27 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
|
28 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
|
29 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
30 return NULL; |
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 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
33 gint |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
34 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
|
35 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
36 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
|
37 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
38 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
|
39 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
40 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
|
41 |
2589 | 42 if (handle->fd != NULL) |
43 vfs_fclose(handle->fd); | |
44 | |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
45 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
|
46 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
|
47 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
|
48 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
49 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
50 return 0; |
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 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
53 size_t |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
54 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
|
55 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
|
56 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
|
57 VFSFile * file) |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
58 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
59 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
|
60 |
2372 | 61 /* is this request within the buffered area, or should we switch to |
62 * an FD? --nenolod | |
63 */ | |
2647 | 64 if (handle->which == FALSE && |
65 (vfs_ftell(handle->buffer)) + (size * nmemb) > | |
2372 | 66 ((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
|
67 { |
ca5b5523cc2d
[svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents:
2382
diff
changeset
|
68 vfs_fseek(handle->fd, vfs_ftell(handle->buffer), SEEK_SET); |
2372 | 69 handle->which = TRUE; |
2429
ca5b5523cc2d
[svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents:
2382
diff
changeset
|
70 } |
2372 | 71 |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
72 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
|
73 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
74 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
75 size_t |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
76 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
|
77 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
|
78 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
|
79 VFSFile * file) |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
80 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
81 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
|
82 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
83 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
|
84 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
85 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
86 gint |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
87 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
|
88 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
89 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
|
90 |
2371 | 91 /* is this request within the buffered area, or should we switch to |
92 * an FD? --nenolod | |
93 */ | |
2382
d41965d1806a
[svn] - in vfs_buffered_file, we should only switch to live FD after 32768,
nenolod
parents:
2379
diff
changeset
|
94 if ((vfs_ftell(handle->buffer)) + 1 > |
2371 | 95 ((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
|
96 { |
ca5b5523cc2d
[svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents:
2382
diff
changeset
|
97 vfs_fseek(handle->fd, vfs_ftell(handle->buffer), SEEK_SET); |
2371 | 98 handle->which = TRUE; |
2429
ca5b5523cc2d
[svn] - fix an offset error in the vfs_buffered_file wraparound implementation sections
nenolod
parents:
2382
diff
changeset
|
99 } |
2371 | 100 |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
101 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
|
102 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
103 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
104 gint |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
105 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
|
106 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
107 return -1; |
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 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
110 gint |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
111 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
|
112 glong offset, |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
113 gint whence) |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
114 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
115 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
|
116 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
117 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
|
118 |
3138
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
119 switch(whence) |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
120 { |
3138
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
121 case SEEK_END: |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
122 handle->which = TRUE; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
123 vfs_fseek(handle->fd, offset, whence); |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
124 break; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
125 case SEEK_CUR: |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
126 if (vfs_ftell(handle->buffer) + offset > ((VFSBuffer *) handle->buffer->handle)->size) |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
127 { |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
128 handle->which = TRUE; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
129 vfs_fseek(handle->fd, offset, whence); |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
130 } |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
131 break; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
132 case SEEK_SET: |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
133 default: |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
134 if (offset > ((VFSBuffer *) handle->buffer->handle)->size) |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
135 { |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
136 handle->which = TRUE; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
137 vfs_fseek(handle->fd, offset, whence); |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
138 } |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
139 else |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
140 { |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
141 handle->which = FALSE; |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
142 vfs_fseek(handle->buffer, offset, whence); |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
143 } |
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
144 break; |
2341
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 return 0; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
147 } |
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 void |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
150 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
|
151 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
152 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
|
153 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
154 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
|
155 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
|
156 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
157 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
158 glong |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
159 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
|
160 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
161 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
|
162 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
163 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
|
164 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
165 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
166 gboolean |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
167 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
|
168 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
169 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
|
170 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
171 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
|
172 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
173 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
174 gint |
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_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
|
176 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
177 return 0; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
178 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
179 |
2688 | 180 off_t |
181 buffered_file_vfs_fsize_impl(VFSFile * file) | |
182 { | |
183 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; | |
184 | |
3140
732abc5c1714
Fix VFSBufferedFile::fsize().
William Pitcock <nenolod@atheme-project.org>
parents:
3138
diff
changeset
|
185 return vfs_fsize(handle->fd); |
2688 | 186 } |
187 | |
2588
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
188 gchar * |
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
189 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
|
190 { |
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
191 VFSBufferedFile *handle = (VFSBufferedFile *) file->handle; |
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
192 |
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
193 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
|
194 } |
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
195 |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
196 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
|
197 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
|
198 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
|
199 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 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
|
205 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
|
206 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
|
207 buffered_file_vfs_feof_impl, |
2588
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
208 buffered_file_vfs_truncate_impl, |
2688 | 209 buffered_file_vfs_fsize_impl, |
2588
c51a5a735f65
[svn] - proxy requests for metadata attached to a VFSBufferedFile to the live
nenolod
parents:
2562
diff
changeset
|
210 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
|
211 }; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
212 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
213 VFSFile * |
2430
4e2fc64d95ef
[svn] - make vfs_buffered_file_new_from_uri declaration const
nenolod
parents:
2429
diff
changeset
|
214 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
|
215 { |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
216 VFSFile *handle; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
217 VFSBufferedFile *fd; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
218 gsize 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 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
|
221 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
222 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
|
223 fd = g_new0(VFSBufferedFile, 1); |
3853
4eeb4c36867c
prebuffer more data (this makes vorbis happy)
William Pitcock <nenolod@atheme.org>
parents:
3839
diff
changeset
|
224 fd->mem = g_malloc0(128000); |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
225 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
|
226 |
2374 | 227 if (fd->fd == NULL) |
228 { | |
229 g_free(fd->mem); | |
230 g_free(fd); | |
231 g_free(handle); | |
232 | |
233 return NULL; | |
234 } | |
235 | |
3853
4eeb4c36867c
prebuffer more data (this makes vorbis happy)
William Pitcock <nenolod@atheme.org>
parents:
3839
diff
changeset
|
236 sz = vfs_fread(fd->mem, 1, 128000, fd->fd); |
3138
3eca96f6a73f
Rewrite VFSBufferedFile::fseek(), now far less buggy!
William Pitcock <nenolod@atheme-project.org>
parents:
3123
diff
changeset
|
237 vfs_rewind(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
|
238 |
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
|
239 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
|
240 { |
3839
2cc7e450e08e
Fix an file descriptor leak.
Matti Hamalainen <ccr@tnsp.org>
parents:
3140
diff
changeset
|
241 vfs_fclose(fd->fd); |
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
|
242 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
|
243 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
|
244 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
|
245 |
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
|
246 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
|
247 } |
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
|
248 |
2341
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
249 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
|
250 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
251 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
|
252 handle->base = &buffered_file_const; |
2561 | 253 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
|
254 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
|
255 |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
256 return handle; |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
257 } |
02a850a2533b
[svn] - automatically buffering deriv-class of VFSFile. will be used to speed up probing of network sources.
nenolod
parents:
diff
changeset
|
258 |
2589 | 259 VFSFile * |
260 vfs_buffered_file_release_live_fd(VFSFile *fd) | |
261 { | |
262 VFSBufferedFile *file = (VFSBufferedFile *) fd; | |
263 VFSFile *out; | |
264 | |
265 g_return_val_if_fail(file != NULL, NULL); | |
266 | |
267 out = file->fd; | |
268 file->fd = NULL; | |
269 | |
270 vfs_fclose(fd); | |
271 | |
272 return out; | |
273 } |