BOOLEAN InfGetData(PINFCONTEXT Context, PWCHAR *Key, PWCHAR *Data) { return INF_SUCCESS(InfpGetData(Context, Key, Data)); }
int InfHostGetData(PINFCONTEXT Context, WCHAR **Key, WCHAR **Data) { INFSTATUS Status; Status = InfpGetData(Context, Key, Data); if (INF_SUCCESS(Status)) { return 0; } else { errno = Status; return -1; } }
/* if found, len is set to the substitution length */ static PCWSTR InfpGetSubstitutionString(PINFCACHE Inf, PCWSTR str, unsigned int *len, BOOL no_trailing_slash) { static const WCHAR percent = '%'; INFSTATUS Status = INF_STATUS_NOT_FOUND; PINFCONTEXT Context = NULL; PWCHAR Data = NULL; WCHAR ValueName[MAX_INF_STRING_LENGTH +1]; WCHAR StringLangId[13]; if (!*len) /* empty string (%%) is replaced by single percent */ { *len = 1; return &percent; } memcpy(ValueName, str, *len * sizeof(WCHAR)); ValueName[*len] = 0; DPRINT("Value name: %S\n", ValueName); if (Inf->LanguageId != 0) { swprintf(StringLangId, L"Strings.%04hx", Inf->LanguageId); Status = InfpFindFirstLine(Inf, StringLangId, ValueName, &Context); if (Status != INF_STATUS_SUCCESS) { swprintf(StringLangId, L"Strings.%04hx", MAKELANGID(PRIMARYLANGID(Inf->LanguageId), SUBLANG_NEUTRAL)); Status = InfpFindFirstLine(Inf, StringLangId, ValueName, &Context); if (Status != INF_STATUS_SUCCESS) { Status = InfpFindFirstLine(Inf, L"Strings", ValueName, &Context); } } } else { Status = InfpFindFirstLine(Inf, L"Strings", ValueName, &Context); } if (Status != INF_STATUS_SUCCESS || Context == NULL) return NULL; Status = InfpGetData(Context, NULL, &Data); InfpFreeContext(Context); if (Status == STATUS_SUCCESS) { *len = strlenW(Data); DPRINT("Substitute: %S Length: %ul\n", Data, *len); return Data; } return NULL; }