Вспомним структуру файла rpm-пакета (Формат файла rpm) - начальный идентификатор, подпись (сигнатура), заголовок пакета (бинарный хэдер), нагрузка (cpio-архив с файлами пакета).
Наиболее важная информация о rpm-файле находится в хэдере. Она-то в основном и требуется для работы с пакетами. Однако, чтобы установить указатель смещения в позицию начала чтения хэдера, все равно потребуеся прочитать начальный идентификатор и подпись, даже если они не интересуют вашу программу. Для чтения начального идентификатора применяют функцию readLead:
int readLead(FD_t fd, struct rpmlead *lead); |
Функция readLead возвращает 0 в случае успешного считывания начального идентификатора и 1 в случае ошибки. Считанными данными заполняется структура rpmlead:
struct rpmlead { |
Для чтения до конца сигнатуры вызывается rpmReadSignature:
rpmRC rpmReadSignature(FD_t fd, |
Возможные коды возврата показаны ниже:
Code |
RPMRC_OK |
RPMRC_BADMAGIC |
RPMRC_FAIL |
RPMRC_BADSIZE |
RPMRC_SHORTREAD |
После завершения чтения подписи можно считывать содержимое полей хэдера.