上一主题: 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 **)。 然后,将指向该列表变量的指针传递给 authxapi_GetObjectListValue,强制转换为 (void ***)。 例如:

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

当 authxapi_GetObjectListValue 返回时,该列表变量将指向新分配的内存区域,该内存区域包含指向每个列表项的指针(从 0 开始顺序存储)。 每个列表项都存储在另一个新分配的内存区域中。 确保使用 authxapi_FreeListValues 释放 authxapi_GetObjectListValue 分配的所有内存。

例如,对于包含 N 个数据元素的列表,内存分配如下:

参数

说明

[elem0]

第 1 个数据元素

[elem1]

第 2 个数据元素

[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;
    /* 忽略不感兴趣的类 */
    if (strcmp(genr_data‑>szClass, “MyResClass”))
        return 0;
    /* 提取访问的资源的 ACL 属性 */
    /* 的信息。 */
    rc = authxapi_GetObjectListValue(“MyResClass”, genr_data‑>szRes
           &odf, “ACL”, &pdf, (void ***)access_list, &psize, &count);
    if (rc == 0)
    {
         /* 我们现在具有 ACL。 让我们看一个 */
         /*遍历列表的演示。 */
         for (counter = 0; counter < count; counter++)
         {
               acl_element = access_list[counter];
               /*
                * > > > User Code Here < < <
                */
         }
         authxapi_FreeListValues((void ***) &access_list, &count);
    }
    return 0;
}