summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2008-06-14 20:42:54 +0000
committerJay Freeman (saurik) <saurik@saurik.com>2008-06-14 20:42:54 +0000
commit31ad673ba62d384fcdfa4d6f64d2ca328770da1d (patch)
tree8d3b9564a30d7aa14140aa4fc2fb3a849760211b
parentafbb7c8eb6f3cdbe5aa44d3a518d05412ec2c485 (diff)
downloadldid-31ad673ba62d384fcdfa4d6f64d2ca328770da1d.tar.gz
ldid-31ad673ba62d384fcdfa4d6f64d2ca328770da1d.tar.zst
ldid-31ad673ba62d384fcdfa4d6f64d2ca328770da1d.zip
Maintain permissions during codehashing.
-rw-r--r--ldid.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/ldid.cpp b/ldid.cpp
index d38e6b3..dc1902e 100644
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -45,6 +45,8 @@
#include <vector>
#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
struct fat_header {
uint32_t magic;
@@ -337,6 +339,7 @@ int main(int argc, const char *argv[]) {
const char *path(file->c_str());
const char *base = strrchr(path, '/');
char *temp(NULL), *dir;
+ mode_t mode = 0;
if (base != NULL)
dir = strndup(path, base++ - path + 1);
@@ -506,6 +509,10 @@ int main(int argc, const char *argv[]) {
}
if (temp) {
+ struct stat info;
+ _syscall(stat(path, &info));
+ _syscall(chown(temp, info.st_uid, info.st_gid));
+ _syscall(chmod(temp, info.st_mode));
_syscall(unlink(path));
_syscall(rename(temp, path));
free(temp);