#include #include #include #include #include #include int main(void) { pid_t pid; int status; char initpath[256]; pid = vfork (); if (pid == 0) { execl ("/sbin/ldconfig", "/sbin/ldconfig", NULL); _exit (1); } else if (pid < 0) { _exit (1); } if (waitpid (0, &status, 0) != pid || !WIFEXITED (status)) { _exit (1); } if (WEXITSTATUS (status)) _exit (WEXITSTATUS (status)); if (! utimes (GCONV_MODULES_CACHE, NULL)) { pid = vfork (); if (pid == 0) { execl ("/usr/sbin/iconvconfig", "/usr/sbin/iconvconfig", NULL); _exit (1); } else if (pid < 0) { _exit (1); } if (waitpid (0, &status, 0) != pid || !WIFEXITED (status)) { _exit (1); } if (WEXITSTATUS (status)) _exit (WEXITSTATUS (status)); } /* Check if telinit is available and the init fifo as well. */ if (access ("/sbin/telinit", X_OK) || access ("/dev/initctl", F_OK)) _exit (0); /* Check if we are not inside of some chroot, because we'd just timeout and leave /etc/initrunlvl. */ if (readlink ("/proc/1/exe", initpath, 256) <= 0 || readlink ("/proc/1/root", initpath, 256) <= 0) _exit (0); pid = vfork (); if (pid == 0) { execl ("/sbin/telinit", "/sbin/telinit", "u", NULL); _exit (1); } else if (pid < 0) { _exit (1); } if (waitpid (0, &status, 0) != pid || !WIFEXITED (status)) { _exit (1); } _exit(0); } int __libc_start_main (int (*main) (void), int argc, char **argv, void (*init) (void), void (*fini) (void), void (*rtld_fini) (void), void * stack_end) { main(); return 0; }