cleanups, avoid null deref, check returns of some more functions, use switch_snprintf to make sure we are null terminating strings.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6816 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Michael Jerris 2007-12-15 20:04:49 +00:00
parent 36bdad81cc
commit 89ba8e6195

View File

@ -83,7 +83,7 @@ static int freeswitch_kill_background()
switch_core_set_globals(); switch_core_set_globals();
/* get the full path of the pid file. */ /* get the full path of the pid file. */
snprintf(path, sizeof(path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pfile); switch_snprintf(path, sizeof(path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pfile);
/* open the pid file */ /* open the pid file */
if ((f = fopen(path, "r")) == 0) { if ((f = fopen(path, "r")) == 0) {
@ -116,9 +116,9 @@ static int freeswitch_kill_background()
} else { } else {
/* signal the event to shutdown */ /* signal the event to shutdown */
SetEvent(shutdown_event); SetEvent(shutdown_event);
}
/* cleanup */ /* cleanup */
CloseHandle(shutdown_event); CloseHandle(shutdown_event);
}
#else #else
/* for unix, send the signal to kill. */ /* for unix, send the signal to kill. */
kill(pid, SIGTERM); kill(pid, SIGTERM);
@ -213,7 +213,7 @@ int main(int argc, char *argv[])
int known_opt; int known_opt;
int high_prio = 0; int high_prio = 0;
switch_core_flag_t flags = SCF_USE_SQL; switch_core_flag_t flags = SCF_USE_SQL;
int status; int ret;
switch_file_t *fd; switch_file_t *fd;
switch_memory_pool_t *pool = NULL; switch_memory_pool_t *pool = NULL;
@ -265,11 +265,13 @@ int main(int argc, char *argv[])
known_opt++; known_opt++;
GetModuleFileName(NULL, exePath, 1024); GetModuleFileName(NULL, exePath, 1024);
snprintf(servicePath, sizeof(servicePath), "%s -service", exePath); snprintf(servicePath, sizeof(servicePath), "%s -service", exePath);
CreateService(handle, if (!CreateService(handle,
SERVICENAME, SERVICENAME,
SERVICENAME, SERVICENAME,
GENERIC_READ | GENERIC_EXECUTE, GENERIC_READ | GENERIC_EXECUTE,
SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, servicePath, NULL, NULL, NULL, NULL, NULL); SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, servicePath, NULL, NULL, NULL, NULL, NULL)) {
fprintf(stderr, "Error installing freeswitch as a service.\n");
}
exit(0); exit(0);
} }
if (argv[x] && !strcmp(argv[x], "-uninstall")) { if (argv[x] && !strcmp(argv[x], "-uninstall")) {
@ -377,11 +379,15 @@ int main(int argc, char *argv[])
known_opt++; known_opt++;
} }
if ((!known_opt || argv[x]) && (!strcmp(argv[x], "-help") || !strcmp(argv[x], "-h") || !strcmp(argv[x], "-?"))) { if (!known_opt || (argv[x] && (!strcmp(argv[x], "-help") || !strcmp(argv[x], "-h") || !strcmp(argv[x], "-?")))) {
printf("%s\n", usageDesc); printf("%s\n", usageDesc);
exit(0); exit(0);
} }
}
if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "FATAL ERROR! Could not initilize APR\n");
return 255;
} }
if (die) { if (die) {
@ -419,17 +425,12 @@ int main(int argc, char *argv[])
} }
#endif #endif
if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
fprintf(stderr, "FATAL ERROR! Could not initilize APR\n");
return 255;
}
switch_core_set_globals(); switch_core_set_globals();
pid = getpid(); pid = getpid();
snprintf(pid_path, sizeof(pid_path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pfile); switch_snprintf(pid_path, sizeof(pid_path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pfile);
snprintf(pid_buffer, sizeof(pid_buffer), "%d", pid); switch_snprintf(pid_buffer, sizeof(pid_buffer), "%d", pid);
pid_len = strlen(pid_buffer); pid_len = strlen(pid_buffer);
apr_pool_create(&pool, NULL); apr_pool_create(&pool, NULL);
@ -456,12 +457,15 @@ int main(int argc, char *argv[])
switch_core_runtime_loop(nc); switch_core_runtime_loop(nc);
status = switch_core_destroy(); ret = switch_core_destroy();
switch_file_close(fd); switch_file_close(fd);
unlink(pid_path);
return status; if (unlink(pid_path) != 0) {
fprintf(stderr, "Failed to delete pid file [%s]\n", pid_path);
}
return ret;
} }
/* For Emacs: /* For Emacs: