예제 #1
0
BOOLEAN
InfGetData(PINFCONTEXT Context,
           PWCHAR *Key,
           PWCHAR *Data)
{
    return INF_SUCCESS(InfpGetData(Context, Key, Data));
}
예제 #2
0
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;
    }
}
예제 #3
0
파일: infget.c 프로젝트: RareHare/reactos
/* 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;
}