annotate src/ffmpeg/libavformat/file.c @ 847:11278fe4764b trunk

[svn] - if (result >= 0) return the result of ftell, otherwise return -1.
author nenolod
date Tue, 13 Mar 2007 06:17:24 -0700
parents 2eaaa3aa182b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
808
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
1 /*
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
2 * Buffered file io for ffmpeg system
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
3 * Copyright (c) 2001 Fabrice Bellard
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
4 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
9 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
13 * Lesser General Public License for more details.
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
14 *
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
18 */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
19 #include "avformat.h"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
20 #include <fcntl.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
21 #include <unistd.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
22 #include <sys/ioctl.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
23 #include <sys/time.h>
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
24 #include "audacious/vfs.h"
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
25
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
26 /* standard file protocol */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
27
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
28 static int file_open(URLContext *h, const char *filename, int flags)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
29 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
30 VFSFile *file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
31
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
32 strstart(filename, "file:", &filename);
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
33
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
34 if (flags & URL_WRONLY) {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
35 file = vfs_fopen(filename, "wb");
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
36 } else {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
37 file = vfs_fopen(filename, "rb");
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
38 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
39
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
40 if (file == NULL)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
41 return -ENOENT;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
42 h->priv_data = file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
43 return 0;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
44 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
45
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
46 static int file_read(URLContext *h, unsigned char *buf, int size)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
47 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
48 VFSFile *file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
49 file = h->priv_data;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
50 return vfs_fread(buf, 1, size, file);
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
51 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
52
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
53 static int file_write(URLContext *h, unsigned char *buf, int size)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
54 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
55 VFSFile *file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
56 file = h->priv_data;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
57 return vfs_fwrite(buf, 1, size, file);
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
58 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
59
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
60 /* XXX: use llseek */
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
61 static offset_t file_seek(URLContext *h, offset_t pos, int whence)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
62 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
63 int result = 0;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
64 VFSFile *file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
65 file = h->priv_data;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
66 result = vfs_fseek(file, pos, whence);
847
11278fe4764b [svn] - if (result >= 0) return the result of ftell, otherwise return -1.
nenolod
parents: 814
diff changeset
67 if (result >= 0)
808
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
68 result = vfs_ftell(file);
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
69 else
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
70 result = -1;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
71 return result;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
72 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
73
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
74 static int file_close(URLContext *h)
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
75 {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
76 VFSFile *file;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
77 file = h->priv_data;
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
78 return vfs_fclose(file);
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
79 }
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
80
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
81 URLProtocol file_protocol = {
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
82 "file",
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
83 file_open,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
84 file_read,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
85 file_write,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
86 file_seek,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
87 file_close,
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
88 NULL
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
89 };
e8776388b02a [svn] - add ffmpeg
nenolod
parents:
diff changeset
90