summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordarealshinji <djcj@gmx.de>2015-07-13 16:54:57 (GMT)
committerdarealshinji <djcj@gmx.de>2015-07-13 16:54:57 (GMT)
commit8eb28c00b6a78928cfa91728b1eba911a4ef49c1 (patch)
treee79bee9f02f685cec04a692f9d664eccf107cc28
parentf6886c2c33a1cf8771163919f3d20f6340c0ce38 (diff)
downloadpatchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.zip
patchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.tar.gz
patchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.tar.bz2
Don't create a temporary copy to not break hardlinks (fixes #32)
-rw-r--r--src/patchelf.cc39
1 files changed, 9 insertions, 30 deletions
diff --git a/src/patchelf.cc b/src/patchelf.cc
index df75593..80b2aa0 100644
--- a/src/patchelf.cc
+++ b/src/patchelf.cc
@@ -17,16 +17,6 @@
#include <fcntl.h>
#include <limits.h>
-#ifdef HAVE_ATTR_LIBATTR_H
-# include <attr/libattr.h>
-#endif
-#ifdef HAVE_SYS_ACL_H
-# include <sys/acl.h>
-#endif
-#ifdef HAVE_ACL_LIBACL_H
-# include <acl/libacl.h>
-#endif
-
#include "elf.h"
using namespace std;
@@ -378,28 +368,17 @@ void ElfFile<ElfFileParamNames>::sortShdrs()
}
-static void writeFile(string fileName, mode_t fileMode)
+static void writeFile(string fileName)
{
- string fileName2 = fileName + "_patchelf_tmp";
-
- int fd = open(fileName2.c_str(),
- O_CREAT | O_TRUNC | O_WRONLY, 0700);
- if (fd == -1) error("open");
+ int fd = open(fileName.c_str(), O_TRUNC | O_WRONLY);
+ if (fd == -1)
+ error("open");
- if (write(fd, contents, fileSize) != fileSize) error("write");
-
- if (close(fd) != 0) error("close");
-
-#if defined(HAVE_ATTR_COPY_FILE)
- if (attr_copy_file(fileName.c_str(), fileName2.c_str(), 0, 0) != 0) error("attr_copy_file");
-#endif
-#if defined(HAVE_PERM_COPY_FILE)
- if (perm_copy_file(fileName.c_str(), fileName2.c_str(), 0) != 0) error("perm_copy_file");
-#else
- if (chmod(fileName2.c_str(), fileMode) != 0) error("chmod");
-#endif
+ if (write(fd, contents, fileSize) != fileSize)
+ error("write");
- if (rename(fileName2.c_str(), fileName.c_str()) != 0) error("rename");
+ if (close(fd) != 0)
+ error("close");
}
@@ -1376,7 +1355,7 @@ static void patchElf2(ElfFile & elfFile, mode_t fileMode)
if (elfFile.isChanged()){
elfFile.rewriteSections();
- writeFile(fileName, fileMode);
+ writeFile(fileName);
}
}