📄 osconfig.c
字号:
RegCloseKey (hKey); } else return 5; } } else { if (IsWinNT ()) { switch (UninstallService (servicename)) { case 0: break; case 1: return GNUNET_NO; case 2: return 2; case 3: return 6; case 4: return 3; default: return GNUNET_SYSERR; } } else { HKEY hKey; if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) { RegDeleteValue (hKey, servicename); RegCloseKey (hKey); } else return 5; } } return GNUNET_YES;#else struct stat buf; int ret; int i; char *initscript; i = strlen (application) - 1; if (i <= 0) return GNUNET_SYSERR; while ((i > 0) && (application[i] != DIR_SEPARATOR)) i--; initscript = GNUNET_malloc (strlen (&application[i]) + 13); strcpy (initscript, "/etc/init.d/"); strcat (initscript, &application[i]); /* Unix */ if ((ACCESS ("/usr/sbin/update-rc.d", X_OK) != 0)) { if ((ACCESS ("/sbin/rc-update", X_OK) != 0)) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "access", "/usr/sbin/update-rc.d"); GNUNET_free (initscript); return GNUNET_SYSERR; } } /* Debian */ if (doAutoStart) { if (ACCESS (application, X_OK) != 0) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "access", application); } if (STAT (initscript, &buf) == -1) { /* create init file */ FILE *f = FOPEN (initscript, "w"); if (f == NULL) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "fopen", "/etc/init.d/gnunetd"); GNUNET_free (initscript); return 2; } fprintf (f, "#!/bin/sh\n" "#\n" "# Automatically created by %s\n" "#\n" "\n" "PIDFILE=/var/run/gnunetd/%s.pid\n" "APPNAME=%s\n" "\n" "case \"$1\" in\n" " start)\n" " echo -n \"Starting $APPNAME: \"\n" " %s\n && echo ok || echo failed\n" " ;;\n" " stop)\n" " echo -n \"Stopping $APPNAME: \"\n" " kill `cat $PIDFILE`\n && echo ok || echo failed\n" " ;;\n" " reload)\n" " echo -n \"Reloading $APPNAME: \"\n" " kill -HUP `cat $PIDFILE`\n && echo ok || echo failed\n" " ;;\n" " restart|force-reload)\n" " echo \"Restarting $APPNAME...\"\n" " $0 stop\n" " sleep 1\n" " $0 start\n" " ;;\n" " *)\n" " echo \"Usage: %s {start|stop|reload|restart|force-reload}\" >&2\n" " exit 1\n" " ;;\n" "\n" "esac\n" "exit 0\n", "gnunet-setup", application, servicename, application, initscript); fclose (f); if (0 != CHMOD (initscript, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "chmod", initscript); GNUNET_free (initscript); return GNUNET_SYSERR; } } if (STAT (initscript, &buf) != -1) { errno = 0; if (ACCESS ("/usr/sbin/update-rc.d", W_OK) == 0) { ret = system ("/usr/sbin/update-rc.d gnunetd defaults"); if (ret != 0) { if (errno != 0) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "system", "/usr/sbin/update-rc.d"); } else { GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, _ ("Command `%s' failed with error code %u\n"), "/usr/sbin/update-rc.d gnunetd defaults", WEXITSTATUS (ret)); } GNUNET_free (initscript); return GNUNET_SYSERR; } } else if (ACCESS ("/sbin/rc-update", W_OK) == 0) { ret = system ("/sbin/rc-update add gnunetd default"); if (ret != 0) { if (errno != 0) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "system", "/sbin/rc-update"); } else { GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, _ ("Command `%s' failed with error code %u\n"), "/sbin/rc-update add gnunetd default", WEXITSTATUS (ret)); } GNUNET_free (initscript); return GNUNET_SYSERR; } } } GNUNET_free (initscript); return GNUNET_YES; } else { /* REMOVE autostart */ if ((UNLINK (initscript) == -1) && (errno != ENOENT)) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "unlink", initscript); GNUNET_free (initscript); return GNUNET_SYSERR; } errno = 0; if (ACCESS ("/usr/sbin/update-rc.d", W_OK) == 0) { ret = system ("/usr/sbin/update-rc.d gnunetd remove"); if (ret != 0) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "system", "/usr/sbin/update-rc.d"); GNUNET_free (initscript); return GNUNET_SYSERR; } } else if (ACCESS ("/sbin/rc-update", W_OK) == 0) { ret = system ("/sbin/rc-update del gnunetd"); if (ret != 0) { GNUNET_GE_LOG_STRERROR_FILE (ectx, GNUNET_GE_WARNING | GNUNET_GE_USER | GNUNET_GE_ADMIN | GNUNET_GE_IMMEDIATE, "system", "/sbin/rc-update"); GNUNET_free (initscript); return GNUNET_SYSERR; } } GNUNET_free (initscript); return GNUNET_YES; } GNUNET_free (initscript);#endif return GNUNET_SYSERR;}/* end of osconfig.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -