CVMInt32 CVMioFileType(const char *path) { DWORD attr; #ifdef WINCE { WCHAR *wc = createWCHAR(path); attr = GetFileAttributes(wc); free(wc); } #else attr = GetFileAttributesA(path); #endif if (attr == 0xFFFFFFFF) { return -1; } if (attr & FILE_ATTRIBUTE_DIRECTORY) { return CVM_IO_FILETYPE_DIRECTORY; } if ((attr == FILE_ATTRIBUTE_NORMAL) || (attr & FILE_ATTRIBUTE_ARCHIVE) || attr & FILE_ATTRIBUTE_READONLY) { return CVM_IO_FILETYPE_REGULAR; } if (attr == 0) { return CVM_IO_FILETYPE_REGULAR; /* maybe samba */ } return CVM_IO_FILETYPE_OTHER; }
void readStringWithDebugW(LauncherProperties * props, WCHAR ** dest, char * paramName) { SizedString *sizedStr = createSizedString(); if(paramName!=NULL) { writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "Reading ", 0); writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, paramName, 0); writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, " : ", 0); } readString(props, sizedStr, 1); if(!isOK(props)) { freeSizedString(&sizedStr); writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "[ERROR] Can`t read string !! Seems to be integrity error", 1); return; } *dest = createWCHAR(sizedStr); freeSizedString(&sizedStr); if(paramName!=NULL) { if((*dest)!=NULL) { writeMessageW(props, OUTPUT_LEVEL_DEBUG, 0, *dest, 1); } else { writeMessageA(props, OUTPUT_LEVEL_DEBUG, 0, "NULL", 1); } } return; }
void * CVMdynlinkOpen(const void *absolutePathName) { HANDLE hh; if (absolutePathName == NULL) { #ifdef CVM_DLL hh = LoadLibrary(TEXT("cvmi.dll")); #else hh = GetModuleHandle(NULL); #endif } else { #ifdef UNICODE char *pathName = (char*)absolutePathName; WCHAR *wc = createWCHAR(pathName); hh = LoadLibrary(wc); free(wc); #else char *wc = (char*)absolutePathName; hh = LoadLibraryA(wc); #endif } #ifdef CVM_DEBUG /* Print an error message if we failed to open the dll. */ if (hh == NULL) { fprintf(stderr, "CVMdynlinkOpen(%s) failed. err=0x%x\n", absolutePathName == NULL ? "NULL" : absolutePathName, GetLastError()); } #endif #ifdef CVM_DEBUG /* Put up an error dialog if we failed to open the dll. */ if (hh == NULL) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), 0, /* default language */ (LPTSTR) &lpMsgBuf, 0, NULL); MessageBox(NULL, (LPCTSTR) lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONINFORMATION); LocalFree(lpMsgBuf); } #endif return hh; }
CVMInt32 CVMioOpen(const char *name, CVMInt32 openMode, CVMInt32 filePerm) { DWORD mode = openMode & 0x3; DWORD cFlag; HANDLE fd; int statres; switch (mode) { case _O_RDONLY: mode = GENERIC_READ; break; case _O_WRONLY: mode = GENERIC_WRITE; break; case _O_RDWR: mode = GENERIC_READ | GENERIC_WRITE; break; } cFlag = OPEN_EXISTING; if ((openMode & (_O_CREAT | _O_TRUNC)) == (_O_CREAT | _O_TRUNC)) cFlag = CREATE_ALWAYS; else if (openMode & _O_CREAT) cFlag = OPEN_ALWAYS; else if (openMode & _O_TRUNC) cFlag = TRUNCATE_EXISTING; if ((openMode & (_O_CREAT |_O_EXCL)) == (_O_CREAT |_O_EXCL)) cFlag = CREATE_NEW; #ifdef WINCE { WCHAR *wc; int fdIndex = -1; int i; EnterCriticalSection(&fdTableLock); /* for (i = 0; i < NUM_FDTABLE_ENTRIES; i++) { */ for (i = 3; i < NUM_FDTABLE_ENTRIES; i++) { if (fdTable[i] == INVALID_HANDLE_VALUE) { fdIndex = i; break; } } if (fdIndex == -1) { LeaveCriticalSection(&fdTableLock); return -1; } wc = createWCHAR(name); fdTable[fdIndex] = CreateFile(wc, mode, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, cFlag, FILE_ATTRIBUTE_NORMAL, 0); printf("fdTable[fdIndex] = %d", fdTable[fdIndex]); //djm: Added: Testing if (fdTable[fdIndex] == INVALID_HANDLE_VALUE) { LeaveCriticalSection(&fdTableLock); free(wc); return -1; } fd = (HANDLE)(fdIndex + STD_FDS_BIAS); LeaveCriticalSection(&fdTableLock); free(wc); } #else fd = CreateFileA(name, mode, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, cFlag, FILE_ATTRIBUTE_NORMAL, 0); if (fd == INVALID_HANDLE_VALUE) return -1; #endif statres = fileMode(WIN_GET_HANDLE(fd), &mode); if (statres == -1) { CloseHandle(WIN_GET_HANDLE(fd)); return -1; } if (mode & FILE_ATTRIBUTE_DIRECTORY) { CloseHandle(WIN_GET_HANDLE(fd)); return (CVMInt32)-1; } if (openMode & _O_APPEND) { if (SetFilePointer(WIN_GET_HANDLE(fd), 0, 0, FILE_END) == 0xFFFFFFFF) { CloseHandle(WIN_GET_HANDLE(fd)); return (CVMInt32)-1; } } return (CVMInt32)fd; }
JAVAI_API TCHAR *createTCHAR(const char *s) { return createWCHAR(s); }