diff options
author | darealshinji <djcj@gmx.de> | 2015-07-13 16:54:57 (GMT) |
---|---|---|
committer | darealshinji <djcj@gmx.de> | 2015-07-13 16:54:57 (GMT) |
commit | 8eb28c00b6a78928cfa91728b1eba911a4ef49c1 (patch) | |
tree | e79bee9f02f685cec04a692f9d664eccf107cc28 /src/patchelf.cc | |
parent | f6886c2c33a1cf8771163919f3d20f6340c0ce38 (diff) | |
download | patchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.zip patchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.tar.gz patchelf-8eb28c00b6a78928cfa91728b1eba911a4ef49c1.tar.bz2 |
Don't create a temporary copy to not break hardlinks (fixes #32)
Diffstat (limited to 'src/patchelf.cc')
-rw-r--r-- | src/patchelf.cc | 39 |
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); } } |