1 /*************************************************************************/
2 /* */
3 /* Language Technologies Institute */
4 /* Carnegie Mellon University */
5 /* Copyright (c) 1999 */
6 /* All Rights Reserved. */
7 /* */
8 /* Permission is hereby granted, free of charge, to use and distribute */
9 /* this software and its documentation without restriction, including */
10 /* without limitation the rights to use, copy, modify, merge, publish, */
11 /* distribute, sublicense, and/or sell copies of this work, and to */
12 /* permit persons to whom this work is furnished to do so, subject to */
13 /* the following conditions: */
14 /* 1. The code must retain the above copyright notice, this list of */
15 /* conditions and the following disclaimer. */
16 /* 2. Any modifications must be clearly marked as such. */
17 /* 3. Original authors' names are not deleted. */
18 /* 4. The authors' names are not used to endorse or promote products */
19 /* derived from this software without specific prior written */
20 /* permission. */
21 /* */
22 /* CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK */
23 /* DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING */
24 /* ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT */
25 /* SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE */
26 /* FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
27 /* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN */
28 /* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, */
29 /* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF */
30 /* THIS SOFTWARE. */
31 /* */
32 /*************************************************************************/
33 /* Author: Alan W Black (awb@cs.cmu.edu) */
34 /* Date: August 2000 */
35 /*************************************************************************/
36 /* */
37 /* Some File stuff */
38 /* */
39 /*************************************************************************/
40 #ifndef _CST_FILE_H__
41 #define _CST_FILE_H__
42
43 #define CST_WRONG_FORMAT -2
44 #define CST_ERROR_FORMAT -1
45 #define CST_OK_FORMAT 0
46
47 #ifdef UNDER_CE
48 /* File access stuff (WinCE 2.11 is really damaged) */
49 #include <windows.h>
50 #include <winbase.h>
51 typedef HANDLE cst_file;
52 #elif __palmos__
53 #include <PalmOS.h>
54 #include <System/StdIOPalm.h>
55 typedef FILE * cst_file;
56 #else
57 #include <stdio.h>
58 typedef FILE * cst_file;
59 #endif
60
61 /* File mapping stuff */
62 #ifdef _WIN32
63 #include <windows.h>
64 typedef struct cst_filemap_struct {
65 void *mem;
66 cst_file fh;
67 size_t mapsize;
68 HANDLE h;
69 } cst_filemap;
70 #elif __palmos__
71 typedef struct cst_filemap_struct {
72 void *mem;
73 cst_file fh;
74 unsigned int mapsize;
75 int fd;
76 } cst_filemap;
77 #else
78 typedef struct cst_filemap_struct {
79 void *mem;
80 cst_file fh;
81 size_t mapsize;
82 int fd;
83 } cst_filemap;
84 #endif
85
86 #define CST_OPEN_WRITE (1<<0)
87 #define CST_OPEN_READ (1<<1)
88 #define CST_OPEN_APPEND (1<<2)
89 /* We actually ignore this -- files are always opened in in binary mode */
90 #define CST_OPEN_BINARY (1<<3)
91
92 #define CST_SEEK_ABSOLUTE 0
93 #define CST_SEEK_RELATIVE 1
94 #define CST_SEEK_ENDREL 2
95
96 cst_file cst_fopen(const char *path, int mode);
97 long cst_fwrite(cst_file fh, const void *buf, long size, long count);
98 long cst_fread(cst_file fh, void *buf, long size, long count);
99 int cst_fprintf(cst_file fh, const char *fmt, ...);
100 int cst_sprintf(char *s, const char *fmt, ...);
101 #ifdef _WIN32
102 #define snprintf c99_snprintf
103
c99_vsnprintf(char * str,size_t size,const char * format,va_list ap)104 __inline int c99_vsnprintf(char* str, size_t size, const char* format,
105 va_list ap) {
106 int count = -1;
107 if (size != 0)
108 count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
109 if (count == -1)
110 count = _vscprintf(format, ap);
111 return count;
112 }
c99_snprintf(char * str,size_t size,const char * format,...)113 __inline int c99_snprintf(char* str, size_t size, const char* format, ...)
114 {
115 int count;
116 va_list ap;
117
118 va_start(ap, format);
119 count = c99_vsnprintf(str, size, format, ap);
120 va_end(ap);
121 return count;
122 }
123 #endif
124 #define cst_snprintf snprintf
125
126 #if defined(__palmos__)
127 #include <stdarg.h>
128 int cst_vsprintf(char *s, const char *fmt, va_list args);
129 #endif
130 int cst_fclose(cst_file fh);
131 int cst_fgetc(cst_file fh);
132
133 /* These aren't LFS-compliant. I don't think we'll need >2G files. */
134 long cst_ftell(cst_file fh);
135 long cst_fseek(cst_file fh, long pos, int whence);
136 long cst_filesize(cst_file fh);
137
138 cst_filemap *cst_mmap_file(const char *path);
139 int cst_munmap_file(cst_filemap *map);
140
141 cst_filemap *cst_read_whole_file(const char *path);
142 int cst_free_whole_file(cst_filemap *map);
143
144 cst_filemap *cst_read_part_file(const char *path);
145 int cst_free_part_file(cst_filemap *map);
146
147 int cst_urlp(const char *url);
148 cst_file cst_url_open(const char *url);
149
150 #endif
151