#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
+#include <assert.h>
#include <io.h>
#include <fcntl.h>
+#include <share.h>
#include <sys/timeb.h>
#include "compat.h"
#define WIN32_LEAN_AND_MEAN
int64_t aacenc_timer(void)
{
+#if HAVE_STRUCT___TIMEB64
struct __timeb64 tv;
_ftime64(&tv);
+#else
+ struct timeb tv;
+ ftime(&tv);
+#endif
return (int64_t)tv.time * 1000 + tv.millitm;
}
fp = (mode[0] == 'r') ? stdin : stdout;
_setmode(_fileno(fp), _O_BINARY);
} else {
+ int share = _SH_DENYRW;
+ if (strchr(mode, 'r') && !strchr(mode, '+'))
+ share = _SH_DENYWR;
codepage_decode_wchar(CP_UTF8, name, &wname);
codepage_decode_wchar(CP_UTF8, mode, &wmode);
- fp = _wfopen(wname, wmode);
+ fp = _wfsopen(wname, wmode, share);
free(wname);
free(wmode);
}
return fp;
}
+static char **__aacenc_argv__;
+
+static
+void aacenc_free_mainargs(void)
+{
+ char **p = __aacenc_argv__;
+ for (; *p; ++p)
+ free(*p);
+ free(__aacenc_argv__);
+}
+
void aacenc_getmainargs(int *argc, char ***argv)
{
int i;
for (i = 0; i < *argc; ++i)
codepage_encode_wchar(CP_UTF8, wargv[i], &(*argv)[i]);
(*argv)[*argc] = 0;
+ __aacenc_argv__ = *argv;
+ atexit(aacenc_free_mainargs);
}
char *aacenc_to_utf8(const char *s)
return _strdup(s);
}
+#if defined(__MINGW32__) && !defined(HAVE__VSCPRINTF)
+int _vscprintf(const char *fmt, va_list ap)
+{
+ static int (*fp_vscprintf)(const char *, va_list) = 0;
+ if (!fp_vscprintf) {
+ HANDLE h = GetModuleHandleA("msvcrt.dll");
+ FARPROC fp = GetProcAddress(h, "_vscprintf");
+ InterlockedCompareExchangePointer(&fp_vscprintf, fp, 0);
+ }
+ assert(fp_vscprintf);
+ return fp_vscprintf(fmt, ap);
+}
+#endif
+
int aacenc_fprintf(FILE *fp, const char *fmt, ...)
{
va_list ap;
codepage_decode_wchar(CP_UTF8, s, &ws);
free(s);
fflush(fp);
- WriteConsoleW(fh, ws, cnt, &nw, 0);
+ WriteConsoleW(fh, ws, wcslen(ws), &nw, 0);
free(ws);
}
return cnt;