mirror of
https://git.freebsd.org/ports.git
synced 2025-06-20 12:10:31 -04:00
WWW: http://people.redhat.com/jakub/prelink/ PR: ports/176283 Submitted by: Damjan Jovanovic <damjan.jov@gmail.com>
138 lines
2.9 KiB
C
138 lines
2.9 KiB
C
diff -Nur src/verify.c prelink-port/src/verify.c
|
|
--- src/verify.c 2013-02-19 23:54:34.000000000 +0200
|
|
+++ src/verify.c 2013-02-19 23:50:31.000000000 +0200
|
|
@@ -17,7 +17,13 @@
|
|
|
|
#include <config.h>
|
|
#include <assert.h>
|
|
+
|
|
+#if HAVE_ENDIAN_H
|
|
#include <endian.h>
|
|
+#elif HAVE_SYS_ENDIAN_H
|
|
+#include <sys/endian.h>
|
|
+#endif
|
|
+
|
|
#include <errno.h>
|
|
#include <error.h>
|
|
#include <fcntl.h>
|
|
@@ -44,7 +50,9 @@
|
|
q = p + count;
|
|
while (p != q)
|
|
{
|
|
- n = TEMP_FAILURE_RETRY (write (outfd, p, q - p));
|
|
+ do {
|
|
+ n = write (outfd, p, q - p);
|
|
+ } while (n < 0 && errno == EINTR);
|
|
if (n <= 0)
|
|
{
|
|
munmap (b, count);
|
|
@@ -65,7 +73,9 @@
|
|
q = buf + len;
|
|
while (p != q)
|
|
{
|
|
- n = TEMP_FAILURE_RETRY (read (infd, p, q - p));
|
|
+ do {
|
|
+ n = read (infd, p, q - p);
|
|
+ } while (n < 0 && errno == EINTR);
|
|
if (n <= 0)
|
|
return -1;
|
|
p += n;
|
|
@@ -73,7 +83,9 @@
|
|
p = buf;
|
|
while (p != q)
|
|
{
|
|
- n = TEMP_FAILURE_RETRY (write (outfd, p, q - p));
|
|
+ do {
|
|
+ n = write (outfd, p, q - p);
|
|
+ } while (n < 0 && errno == EINTR);
|
|
if (n <= 0)
|
|
return -1;
|
|
p += n;
|
|
@@ -107,7 +119,9 @@
|
|
q = b + len;
|
|
while (p != q)
|
|
{
|
|
- n = TEMP_FAILURE_RETRY (read (fd, p, q - p));
|
|
+ do {
|
|
+ n = read (fd, p, q - p);
|
|
+ } while (n < 0 && errno == EINTR);
|
|
if (n < 0)
|
|
return 1;
|
|
p += n;
|
|
@@ -123,9 +137,17 @@
|
|
{
|
|
off_t off;
|
|
size_t cnt;
|
|
+#if __LINUX__
|
|
struct stat64 st;
|
|
+#else
|
|
+ struct stat st;
|
|
+#endif
|
|
|
|
+#if __LINUX__
|
|
if (fstat64 (fd, &st) < 0)
|
|
+#else
|
|
+ if (fstat (fd, &st) < 0)
|
|
+#endif
|
|
{
|
|
error (0, errno, "%s: couldn't fstat temporary file", filename);
|
|
return 1;
|
|
@@ -186,14 +208,22 @@
|
|
{
|
|
DSO *dso = NULL, *dso2 = NULL;
|
|
int fd = -1, fdorig = -1, fdundone = -1, undo, ret;
|
|
+#if __LINUX__
|
|
struct stat64 st, st2;
|
|
+#else
|
|
+ struct stat st, st2;
|
|
+#endif
|
|
struct prelink_entry *ent;
|
|
GElf_Addr base;
|
|
char buffer[32768], buffer2[32768];
|
|
size_t count;
|
|
char *p, *q;
|
|
|
|
+#if __LINUX__
|
|
if (stat64 (filename, &st) < 0)
|
|
+#else
|
|
+ if (stat (filename, &st) < 0)
|
|
+#endif
|
|
error (EXIT_FAILURE, errno, "Couldn't stat %s", filename);
|
|
|
|
dso = open_dso (filename);
|
|
@@ -214,7 +244,11 @@
|
|
if (undo == dso->ehdr.e_shnum)
|
|
goto not_prelinked;
|
|
|
|
+#if __LINUX__
|
|
if (fstat64 (dso->fd, &st2) < 0)
|
|
+#else
|
|
+ if (fstat (dso->fd, &st2) < 0)
|
|
+#endif
|
|
{
|
|
error (0, errno, "Couldn't fstat %s", filename);
|
|
goto failure;
|
|
@@ -326,7 +360,11 @@
|
|
close_dso (dso2);
|
|
dso2 = NULL;
|
|
|
|
+#if __LINUX__
|
|
if (fstat64 (fdorig, &st2) < 0)
|
|
+#else
|
|
+ if (fstat (fdorig, &st2) < 0)
|
|
+#endif
|
|
{
|
|
error (0, errno, "Couldn't fstat %s", filename);
|
|
goto failure;
|
|
@@ -339,7 +377,11 @@
|
|
goto failure;
|
|
}
|
|
|
|
+#if __LINUX__
|
|
if (fstat64 (fd, &st2) < 0)
|
|
+#else
|
|
+ if (fstat (fd, &st2) < 0)
|
|
+#endif
|
|
{
|
|
error (0, errno, "Couldn't fstat temporary file");
|
|
goto failure;
|