15.3.2. Чтение начального идентификатора rpm и сигнатуры

Вспомним структуру файла rpm-пакета (Формат файла rpm) - начальный идентификатор, подпись (сигнатура), заголовок пакета (бинарный хэдер), нагрузка (cpio-архив с файлами пакета).
Наиболее важная информация о rpm-файле находится в хэдере. Она-то в основном и требуется для работы с пакетами. Однако, чтобы установить указатель смещения в позицию начала чтения хэдера, все равно потребуеся прочитать начальный идентификатор и подпись, даже если они не интересуют вашу программу. Для чтения начального идентификатора применяют функцию readLead:

int readLead(FD_t fd, struct rpmlead *lead);

Функция readLead возвращает 0 в случае успешного считывания начального идентификатора и 1 в случае ошибки. Считанными данными заполняется структура rpmlead:

struct rpmlead {

unsigned char magic[4];

unsigned char major;

unsigned char minor;

short type;

short archnum;

char name[66];

short osnum;

short signature_type;

char reserved[16];

};

Для чтения до конца сигнатуры вызывается rpmReadSignature:

rpmRC rpmReadSignature(FD_t fd,

Header * header,

sigType sig_type);

Возможные коды возврата показаны ниже:

Code

RPMRC_OK

RPMRC_BADMAGIC

RPMRC_FAIL

RPMRC_BADSIZE

RPMRC_SHORTREAD

После завершения чтения подписи можно считывать содержимое полей хэдера.

Далее - Чтение хэдера
Назад - Открытие rpm-файла
Содержание