aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2008-05-31 14:33:46 -0400
committerMike Frysinger <vapier@gentoo.org>2008-05-31 14:33:46 -0400
commit441e82c9832e2d65fc2db324872928471307dbc4 (patch)
tree7eb0e2d5c922e3c3c00b63fed2e20150e53c9848 /rpmoffset.c
downloadrpm2targz-441e82c9832e2d65fc2db324872928471307dbc4.tar.gz
rpm2targz-441e82c9832e2d65fc2db324872928471307dbc4.tar.bz2
rpm2targz-441e82c9832e2d65fc2db324872928471307dbc4.zip
import rpm2targz-9.0 unmodifiedv9.0
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'rpmoffset.c')
-rw-r--r--rpmoffset.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/rpmoffset.c b/rpmoffset.c
new file mode 100644
index 0000000..ac5984c
--- /dev/null
+++ b/rpmoffset.c
@@ -0,0 +1,23 @@
+
+/* 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')
+ printf("%d\n",p - buff),
+ exit(0);
+ exit(1);
+}