예제 #1
0
파일: uniapi.cpp 프로젝트: JianwenSun/cc
//--------------------------------------------------------------
BOOL WINAPI W_FindNextFile (HANDLE h, WIN32_FIND_DATAW * pfd)
{
    if (W_IsUnicodeSystem())
        return ::FindNextFileW(h, pfd);

    WIN32_FIND_DATAA fdA;
    BOOL f = ::FindNextFileA(h, &fdA);
    if (f)
        FindData_A2W(&fdA, pfd);
    return f;
}
예제 #2
0
파일: uniapi.cpp 프로젝트: JianwenSun/cc
//--------------------------------------------------------------
HANDLE WINAPI W_FindFirstFile (PCWSTR pFileName, WIN32_FIND_DATAW * pfd)
{
    if (W_IsUnicodeSystem())
        return ::FindFirstFileW(pFileName, pfd);

    WIN32_FIND_DATAA    fdA;
    HANDLE              h;
    char                sz[MAX_PATH];

    if(!WToMB(pFileName, -1, sz, MAX_PATH))
        sz[MAX_PATH-1] = NULL;

    h = ::FindFirstFileA(sz, &fdA);
    if (INVALID_HANDLE_VALUE != h)
        FindData_A2W(&fdA, pfd);
    return h;
}
예제 #3
0
//
// Process Auto Config options:
// #1 search for '/noconfig'
// if not present and csc.cfg exists in EXE dir, inject after env var stuff
//
void ConsoleArgs::ProcessAutoConfig()
{
    bool fFoundNoConfig = false;

    // Scan the argument list for the "/noconfig" options. If present, just kill it and bail.
    for (WStrList * listArgCur = m_listArgs; listArgCur; listArgCur = listArgCur->next)
    {
        // Skip everything except options
        WCHAR * szArg = listArgCur->arg;
        if (szArg == NULL || (szArg[0] != '/' && szArg[0] != '-'))
            continue;

        if (_wcsicmp(szArg + 1, L"noconfig") == 0) {
            listArgCur->arg = NULL;
            VSFree(szArg);
            // We found it, empty it but keep checking in case they specified it twice
            fFoundNoConfig = true;
        }
    }

    if (fFoundNoConfig)
        return;

    // If we got here it means there was no '/noconfig'
    WCHAR szPath[MAX_PATH];
    if (W_IsUnicodeSystem()) {
        if(!GetModuleFileNameW(NULL, szPath, lengthof(szPath)))
            szPath[0] = 0;
    } else {
        CHAR szTemp[MAX_PATH];
        if (!GetModuleFileNameA(NULL, szTemp, lengthof(szTemp)) ||
            !MultiByteToWideChar( AreFileApisANSI() ? CP_ACP : CP_OEMCP,
                0, szTemp, -1, szPath, lengthof(szPath)))
            szPath[0] = 0;
    }
    if (*szPath && PathRemoveFileSpecW(szPath) &&
        PathAppendW(szPath, L"csc.rsp")) {

        if (W_Access( szPath, 4) == 0) { 
            // We know the file exists and that we have read access
            // so add into the list
            size_t cchLen = wcslen(szPath) + 2; // +2 for @ and terminator
            WCHAR * szPathCopy = (WCHAR*)VSAlloc( sizeof(WCHAR) * cchLen);
            if (!szPathCopy || FAILED(StringCchCopyW(szPathCopy + 1, cchLen, szPath))) {
                VSFAIL("The string changed size, or our pointers got messed up");
                m_output->ShowErrorId(FTL_NoMemory, ERROR_FATAL);
                return;
            }
            szPathCopy[0] = L'@';

            WStrList * listArgNew = new WStrList( szPathCopy, m_listArgs);
            if (!listArgNew) {
                VSFree(szPathCopy);
                m_output->ShowErrorId(FTL_NoMemory, ERROR_FATAL);
                return;
            }

            m_listArgs = listArgNew;
        }
    }
}