]> git.saurik.com Git - cydia.git/blobdiff - setnsfpn.cpp
Cydia no longer runs as root. (WE FINALLY DID IT!)
[cydia.git] / setnsfpn.cpp
index 88dbffddeeb728aba01d1472629a705f0741a42a..b129858afa5613f77feadc8d6e39945d44b436f9 100644 (file)
     } \
 } _value; })
 
-int $getdirentries(int, char *, int, long *) __asm("_getdirentries");
-
-struct $dirent {
-    __uint32_t d_ino;
-    __uint16_t d_reclen;
-    __uint8_t  d_type;
-    __uint8_t  d_namlen;
-    char d_name[__DARWIN_MAXNAMLEN + 1];
-};
-
-#define getdirentries $getdirentries
-#define dirent $dirent
+extern "C" int __getdirentries64(int, char *, int, long *);
 
 enum Recurse {
     RecurseYes,
@@ -106,7 +95,7 @@ static int setnsfpn(const char *path, size_t before, Recurse recurse) {
     if (recurse == RecurseYes)
         for (long address(0);;) {
             char buffer[4096];
-            int size(_syscall(getdirentries(fd, buffer, sizeof(buffer), &address)));
+            int size(_syscall(__getdirentries64(fd, buffer, sizeof(buffer), &address)));
             if (size == 0)
                 break;
 
@@ -116,7 +105,7 @@ static int setnsfpn(const char *path, size_t before, Recurse recurse) {
                 const char *name(dir->d_name);
                 size_t after(strlen(name));
 
-                if (false);
+                if (dir->d_ino == 0);
                 else if (after == 1 && name[0] == '.');
                 else if (after == 2 && name[0] == '.' && name[1] == '.');
                 else {
@@ -134,10 +123,12 @@ static int setnsfpn(const char *path, size_t before, Recurse recurse) {
                             return -1;
 
                         case DT_DIR:
-                            setnsfpn(sub, both, RecurseYes);
+                            if (setnsfpn(sub, both, RecurseYes) != 0)
+                                return -1;
                             break;
                         case DT_REG:
-                            setnsfpn(sub, both, RecurseNo);
+                            if (setnsfpn(sub, both, RecurseNo) != 0)
+                                return -1;
                             break;
                     }
                 }