MOZCE_SHUNT_API char* getcwd(char* buff, size_t size) { #ifdef API_LOGGING mozce_printf("getcwd called.\n"); #endif int i; unsigned short dir[MAX_PATH]; GetModuleFileName(GetModuleHandle (NULL), dir, MAX_PATH); for (i = _tcslen(dir); i && dir[i] != TEXT('\\'); i--) {} dir[i + 1] = TCHAR('\0'); w2a_buffer(dir, -1, buff, size); return buff; }
char* w2a_malloc(const unsigned short* inWideString, int inWideChars, int* outACPChars) { LPSTR retval = NULL; /* ** Initialize any out arguments. */ if(NULL != outACPChars) { *outACPChars = 0; } /* ** Initialize the wide char length if requested. ** We do this here to avoid doing it twice in calls to w2a_buffer. */ if(-1 == inWideChars) { if(NULL != inWideString) { /* ** Plus one so the terminating character is included. */ inWideChars = (int)wcslen(inWideString) + 1; } else { inWideChars = 0; } } /* ** Sanity check arguments. */ if(NULL != inWideString && 0 != inWideChars) { int charsRequired = 0; /* ** Determine the size of buffer required for the conversion. */ charsRequired = w2a_buffer(inWideString, inWideChars, NULL, 0); if(0 != charsRequired) { LPSTR heapBuffer = NULL; heapBuffer = (LPSTR)malloc((size_t)charsRequired * sizeof(CHAR)); if(NULL != heapBuffer) { int acpChars = 0; /* ** Real thing this time. */ acpChars = w2a_buffer(inWideString, inWideChars, heapBuffer, charsRequired); if(0 != acpChars) { retval = heapBuffer; if(NULL != outACPChars) { *outACPChars = acpChars; } } else { /* ** Something wrong. ** Clean up. */ free(heapBuffer); } } } } return retval; }