diff options
-rw-r--r-- | apps/mudraw.c | 61 | ||||
-rw-r--r-- | apps/mutool.c | 64 | ||||
-rw-r--r-- | fitz/base_time.c | 124 | ||||
-rw-r--r-- | fitz/fitz.h | 9 |
4 files changed, 110 insertions, 148 deletions
diff --git a/apps/mudraw.c b/apps/mudraw.c index 8e550c84..f2fa53a7 100644 --- a/apps/mudraw.c +++ b/apps/mudraw.c @@ -7,6 +7,7 @@ #ifdef _MSC_VER #include <winsock2.h> +#define main main_utf8 #else #include <sys/time.h> #endif @@ -812,11 +813,7 @@ parse_colorspace(const char *name) return -1; } -#ifdef _MSC_VER -static int main_utf8(int argc, char **argv) -#else int main(int argc, char **argv) -#endif { char *password = ""; fz_document *doc = NULL; @@ -1083,61 +1080,11 @@ int main(int argc, char **argv) } #ifdef _MSC_VER -static char * -wchar_to_utf8(wchar_t *s) -{ - wchar_t *src = s; - char *d; - char *dst; - int len = 1; - - while (*src) - { - len += fz_runelen(*src++); - } - - d = malloc(len); - if (d != NULL) - { - dst = d; - src = s; - while (*src) - { - dst += fz_runetochar(dst, *src++); - } - *dst = 0; - } - return d; -} - int wmain(int argc, wchar_t *wargv[]) { - int i, ret; - char **argv = calloc(argc, sizeof(char *)); - if (argv == NULL) - goto oom; - - for (i = 0; i < argc; i++) - { - argv[i] = wchar_to_utf8(wargv[i]); - if (argv[i] == NULL) - goto oom; - } - - ret = main_utf8(argc, argv); - - if (0) - { -oom: - ret = 1; - fprintf(stderr, "Out of memory while processing command line args\n"); - } - for (i = 0; i < argc; i++) - { - free(argv[i]); - } - free(argv); - + char **argv = fz_argv_from_wargv(argc, wargv); + int ret = main(argc, argv); + fz_free_argv(argc, argv); return ret; } #endif diff --git a/apps/mutool.c b/apps/mutool.c index 17c98424..1d7fb9dd 100644 --- a/apps/mutool.c +++ b/apps/mutool.c @@ -4,6 +4,10 @@ #include <fitz.h> +#ifdef _MSC_VER +#define main main_utf8 +#endif + int pdfclean_main(int argc, char *argv[]); int pdfextract_main(int argc, char *argv[]); int pdfinfo_main(int argc, char *argv[]); @@ -29,11 +33,7 @@ namematch(const char *end, const char *start, const char *match) return ((end-len >= start) && (strncmp(end-len, match, len) == 0)); } -#ifdef _MSC_VER -static int main_utf8(int argc, char **argv) -#else int main(int argc, char **argv) -#endif { char *start, *end; char buf[32]; @@ -83,61 +83,11 @@ int main(int argc, char **argv) } #ifdef _MSC_VER -static char * -wchar_to_utf8(wchar_t *s) -{ - wchar_t *src = s; - char *d; - char *dst; - int len = 1; - - while (*src) - { - len += fz_runelen(*src++); - } - - d = malloc(len); - if (d != NULL) - { - dst = d; - src = s; - while (*src) - { - dst += fz_runetochar(dst, *src++); - } - *dst = 0; - } - return d; -} - int wmain(int argc, wchar_t *wargv[]) { - int i, ret; - char **argv = calloc(argc, sizeof(char *)); - if (argv == NULL) - goto oom; - - for (i = 0; i < argc; i++) - { - argv[i] = wchar_to_utf8(wargv[i]); - if (argv[i] == NULL) - goto oom; - } - - ret = main_utf8(argc, argv); - - if (0) - { -oom: - ret = 1; - fprintf(stderr, "Out of memory while processing command line args\n"); - } - for (i = 0; i < argc; i++) - { - free(argv[i]); - } - free(argv); - + char **argv = fz_argv_from_wargv(argc, wargv); + int ret = main(argc, argv); + fz_free_argv(argc, argv); return ret; } #endif diff --git a/fitz/base_time.c b/fitz/base_time.c index 1b600399..9292c4f5 100644 --- a/fitz/base_time.c +++ b/fitz/base_time.c @@ -1,21 +1,15 @@ -#include <time.h> -#include "fitz.h" +#ifdef _MSC_VER -#ifdef _WIN32 -#ifndef METRO -#include <winsock2.h> -#endif +#include "fitz.h" +#include <time.h> #include <windows.h> -#if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) -#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 -#else -#define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL -#endif - #ifndef _WINRT +#define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 + struct timeval; +struct timezone; int gettimeofday(struct timeval *tv, struct timezone *tz) { @@ -40,44 +34,110 @@ int gettimeofday(struct timeval *tv, struct timezone *tz) return 0; } -#else /* !_WINRT */ +#endif /* !_WINRT */ -void fz_gettimeofday_dummy() { } +char * +fz_utf8_from_wchar(const wchar_t *s) +{ + const wchar_t *src = s; + char *d; + char *dst; + int len = 1; -#endif /* !_WINRT) */ + while (*src) + { + len += fz_runelen(*src++); + } -FILE *fopen_utf8(const char *name, const char *mode) + d = malloc(len); + if (d != NULL) + { + dst = d; + src = s; + while (*src) + { + dst += fz_runetochar(dst, *src++); + } + *dst = 0; + } + return d; +} + +wchar_t * +fz_wchar_from_utf8(const char *s) { - wchar_t *wname, *wmode, *d; - const char *s; + wchar_t *d, *r; int c; - FILE *file; - - d = wname = (wchar_t*) malloc((strlen(name)+1) * sizeof(wchar_t)); - if (d == NULL) + r = d = malloc((strlen(s) + 1) * sizeof(wchar_t)); + if (!r) return NULL; - s = name; while (*s) { s += fz_chartorune(&c, s); *d++ = c; } *d = 0; - d = wmode = (wchar_t*) malloc((strlen(mode)+1) * sizeof(wchar_t)); - if (d == NULL) + return r; +} + +FILE * +fz_fopen_utf8(const char *name, const char *mode) +{ + wchar_t *wname, *wmode; + FILE *file; + + wname = fz_wchar_from_utf8(name); + if (wname == NULL) { - free(wname); return NULL; } - s = mode; - while (*s) { - s += fz_chartorune(&c, s); - *d++ = c; + + wmode = fz_wchar_from_utf8(mode); + if (wmode == NULL) + { + free(wname); + return NULL; } - *d = 0; + file = _wfopen(wname, wmode); + free(wname); free(wmode); return file; } -#endif /* _WIN32 */ +char ** +fz_argv_from_wargv(int argc, wchar_t **wargv) +{ + char **argv; + int i; + + argv = calloc(argc, sizeof(char *)); + if (argv == NULL) + { + fprintf(stderr, "Out of memory while processing command line args!\n"); + exit(1); + } + + for (i = 0; i < argc; i++) + { + argv[i] = fz_utf8_from_wchar(wargv[i]); + if (argv[i] == NULL) + { + fprintf(stderr, "Out of memory while processing command line args!\n"); + exit(1); + } + } + + return argv; +} + +void +fz_free_argv(int argc, char **argv) +{ + int i; + for (i = 0; i < argc; i++) + free(argv[i]); + free(argv); +} + +#endif /* _MSC_VER */ diff --git a/fitz/fitz.h b/fitz/fitz.h index 73bf8bcd..e3427baf 100644 --- a/fitz/fitz.h +++ b/fitz/fitz.h @@ -59,9 +59,14 @@ int gettimeofday(struct timeval *tv, struct timezone *tz); #define isnan _isnan #define hypotf _hypotf -#define fopen fopen_utf8 +#define fopen fz_fopen_utf8 -FILE *fopen_utf8(const char *name, const char *mode); +char *fz_utf8_from_wchar(const wchar_t *s); +wchar_t *fz_wchar_from_utf8(const char *s); + +FILE *fz_fopen_utf8(const char *name, const char *mode); +char **fz_argv_from_wargv(int argc, wchar_t **wargv); +void fz_free_argv(int argc, char **argv); #else /* Unix or close enough */ |