daemon: move daemonize() to libgit.a

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Nguyễn Thái Ngọc Duy committed Feb 8, 2014 at 14:08 UTC de0957ce2e88b8ad639f1e4a7197eb556e114a1c
3 files changed +29 -26
cache.h
+1
@@ -434,6 +434,7 @@ extern int set_git_dir_init(const char *git_dir, const char *real_git_dir, int);
434 extern int init_db(const char *template_dir, unsigned int flags);
435
436 extern void sanitize_stdfds(void);
437 +extern int daemonize(void);
438
439 #define alloc_nr(x) (((x)+16)*3/2)
440
daemon.c
+4 -26
@@ -1056,11 +1056,6 @@ static void drop_privileges(struct credentials *cred)
1056 /* nothing */
1057 }
1058
1059 -static void daemonize(void)
1060 -{
1061 - die("--detach not supported on this platform");
1062 -}
1063 -
1059 static struct credentials *prepare_credentials(const char *user_name,
1060 const char *group_name)
1061 {
@@ -1102,24 +1097,6 @@ static struct credentials *prepare_credentials(const char *user_name,
1097
1098 return &c;
1099 }
1105 -
1106 -static void daemonize(void)
1107 -{
1108 - switch (fork()) {
1109 - case 0:
1110 - break;
1111 - case -1:
1112 - die_errno("fork failed");
1113 - default:
1114 - exit(0);
1115 - }
1116 - if (setsid() == -1)
1117 - die_errno("setsid failed");
1118 - close(0);
1119 - close(1);
1120 - close(2);
1121 - sanitize_stdfds();
1122 -}
1100 #endif
1101
1102 static void store_pid(const char *path)
@@ -1333,9 +1310,10 @@ int main(int argc, char **argv)
1310 if (inetd_mode || serve_mode)
1311 return execute();
1312
1336 - if (detach)
1337 - daemonize();
1338 - else
1313 + if (detach) {
1314 + if (daemonize())
1315 + die("--detach not supported on this platform");
1316 + } else
1317 sanitize_stdfds();
1318
1319 if (pid_file)
setup.c
+24
@@ -787,3 +787,27 @@ void sanitize_stdfds(void)
787 if (fd > 2)
788 close(fd);
789 }
790 +
791 +int daemonize(void)
792 +{
793 +#ifdef NO_POSIX_GOODIES
794 + errno = ENOSYS;
795 + return -1;
796 +#else
797 + switch (fork()) {
798 + case 0:
799 + break;
800 + case -1:
801 + die_errno("fork failed");
802 + default:
803 + exit(0);
804 + }
805 + if (setsid() == -1)
806 + die_errno("setsid failed");
807 + close(0);
808 + close(1);
809 + close(2);
810 + sanitize_stdfds();
811 + return 0;
812 +#endif
813 +}