bool ConfigFile::ReadBool( std::string sectionName,std::string entryName, bool defaultBool ) { std::string boolValue = string_toLower(_LRTrim(_ReadString(sectionName,entryName,"-"))); //没有适当的配置项 if(boolValue == "-") return defaultBool; //返回 true if(boolValue == "true" || boolValue == "y" || boolValue == "yes") return true; //返回false if(boolValue == "false" || boolValue == "n" || boolValue == "no") return false; return defaultBool; }
HRESULT GetFusionInfo(CTransCache *pTC, LPWSTR pszAsmDir) { HRESULT hr = S_OK; WCHAR wzFilePath[MAX_PATH+1]; DWORD cbSize=0; PBYTE pMVID=NULL; DWORD dwAttrib; DWORD cb; IAssemblyName *pName=NULL; LPWSTR pszBuf=NULL; BOOL bMVIDFailed=FALSE; BOOL bCustomFailed=FALSE; BOOL bURLFailed=FALSE; BOOL bDispNameFailed=FALSE; HINI hIni=NULL; TRANSCACHEINFO *pTCInfo = NULL; ASSERT(pszAsmDir || (pTC && pTC->_pInfo->pwzPath)); pszBuf = NEW(WCHAR[MAX_URL_LENGTH+1]); if (!pszBuf) { hr = E_OUTOFMEMORY; goto exit; } if(pTC && pTC->_pInfo->pwzPath) { // if there is path is transprtCache obj use it. else use second param pszAsmDir wnsprintf(wzFilePath, MAX_PATH, L"%s", pTC->_pInfo->pwzPath); } else { wnsprintf(wzFilePath, MAX_PATH, L"%s", pszAsmDir); } if((dwAttrib = GetFileAttributes(wzFilePath)) == (DWORD) -1) { hr = E_FAIL; goto exit; } if(!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) { // looks manifestFilePath is passed in. knock-off the filename. LPWSTR pszTemp = PathFindFileName(wzFilePath); if(pszTemp > wzFilePath) { *(pszTemp-1) = L'\0'; } } // else we have assembly dir; wnsprintf(wzFilePath, MAX_PATH, L"%s\\%s", wzFilePath, g_FusionInfoFile); if ((hIni = PAL_IniCreate()) == NULL) { hr = FusionpHresultFromLastError(); goto exit; } if (!PAL_IniLoad(hIni, wzFilePath)) { hr = FusionpHresultFromLastError(); goto exit; } #define _ReadString(section, key, buf, size) PAL_IniReadString(hIni, section, key, buf, size) pTCInfo = (TRANSCACHEINFO*) pTC->_pInfo; cbSize = _ReadString(ASSEMBLY_INFO_STRING, MVID_KEY_STRING, pszBuf, MAX_URL_LENGTH); if(cbSize == MVID_LENGTH*2) { pMVID = NEW(BYTE[MVID_LENGTH]); if (!pMVID) { hr = E_OUTOFMEMORY; goto exit; } CParseUtils::UnicodeHexToBin(pszBuf, MVID_LENGTH*2, (LPBYTE) pMVID); SAFEDELETEARRAY(pTCInfo->blobMVID.pBlobData); pTCInfo->blobMVID.pBlobData = pMVID; pTCInfo->blobMVID.cbSize = MVID_LENGTH; pMVID = NULL; } else bMVIDFailed = TRUE; if(pTC->GetCacheType() & ASM_CACHE_ZAP) { cbSize = _ReadString(ASSEMBLY_INFO_STRING, CUSTOM_BLOB_STRING, pszBuf, MAX_URL_LENGTH); if(cbSize) { SAFEDELETEARRAY(pTCInfo->blobCustom.pBlobData); pTCInfo->blobCustom.pBlobData = (PBYTE) WSTRDupDynamic(pszBuf); if (!pTCInfo->blobCustom.pBlobData) { hr = E_OUTOFMEMORY; goto exit; } pTCInfo->blobCustom.cbSize = (cbSize + 1) * sizeof(WCHAR) ; } else bCustomFailed = TRUE; } else { cbSize = _ReadString(ASSEMBLY_INFO_STRING, URL_STRING, pszBuf, MAX_URL_LENGTH); if(cbSize) { SAFEDELETEARRAY(pTCInfo->pwzCodebaseURL); pTCInfo->pwzCodebaseURL = WSTRDupDynamic(pszBuf); if (!pTCInfo->pwzCodebaseURL) { hr = E_OUTOFMEMORY; goto exit; } } else bURLFailed = TRUE; if(pTC->GetCacheType() & ASM_CACHE_DOWNLOAD) { cbSize = _ReadString(ASSEMBLY_INFO_STRING, DISPLAY_NAME_STRING, pszBuf, MAX_URL_LENGTH); if(cbSize) { if (FAILED(hr = CreateAssemblyNameObject(&pName, pszBuf, CANOF_PARSE_DISPLAY_NAME, 0))) goto exit; SAFEDELETEARRAY(pTCInfo->pwzName); if (FAILED(hr = NameObjGetWrapper(pName, ASM_NAME_NAME, (LPBYTE*) &pTCInfo->pwzName, &(cb = 0)))) goto exit; // Version if(FAILED(hr = pName->GetVersion(&pTCInfo->dwVerHigh, &pTCInfo->dwVerLow))) goto exit; SAFEDELETEARRAY(pTCInfo->pwzCulture); // Culture if(FAILED(hr = NameObjGetWrapper(pName, ASM_NAME_CULTURE, (LPBYTE*) &pTCInfo->pwzCulture, &cb)) || (pTCInfo->pwzCulture && !_wcslwr(pTCInfo->pwzCulture))) goto exit; SAFEDELETEARRAY(pTCInfo->blobPKT.pBlobData); // PublicKeyToken if(FAILED(hr = NameObjGetWrapper(pName, ASM_NAME_PUBLIC_KEY_TOKEN, &pTCInfo->blobPKT.pBlobData, &pTCInfo->blobPKT.cbSize))) goto exit; } else bDispNameFailed = TRUE; } } exit: SAFEDELETEARRAY(pszBuf); SAFEDELETEARRAY(pMVID); SAFERELEASE(pName); if(SUCCEEDED(hr)) { if(bMVIDFailed || bCustomFailed) hr = E_FAIL; else if(bDispNameFailed || bURLFailed) hr = S_FALSE; } return hr; }
// 函数名: TIniFile::ReadTString // 描述 : 新增的读取定义字段的字符串,且过滤左右空格和'\t' // 返回 : char * // 参数 : const char *section // 参数 : const char *entry // 参数 : const char *defaultString // 参数 : char *buffer // 参数 : int bufLen std::string ConfigFile::ReadString(std::string section, std::string entry, string defaultString ) { return _LRTrim(_ReadString(section,entry,defaultString)); }
status_t PackageReader::_ReadAttributeValue(uint8 type, uint8 encoding, AttributeValue& _value) { switch (type) { case B_HPKG_ATTRIBUTE_TYPE_INT: case B_HPKG_ATTRIBUTE_TYPE_UINT: { uint64 intValue; status_t error; switch (encoding) { case B_HPKG_ATTRIBUTE_ENCODING_INT_8_BIT: { uint8 value; error = _Read(value); intValue = value; break; } case B_HPKG_ATTRIBUTE_ENCODING_INT_16_BIT: { uint16 value; error = _Read(value); intValue = B_BENDIAN_TO_HOST_INT16(value); break; } case B_HPKG_ATTRIBUTE_ENCODING_INT_32_BIT: { uint32 value; error = _Read(value); intValue = B_BENDIAN_TO_HOST_INT32(value); break; } case B_HPKG_ATTRIBUTE_ENCODING_INT_64_BIT: { uint64 value; error = _Read(value); intValue = B_BENDIAN_TO_HOST_INT64(value); break; } default: { fErrorOutput->PrintError("Error: Invalid TOC section: " "invalid encoding %d for int value type %d\n", encoding, type); return B_BAD_VALUE; } } if (error != B_OK) return error; if (type == B_HPKG_ATTRIBUTE_TYPE_INT) _value.SetTo((int64)intValue); else _value.SetTo(intValue); return B_OK; } case B_HPKG_ATTRIBUTE_TYPE_STRING: { if (encoding == B_HPKG_ATTRIBUTE_ENCODING_STRING_TABLE) { uint64 index; status_t error = _ReadUnsignedLEB128(index); if (error != B_OK) return error; if (index > fTOCStringsCount) { fErrorOutput->PrintError("Error: Invalid TOC section: " "string reference out of bounds\n"); return B_BAD_DATA; } _value.SetTo(fStrings[index]); } else if (encoding == B_HPKG_ATTRIBUTE_ENCODING_STRING_INLINE) { const char* string; status_t error = _ReadString(string); if (error != B_OK) return error; _value.SetTo(string); } else { fErrorOutput->PrintError("Error: Invalid TOC section: invalid " "string encoding (%u)\n", encoding); return B_BAD_DATA; } return B_OK; } case B_HPKG_ATTRIBUTE_TYPE_RAW: { uint64 size; status_t error = _ReadUnsignedLEB128(size); if (error != B_OK) return error; if (encoding == B_HPKG_ATTRIBUTE_ENCODING_RAW_HEAP) { uint64 offset; error = _ReadUnsignedLEB128(offset); if (error != B_OK) return error; if (offset > fHeapSize || size > fHeapSize - offset) { fErrorOutput->PrintError("Error: Invalid TOC section: " "invalid data reference\n"); return B_BAD_DATA; } _value.SetToData(size, fHeapOffset + offset); } else if (encoding == B_HPKG_ATTRIBUTE_ENCODING_RAW_INLINE) { if (size > B_HPKG_MAX_INLINE_DATA_SIZE) { fErrorOutput->PrintError("Error: Invalid TOC section: " "inline data too long\n"); return B_BAD_DATA; } const void* buffer; error = _GetTOCBuffer(size, buffer); if (error != B_OK) return error; _value.SetToData(size, buffer); } else { fErrorOutput->PrintError("Error: Invalid TOC section: invalid " "raw encoding (%u)\n", encoding); return B_BAD_DATA; } return B_OK; } default: fErrorOutput->PrintError("Error: Invalid TOC section: invalid " "value type: %d\n", type); return B_BAD_DATA; } }