From 8eb28c00b6a78928cfa91728b1eba911a4ef49c1 Mon Sep 17 00:00:00 2001 From: darealshinji Date: Mon, 13 Jul 2015 18:54:57 +0200 Subject: Don't create a temporary copy to not break hardlinks (fixes #32) --- src/patchelf.cc | 39 +++++++++------------------------------ 1 file 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 #include -#ifdef HAVE_ATTR_LIBATTR_H -# include -#endif -#ifdef HAVE_SYS_ACL_H -# include -#endif -#ifdef HAVE_ACL_LIBACL_H -# include -#endif - #include "elf.h" using namespace std; @@ -378,28 +368,17 @@ void ElfFile::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); } } -- cgit v0.12