이전 항목: authxapi_GetObjectProperty 함수다음 항목: authxapi_FreeListValues


authxapi_GetObjectListValue 함수

UNIX에 해당

authxapi_GetObjectListValue 함수는 데이터베이스에 저장된 개체의 속성에 할당된 값의 목록을 검색합니다. 단일 값이 있는 속성은 이 함수로 검색할 수 없습니다. 단일 값 속성은 authxapi_GetObjectProperty로 검색하십시오.

이 함수는 성공하면 0을 반환합니다. 실패할 경우에는 전역 변수 errno를 설정하고 다음 오류 코드 중 하나를 반환합니다.

반환 값

ERRNO

의미

AUTHXAPI_E_EINVAL

EINVAL

잘못된(NULL) 포인터입니다.

AUTHXAPI_E_INVOBJ

EINVAL

잘못된 개체 설명자입니다.

AUTHXAPI_E_INVPROP

EINVAL

잘못된 속성 설명자입니다.

AUTHXAPI_E_NOCLASS

ENOENT

필요한 클래스를 찾을 수 없습니다.

AUTHXAPI_E_NOOBJ

ENOENT

필요한 개체를 찾을 수 없습니다.

AUTHXAPI_E_NOPROP

ENOENT

필요한 속성을 찾을 수 없습니다.

AUTHXAPI_E_PTYPE

EINVAL

속성 유형이 목록입니다.

AUTHXAPI_E_DBERROR

EIO

데이터베이스 손상이 의심됩니다.

AUTHXAPI_E_NOVAL

ENOENT

이 개체와 연결된 속성 값이 없습니다.

int authxapi_GetObjectListValue (const char   *szClass,
                                 const char   *szObj,
                                 SEOSDB_ODF   *p_odf,
                                 const char   *szProp,
                                 SEOSDB_PDF   *p_pdf,
                                 void         ***val,
                                 unsigned int *psize,
                                 unsigned int *count);
szClass

리소스가 속한 클래스의 이름입니다.

szObj

속성 값을 검색할 해당 개체의 이름입니다.

p_odf

이 함수로 가져오거나 이전에 종료 API get 함수를 호출할 때 호출자가 제공한 개체 설명자에 대한 포인터입니다.

szProp

값을 검색할 해당 속성의 이름입니다.

p_pdf

이 함수로 가져오거나 이전에 종료 API get 함수를 호출할 때 호출자가 제공한 속성 설명자에 대한 포인터입니다.

val

포인터 배열의 메모리 주소가 할당된 변수에 대한 포인터입니다. 포인터 배열은 검색할 데이터 값을 가리킵니다. authxapi_GetObjectListValue 함수는 여기에 사용된 메모리를 할당합니다.

psize

값 목록의 각 요소에 할당된 메모리의 영역 크기(바이트)입니다.

count

값 목록에 있는 요소의 수입니다. 요소가 없는 경우 0일 수 있습니다.

참고:

authxapi_GetObjectListValue 함수는 void 포인터의 벡터를 할당하며, 각 포인터는 값 목록의 단일 요소를 포함하는 할당된 버퍼를 가리킵니다. int **와 같은 포인터에 대한 포인터로 모든 유형의 list 변수를 선언해야 합니다. 그러면 이 list 변수에 대한 포인터가 (void ***)와 같은 typecast로 authxapi_GetObjectListValue에 전달됩니다. 예를 들면 다음과 같습니다.

{
    int **list;
    unsigned int psize, count;
    int rc;
    ...
rc = authxapi_GetObjectListValue(szClass,
         szObj, &odf, szProp, &pdf,
         (void ***)&list, &psize, &count);
...
}

authxapi_GetObjectListValue가 결과를 반환할 때 list 변수는 0부터 count까지 각 목록 항목을 가리키는 포인터가 순서대로 저장된 새로 할당된 메모리 영역을 가리킵니다. 그러나 각 목록 항목은 서로 다른 새 할당 메모리 영역에 저장됩니다. authxapi_GetObjectListValue에 의해 할당된 모든 메모리를 해제하려면 authxapi_FreeListValues를 사용해야 합니다.

예를 들어 N개의 데이터 요소 목록이 있는 경우 다음과 같이 메모리가 할당됩니다.

인수

설명

[elem0]

첫 번째 데이터 요소

[elem1]

두 번째 데이터 요소

[elemN]

N+1번째 데이터 요소

예제: 속성 리소스의 값 목록 검색

다음 종료 API 함수는 데이터베이스에 있는 리소스의 목록 유형 속성에서 값 목록을 검색한 후 값 목록 전체에 대해 루프를 실행합니다. 검색된 정보를 실제로 사용하는 코드는 이 예제에 나와 있지 않습니다.

#include stdio.h
#include authxapi.h
#include seostype.h
int MyExitFunction(void *exit_data, SEOS_EXITRES *result)
{
    SEOS_EXITGENR *genr_data;
    SEOSDB_ODF odf;
    SEOSDB_PDF pdf;
    SEOS_ACL **access_list, *acl_element;
    int rc;
    unsigned int psize, count, counter;
    genr_data = (SEOS_EXITGENR *)exit_data;
    /* Ignore any class that is not of interest */
    if (strcmp(genr_data‑>szClass, "MyResClass"))
        return 0;
    /* Fetch the information for the ACL property of the */
    /* resource being accessed. */
    rc = authxapi_GetObjectListValue("MyResClass", genr_data‑>szRes
           &odf, "ACL", &pdf, (void ***)access_list, &psize, &count);
    if (rc == 0)
    {
         /* We have the ACL now. Lets just see a demonstration */
         /* of looping through the list. */
         for (counter = 0; counter < count; counter++)
         {
               acl_element = access_list[counter];
               /*
                * > > > User Code Here < < <
                */
         }
         authxapi_FreeListValues((void ***) &access_list, &count);
    }
    return 0;
}