#ifdef USE_ZLIB
if(check_file_extension(file_path, _T(".gz"))) {
- switch(mode) {
- case FILEIO_READ_BINARY:
-// case FILEIO_READ_WRITE_BINARY:
- case FILEIO_READ_ASCII:
-// case FILEIO_READ_WRITE_ASCII:
-// case FILEIO_READ_WRITE_APPEND_ASCII:
- if((fp = _tfopen(file_path, _T("rb"))) != NULL) {
- // check gzip header
- uint8_t data[10], name[_MAX_PATH] = {0};
- fread(data, 10, 1, fp);
+ return Gzopen(file_path, mode);
+ }
+#endif
+ switch(mode) {
+ case FILEIO_READ_BINARY:
+ return ((fp = _tfopen(file_path, _T("rb"))) != NULL);
+ case FILEIO_WRITE_BINARY:
+ return ((fp = _tfopen(file_path, _T("wb"))) != NULL);
+ case FILEIO_READ_WRITE_BINARY:
+ return ((fp = _tfopen(file_path, _T("r+b"))) != NULL);
+ case FILEIO_READ_WRITE_NEW_BINARY:
+ return ((fp = _tfopen(file_path, _T("w+b"))) != NULL);
+ case FILEIO_READ_ASCII:
+ return ((fp = _tfopen(file_path, _T("r"))) != NULL);
+ case FILEIO_WRITE_ASCII:
+ return ((fp = _tfopen(file_path, _T("w"))) != NULL);
+ case FILEIO_WRITE_APPEND_ASCII:
+ return ((fp = _tfopen(file_path, _T("a"))) != NULL);
+ case FILEIO_READ_WRITE_ASCII:
+ return ((fp = _tfopen(file_path, _T("r+"))) != NULL);
+ case FILEIO_READ_WRITE_NEW_ASCII:
+ return ((fp = _tfopen(file_path, _T("w+"))) != NULL);
+ case FILEIO_READ_WRITE_APPEND_ASCII:
+ return ((fp = _tfopen(file_path, _T("a+"))) != NULL);
+ }
+ return false;
+}
+
+#ifdef USE_ZLIB
+bool FILEIO::Gzopen(const _TCHAR *file_path, int mode)
+{
+ gz_size = 0;
+
+ switch(mode) {
+ case FILEIO_READ_BINARY:
+// case FILEIO_READ_WRITE_BINARY:
+ case FILEIO_READ_ASCII:
+// case FILEIO_READ_WRITE_ASCII:
+// case FILEIO_READ_WRITE_APPEND_ASCII:
+ if((fp = _tfopen(file_path, _T("rb"))) != NULL) {
+ // check gzip header
+ uint8_t data[10], name[_MAX_PATH] = {0};
+ fread(data, 10, 1, fp);
+ if(data[0] == 0x1f && data[1] == 0x8b && data[2] == 0x08) {
if(data[3] & 2) {
// skip part number
fseek(fp, 2, SEEK_CUR);
fseek(fp, -4, SEEK_END);
fread(data, 4, 1, fp);
gz_size = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
- fclose(fp);
- fp = NULL;
}
- break;
+ fclose(fp);
+ fp = NULL;
}
- switch(mode) {
- case FILEIO_READ_BINARY:
- {
- //memset(path, 0x00, _MAX_PATH);
- gz = gzopen(file_path, _T("rb"));
- if(gz != NULL) {
- my_tcscpy_s(path, _MAX_PATH, get_file_path_without_extensiton(file_path));
- return true;
- } else {
- my_tcscpy_s(path, _MAX_PATH, file_path);
- return false;
- }
- }
- break;
-// case FILEIO_WRITE_BINARY:
-// return ((gz = gzopen(file_path, _T("wb"))) != NULL);
-// case FILEIO_READ_WRITE_BINARY:
-// return ((gz = gzopen(file_path, _T("r+b"))) != NULL);
-// case FILEIO_READ_WRITE_NEW_BINARY:
-// return ((gz = gzopen(file_path, _T("w+b"))) != NULL);
- case FILEIO_READ_ASCII:
- {
- gz = gzopen(file_path, _T("r"));
- if(gz != NULL) {
- my_tcscpy_s(path, _MAX_PATH, get_file_path_without_extensiton(file_path));
- return true;
- } else {
- my_tcscpy_s(path, _MAX_PATH, file_path);
- return false;
- }
- }
- break;
-// case FILEIO_WRITE_ASCII:
-// return ((gz = gzopen(file_path, _T("w"))) != NULL);
-// case FILEIO_WRITE_APPEND_ASCII:
-// return ((gz = gzopen(file_path, _T("a"))) != NULL);
-// case FILEIO_READ_WRITE_ASCII:
-// return ((gz = gzopen(file_path, _T("r+"))) != NULL);
-// case FILEIO_READ_WRITE_NEW_ASCII:
-// return ((gz = gzopen(file_path, _T("w+"))) != NULL);
-// case FILEIO_READ_WRITE_APPEND_ASCII:
-// return ((gz = gzopen(file_path, _T("a+"))) != NULL);
+ if(gz_size == 0) {
+ return false;
}
- } else
-#endif
+ break;
+ }
switch(mode) {
case FILEIO_READ_BINARY:
- return ((fp = _tfopen(file_path, _T("rb"))) != NULL);
+ return ((gz = gzopen(tchar_to_char(file_path), "rb")) != NULL);
case FILEIO_WRITE_BINARY:
- return ((fp = _tfopen(file_path, _T("wb"))) != NULL);
- case FILEIO_READ_WRITE_BINARY:
- return ((fp = _tfopen(file_path, _T("r+b"))) != NULL);
- case FILEIO_READ_WRITE_NEW_BINARY:
- return ((fp = _tfopen(file_path, _T("w+b"))) != NULL);
+ return ((gz = gzopen(tchar_to_char(file_path), "wb")) != NULL);
+// case FILEIO_READ_WRITE_BINARY:
+// return ((fp = _tfopen(file_path, _T("r+b"))) != NULL);
+// case FILEIO_READ_WRITE_NEW_BINARY:
+// return ((fp = _tfopen(file_path, _T("w+b"))) != NULL);
case FILEIO_READ_ASCII:
- return ((fp = _tfopen(file_path, _T("r"))) != NULL);
+ return ((gz = gzopen(tchar_to_char(file_path), "r")) != NULL);
case FILEIO_WRITE_ASCII:
- return ((fp = _tfopen(file_path, _T("w"))) != NULL);
- case FILEIO_WRITE_APPEND_ASCII:
- return ((fp = _tfopen(file_path, _T("a"))) != NULL);
- case FILEIO_READ_WRITE_ASCII:
- return ((fp = _tfopen(file_path, _T("r+"))) != NULL);
- case FILEIO_READ_WRITE_NEW_ASCII:
- return ((fp = _tfopen(file_path, _T("w+"))) != NULL);
- case FILEIO_READ_WRITE_APPEND_ASCII:
- return ((fp = _tfopen(file_path, _T("a+"))) != NULL);
+ return ((gz = gzopen(tchar_to_char(file_path), "w")) != NULL);
+// case FILEIO_WRITE_APPEND_ASCII:
+// return ((fp = _tfopen(file_path, _T("a"))) != NULL);
+// case FILEIO_READ_WRITE_ASCII:
+// return ((fp = _tfopen(file_path, _T("r+"))) != NULL);
+// case FILEIO_READ_WRITE_NEW_ASCII:
+// return ((fp = _tfopen(file_path, _T("w+"))) != NULL);
+// case FILEIO_READ_WRITE_APPEND_ASCII:
+// return ((fp = _tfopen(file_path, _T("a+"))) != NULL);
}
return false;
}
+#endif
void FILEIO::Fclose()
{
}
}
+_TCHAR *FILEIO::Fgetts(_TCHAR *str, int n)
+{
+#ifdef USE_ZLIB
+ if(gz != NULL) {
+#if defined(_UNICODE) && defined(SUPPORT_TCHAR_TYPE)
+ char *str_mb = (char *)calloc(sizeof(char), n + 1);
+ gzgets(gz, str_mb, n);
+ my_swprintf_s(str, n, L"%s", char_to_wchar(str_mb));
+ free(str_mb);
+ return str;
+#else
+ return gzgets(gz, str, n);
+#endif
+ } else
+#endif
+ return _fgetts(str, n, fp);
+}
+
int FILEIO::Fprintf(const char* format, ...)
{
va_list ap;
}
}
+int FILEIO::Ftprintf(const _TCHAR* format, ...)
+{
+ va_list ap;
+ _TCHAR buffer[1024];
+
+ va_start(ap, format);
+ my_vstprintf_s(buffer, 1024, format, ap);
+ va_end(ap);
+
+#ifdef USE_ZLIB
+ if(gz != NULL) {
+ return gzprintf(gz, "%s", tchar_to_char(buffer));
+ } else
+#endif
+ return my_ftprintf_s(fp, _T("%s"), buffer);
+}
+
size_t FILEIO::Fread(void* buffer, size_t size, size_t count)
{
#ifdef USE_ZLIB
}
}
-size_t FILEIO::Fwrite(void* buffer, size_t size, size_t count)
+size_t FILEIO::Fwrite(const void* buffer, size_t size, size_t count)
{
#ifdef USE_ZLIB
if(gz != NULL) {
}
}
+
+bool FILEIO::Fcompare(const void* buffer, size_t size)
+{
+ bool result = false;
+ void *tmp = malloc(size);
+
+ if(Fread(tmp, size, 1) == 1) {
+ result = (memcmp(buffer, tmp, size) == 0);
+ }
+ free(tmp);
+ return result;
+}