diff options
Diffstat (limited to 'source/a/rpm2tgz/rpmoffset.c')
-rw-r--r-- | source/a/rpm2tgz/rpmoffset.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/source/a/rpm2tgz/rpmoffset.c b/source/a/rpm2tgz/rpmoffset.c new file mode 100644 index 00000000..57af397c --- /dev/null +++ b/source/a/rpm2tgz/rpmoffset.c @@ -0,0 +1,24 @@ + +/* Find how deeply inside an .RPM the real data is */ +/* kept, and report the offset in bytes */ + +/* Wouldn't it be a lot more sane if we could just untar these things? */ + +#include <stdlib.h> + +/* These offsets keep getting bigger, so we're going to just bite a 2MB */ +/* chunk of RAM right away so that we have enough. Yeah, horrible */ +/* quick and dirty implementation, but hey -- it gets the job done. */ + +#define RPMBUFSIZ 2097152 + +main() +{ + char *buff = malloc(RPMBUFSIZ),*eb,*p; + for (p = buff, eb = buff + read(0,buff,RPMBUFSIZ); p < eb; p++) + if ((*p == '\037' && p[1] == '\213' && p[2] == '\010') || + (*p == 'B' && p[1] == 'Z' && p[2] == 'h' && '1' <= p[3] && p[3] <= '9' )) + printf("%d\n",p - buff), + exit(0); + exit(1); +} |