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;
}
Beispiel #2
0
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);
}