summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/mudraw.c61
-rw-r--r--apps/mutool.c64
-rw-r--r--fitz/base_time.c124
-rw-r--r--fitz/fitz.h9
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 */