annotate osdep/fseeko.c @ 13394:455a5056801f

New generic 'portable anymap' video output driver. It supports portable pixmaps and graymaps in both raw and ASCII mode. Besides PPM and PGM, it can also output PGMYUV files which are PGM files with the U and V plane appended to the bottom of the Y image (bottom left and bottom right). All files can be written to the current directory, to a specified output directory or to multiple subdirectories if the filesystem can't handle the amount of files in one directory anymore. Note: This driver is not yet activated and will not be compiled and linked to libvo. A separate patch will take care of that. This is just for adding the file to the repository.
author ivo
date Mon, 20 Sep 2004 00:54:57 +0000
parents cfe440920be2
children 08cac43f1e38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12071
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
1 /*
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
2 * fseeko.c
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
3 * 64-bit versions of fseeko/ftello() for systems which do not have them
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
4 */
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
5
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
6 #include "../config.h"
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
7
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
8 #if !defined(HAVE_FSEEKO) || !defined(HAVE_FTELLO)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
9 #include <stdio.h>
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
10 #include <sys/types.h>
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
11 #include <sys/stat.h>
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
12 #include <errno.h>
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
13 #endif
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
14
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
15 #ifdef WIN32
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
16 #define flockfile
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
17 #define funlockfile
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
18 #endif
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
19
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
20 /*
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
21 * On BSD/OS and NetBSD (and perhaps others), off_t and fpos_t are the
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
22 * same. Standards say off_t is an arithmetic type, but not necessarily
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
23 * integral, while fpos_t might be neither.
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
24 *
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
25 * This is thread-safe on BSD/OS using flockfile/funlockfile.
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
26 */
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
27
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
28 #ifndef HAVE_FSEEKO
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
29 int
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
30 fseeko(FILE *stream, off_t offset, int whence)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
31 {
12115
cfe440920be2 10l for the orignial author and 1000l for me for commiting a broken workaround
faust3
parents: 12071
diff changeset
32 fpos_t floc;
12071
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
33 struct stat filestat;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
34
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
35 switch (whence)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
36 {
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
37 case SEEK_CUR:
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
38 flockfile(stream);
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
39 if (fgetpos(stream, &floc) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
40 goto failure;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
41 floc += offset;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
42 if (fsetpos(stream, &floc) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
43 goto failure;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
44 funlockfile(stream);
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
45 return 0;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
46 break;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
47 case SEEK_SET:
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
48 if (fsetpos(stream, &offset) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
49 return -1;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
50 return 0;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
51 break;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
52 case SEEK_END:
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
53 flockfile(stream);
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
54 if (fstat(fileno(stream), &filestat) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
55 goto failure;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
56 floc = filestat.st_size;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
57 if (fsetpos(stream, &floc) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
58 goto failure;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
59 funlockfile(stream);
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
60 return 0;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
61 break;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
62 default:
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
63 errno = EINVAL;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
64 return -1;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
65 }
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
66
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
67 failure:
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
68 funlockfile(stream);
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
69 return -1;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
70 }
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
71 #endif
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
72
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
73
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
74 #ifndef HAVE_FTELLO
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
75 off_t
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
76 ftello(FILE *stream)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
77 {
12115
cfe440920be2 10l for the orignial author and 1000l for me for commiting a broken workaround
faust3
parents: 12071
diff changeset
78 fpos_t floc;
12071
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
79
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
80 if (fgetpos(stream, &floc) != 0)
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
81 return -1;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
82 return floc;
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
83 }
ab3590ad2101 fseeko emulation patch by Steven M. Schultz <sms at 2bsd.com>
faust3
parents:
diff changeset
84 #endif