00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "filestrm.h"
00025 #include "cmemory.h"
00026
00027 #include <stdio.h>
00028
00029 U_CAPI FileStream*
00030 T_FileStream_open(const char* filename, const char* mode)
00031 {
00032 if(filename != NULL && *filename != 0 && mode != NULL && *mode != 0) {
00033 FILE *file = fopen(filename, mode);
00034 return (FileStream*)file;
00035 } else {
00036 return NULL;
00037 }
00038 }
00039
00040
00041 U_CAPI FileStream*
00042 T_FileStream_wopen(const wchar_t* filename, const wchar_t* mode)
00043 {
00044
00045 #if defined(WIN32) && !defined(__WINDOWS__)
00046 FILE* result = _wfopen(filename, mode);
00047 return (FileStream*)result;
00048 #else
00049 size_t fnMbsSize, mdMbsSize;
00050 char *fn, *md;
00051 FILE *result;
00052
00053
00054 fnMbsSize = wcstombs(NULL, filename, ((size_t)-1) >> 1);
00055 fn = (char*)uprv_malloc(fnMbsSize+2);
00056 wcstombs(fn, filename, fnMbsSize);
00057 fn[fnMbsSize] = 0;
00058
00059 mdMbsSize = wcstombs(NULL, mode, ((size_t)-1) >> 1);
00060 md = (char*)uprv_malloc(mdMbsSize+2);
00061 wcstombs(md, mode, mdMbsSize);
00062 md[mdMbsSize] = 0;
00063
00064 result = fopen(fn, md);
00065 uprv_free(fn);
00066 uprv_free(md);
00067 return (FileStream*)result;
00068 #endif
00069 }
00070
00071 U_CAPI void
00072 T_FileStream_close(FileStream* fileStream)
00073 {
00074 if (fileStream != 0) fclose((FILE*)fileStream);
00075 }
00076
00077 U_CAPI UBool
00078 T_FileStream_file_exists(const char* filename)
00079 {
00080 FILE* temp = fopen(filename, "r");
00081 if (temp) {
00082 fclose(temp);
00083 return TRUE;
00084 } else
00085 return FALSE;
00086 }
00087
00088
00089
00090
00091 U_CAPI FileStream*
00092 T_FileStream_tmpfile()
00093 {
00094 FILE* file = tmpfile();
00095 return (FileStream*)file;
00096 }
00097
00098 U_CAPI int32_t
00099 T_FileStream_read(FileStream* fileStream, void* addr, int32_t len)
00100 {
00101 return fread(addr, 1, len, (FILE*)fileStream);
00102 }
00103
00104 U_CAPI int32_t
00105 T_FileStream_write(FileStream* fileStream, const void* addr, int32_t len)
00106 {
00107
00108 return fwrite(addr, 1, len, (FILE*)fileStream);
00109 }
00110
00111 U_CAPI void
00112 T_FileStream_rewind(FileStream* fileStream)
00113 {
00114 rewind((FILE*)fileStream);
00115 }
00116
00117 U_CAPI int32_t
00118 T_FileStream_putc(FileStream* fileStream, int32_t ch)
00119 {
00120 int32_t c = fputc(ch, (FILE*)fileStream);
00121 return c;
00122 }
00123
00124 U_CAPI int
00125 T_FileStream_getc(FileStream* fileStream)
00126 {
00127 int c = fgetc((FILE*)fileStream);
00128 return c;
00129 }
00130
00131 U_CAPI int32_t
00132 T_FileStream_ungetc(int32_t ch, FileStream* fileStream)
00133 {
00134
00135 int32_t c = ungetc(ch, (FILE*)fileStream);
00136 return c;
00137 }
00138
00139 U_CAPI int32_t
00140 T_FileStream_peek(FileStream* fileStream)
00141 {
00142 int32_t c = fgetc((FILE*)fileStream);
00143 return ungetc(c, (FILE*)fileStream);
00144 }
00145
00146
00147 U_CAPI char *
00148 T_FileStream_readLine(FileStream* fileStream, char* buffer, int32_t length)
00149 {
00150 return fgets(buffer, length, (FILE*)fileStream);
00151 }
00152
00153 U_CAPI int32_t
00154 T_FileStream_writeLine(FileStream* fileStream, const char* buffer)
00155 {
00156 return fputs(buffer, (FILE*)fileStream);
00157 }
00158
00159 U_CAPI int32_t
00160 T_FileStream_size(FileStream* fileStream)
00161 {
00162 int32_t savedPos = ftell((FILE*)fileStream);
00163 int32_t size = 0;
00164
00165
00166
00167 fseek((FILE*)fileStream, 0, SEEK_END);
00168 size = ftell((FILE*)fileStream);
00169 fseek((FILE*)fileStream, savedPos, SEEK_SET);
00170 return size;
00171 }
00172
00173 U_CAPI int
00174 T_FileStream_eof(FileStream* fileStream)
00175 {
00176 return feof((FILE*)fileStream);
00177 }
00178
00179 U_CAPI int
00180 T_FileStream_error(FileStream* fileStream)
00181 {
00182 return (fileStream == 0 || ferror((FILE*)fileStream));
00183 }
00184
00185 U_CAPI void
00186 T_FileStream_setError(FileStream* fileStream)
00187 {
00188
00189 fseek((FILE*)fileStream, 99999, SEEK_SET);
00190 }
00191
00192
00193 U_CAPI FileStream*
00194 T_FileStream_stdin(void)
00195 {
00196 return (FileStream*)stdin;
00197 }
00198
00199 U_CAPI FileStream*
00200 T_FileStream_stdout(void)
00201 {
00202 return (FileStream*)stdout;
00203 }
00204
00205
00206 U_CAPI FileStream*
00207 T_FileStream_stderr(void)
00208 {
00209 return (FileStream*)stderr;
00210 }
00211
00212
00213