1 diff -ur deltarpm-3.4a/applydeltarpm.c deltarpm-3.4b/applydeltarpm.c
2 --- deltarpm-3.4a/applydeltarpm.c 2007-03-06 15:35:16.000000000 +0200
3 +++ deltarpm-3.4b/applydeltarpm.c 2007-07-11 17:36:59.000000000 +0300
21 - prelinked_close(fd);
27 l2 = l > sd->datalen - o ? sd->datalen - o : l;
29 rpmMD5Update(&ctx, buf, l);
32 - prelinked_close(fd);
34 rpmMD5Final(md5, &ctx);
35 if (memcmp(md5, hmd5, 16))
37 diff -ur deltarpm-3.4a/prelink.c deltarpm-3.4b/prelink.c
38 --- deltarpm-3.4a/prelink.c 2005-06-06 15:41:07.000000000 +0300
39 +++ deltarpm-3.4b/prelink.c 2007-07-11 17:42:49.000000000 +0300
41 #include <sys/types.h>
47 elf16(unsigned char *buf, int le)
49 prelinked_open(char *name)
58 if (stat("/usr/sbin/prelink", &stb))
61 fprintf(stderr, "prelink not installed, cannot undo prelinking");
64 - if (prelink_pid != (pid_t)-1)
65 + strcpy(template, "/tmp/deltarpm.XXXXXX");
66 + if ((fd = mkstemp(template)) == -1)
68 - waitpid(prelink_pid, &status, WNOHANG);
69 - prelink_pid = (pid_t)-1;
77 + close(fd); /* prelink renames another tmpfile over our file */
79 if (pid == (pid_t)(-1))
90 + execl("/usr/sbin/prelink", "prelink", "-o", template, "-u", name, (char *)0);
91 + perror("/usr/sbin/prelink");
96 + while (waitpid(pid, &status, 0) == (pid_t)-1)
98 + if ((fd = open(template, O_RDONLY)) == -1)
105 - execl("/usr/sbin/prelink", "prelink", "-y", name, (char *)0);
106 - perror("/usr/sbin/prelink");
113 -prelinked_close(int fd)
118 - if (prelink_pid != (pid_t)-1)
120 - kill(prelink_pid, SIGPIPE);
121 - if (waitpid(prelink_pid, &status, 0) == prelink_pid)
122 - prelink_pid = (pid_t)-1;
125 diff -ur deltarpm-3.4a/prelink.h deltarpm-3.4b/prelink.h
126 --- deltarpm-3.4a/prelink.h 2005-06-02 20:01:07.000000000 +0300
127 +++ deltarpm-3.4b/prelink.h 2007-07-11 17:36:59.000000000 +0300
129 extern int is_prelinked(int fd, unsigned char *buf, int l);
130 extern int prelinked_open(char *name);
131 -extern void prelinked_close(int fd);