����� ������������ OpenNet.ru / ������ "������������ ��� Linux" / ������

15.3.3 ������ ������

����������, ����������� � ������, �������� ��� ������, ������, ����- � ���-��������������� �������, � ���� �������� ������. ��� ������ ���������� ������ ���������� headerRead. � ������ ������ ������� ���������� ��� ���������� ������ ������. �� ������� ����� ������ �������� ����������.

Header headerRead(FD_t fd,

enum hMagic magicp);

�������� ������� � ������ headerRead �������� ������������� �������� � ������� ����� "�����������" �����. ���� ���� ������ ����� �������� HEADER_MAGIC_YES ���� ����� ����� ����� ���������� �����, ��� HEADER_MAGIC_NO - ���� �� �����. ���� ������������� � ������ �������� ����� ���� ��������, ������� ������ ������. ��� ������ ���� �������� ����� �������� ������� ����� ������ RPM �� ���������� �������������� ��� ���������:

Header header = headerRead(fd, (lead.major >= 3) ?

HEADER_MAGIC_YES : HEADER_MAGIC_NO);

��� ������ �������� ���������� �� ������ ���������� headerGetEntry. � �� ������ ����� �������� ������ ������ � ������������� ����. � ���������� ������� ������ ��� ����, ��������� �� �������� ����, � ������� �������� � ���� ����.

nt headerGetEntry(Header header,

int_32 tag,

hTYP_t type,

void **pointer,

hCNT_t data_size);

headerGetEntry ���������� 1 � ������ ������ � 0 � ������ ������. � ������ ������ ��������� ����� ��������� �� ���������� ������ � ����� ���������, ������������� � ���� �� ��������:

enum rpmTagType_e {

RPM_NULL_TYPE = 0,

RPM_CHAR_TYPE = 1,

RPM_INT8_TYPE = 2,

RPM_INT16_TYPE = 3,

RPM_INT32_TYPE = 4,

RPM_STRING_TYPE = 6,

RPM_BIN_TYPE = 7,

RPM_STRING_ARRAY_TYPE = 8,

RPM_I18NSTRING_TYPE

}

���� ��� �������� RPM_STRING_ARRAY_TYPE ��� RPM_BIN_TYPE, ����������� ���������� ���������, ��� ���� ���������� headerFreeData:

void* headerFreeData(const void *pointer,

rpmTagType type);

��� �������� ��� ����� ��������� �� ������ � ���� ����. ����� ������� headerFreeData ��� �����. ������� �� ������ ������, ���� ��� �� ������� ������������ ���������.

������� headerGetEntry, �� ������ ����� ��� ����, �� �������� ����� �������� ��������. ��� ��� �������� ��������������� ��� --queryformat. ������������ ���� rpmlib.h �������� ������ ���� �����.

������ ���� ����������, ��� ����� �������� ������ ���������� ���� �� ������:

/* Function to read a string header entry. */

char* readHeaderString(Header header, int_32 tag_id) {

int_32 type;

void* pointer;

int_32 data_size;

int header_status = headerGetEntry(header,

tag_id,

&type,

&pointer,

&data_size);

if (header_status) {

if (type == RPM_STRING_TYPE) {

return pointer;

}

}

return NULL;

}

��� ������ �������� �� ���� �������� ������ ������ � ID ����. ��������:

char* name = readHeaderString(header, RPMTAG_NAME);

char* version = readHeaderString(header, RPMTAG_VERSION);

char* release = readHeaderString(header, RPMTAG_RELEASE);

��� ��������� �����, ������ � ������ ����� ������� ������� headerNVR:

int headerNVR(Header header,

const char **nameptr,

const char **versionptr,

const char **releaseptr);

����� ��� ������ �������� �������, ������� ���������� ������, ���������� �������� ������:

Header headerFree(Header header);

����� headerFree ���������� NULL, ��� ����� ������������ ��� ��������� ��������� ��������� � NULL �� ��������� ���������� �������������. ��������:

header = headerFree(header);

����� - �������� ���� � ���������� ������
����� - ������ ���������� �������������� rpm � ���������
����������


����� ������������ �� OpenNet.ru