[devel] Re: librpm payload

Sergey Vlasov vsu на altlinux.ru
Пн Сен 5 13:09:23 MSD 2005


On Mon, Sep 05, 2005 at 07:43:57AM +0400, Alexey Tourbin wrote:
> On Sat, Sep 03, 2005 at 01:00:07AM +0400, Dmitry V. Levin wrote:
> > librpmio может предоставить cpio-архив в виде обычного потока, для
> > которого, кажется, применимы операции типа fsetpos(3).  Но поскольку этот
> > cpio-архив на практике запакован, прозрачной распаковки всё равно не
> > миновать.  Считать первые N байт каждого файла этого cpio-потока librpmio
> > вряд ли поможет, лучше поискать другие средства.
> 
> Как читать поток cpio, я разобрался.  Теперь дальше, как парсить cpio?

Его даже ядро читать умеет (в initramfs) ;)

> У него какой-то хитрый padding (см. TODO).  Как libmagic подключить --
> вроде ясно, magic_buffer().

#define N_ALIGN(len) ((((len) + 1) & ~3) + 2)
...
	parse_header(collected);
	/* тут this_header уже продвинут за struct cpio_header */
	next_header = this_header + N_ALIGN(name_len) + body_len;
	next_header = (next_header + 3) & ~3;

Правда, после SkipIt (пропуск до позиции next_header) там есть ещё
Reset:

static int __init do_reset(void)
{
	while(count && *victim == '\0')
		eat(1);
	if (count && (this_header & 3))
		error("broken padding");
	return 1;
}
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : http://lists.altlinux.ru/pipermail/devel/attachments/20050905/fcd84edb/attachment.bin


Подробная информация о списке рассылки Devel