/* * $Id: main.c,v 1.7 2007-01-29 02:47:19 bacon Exp $ */ #include #include #include #include #include #include #include #if defined(_WIN32) #include #define ase_main _tmain #elif defined(ASE_CHAR_IS_MCHAR) #ifdef __cplusplus extern "C" { int ase_main (...); } #else extern int ase_main (); #endif int main (int argc, char* argv[], char** envp) { setlocale (LC_ALL, ""); return ase_main (argc, argv, envp); } #else /* ASE_CHAR_IS_WCHAR */ #ifdef __cplusplus extern "C" { int ase_main (...); } #else extern int ase_main (); #endif int main (int argc, char* argv[]/*, char** envp*/) { int i, ret; ase_char_t** v; setlocale (LC_ALL, ""); v = (ase_char_t**) malloc (argc * ASE_SIZEOF(ase_char_t*)); if (v == NULL) return -1; for (i = 0; i < argc; i++) v[i] = NULL; for (i = 0; i < argc; i++) { ase_size_t n, len, rem; char* p = argv[i]; len = 0; rem = strlen (p); while (*p != '\0') { int x = mblen (p, rem); if (x == -1) { ret = -1; goto exit_main; } if (x == 0) break; p += x; rem -= x; len++; } v[i] = (ase_char_t*) malloc ( (len + 1) * ASE_SIZEOF(ase_char_t)); if (v[i] == NULL) { ret = -1; goto exit_main; } n = mbstowcs (v[i], argv[i], len); if (n == (size_t)-1) { /* error */ return -1; } if (n == len) v[i][len] = ASE_T('\0'); } /* TODO: envp... */ ret = ase_main (argc, v, NULL); exit_main: for (i = 0; i < argc; i++) { if (v[i] != NULL) free (v[i]); } free (v); return ret; } #endif