/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
- 2000-2013 Guus Sliepen <guus@tinc-vpn.org>
+ 2000-2015 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static sigset_t emptysigset;
#endif
-static void memory_full(int size) {
- logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size);
- exit(1);
-}
-
/* Some functions the less gifted operating systems might lack... */
#ifdef HAVE_MINGW
}
if(!strchr(program_name, '\\')) {
- GetCurrentDirectory(sizeof command - 1, command + 1);
- strncat(command, "\\", sizeof command - strlen(command));
+ GetCurrentDirectory(sizeof(command) - 1, command + 1);
+ strncat(command, "\\", sizeof(command) - strlen(command));
}
- strncat(command, program_name, sizeof command - strlen(command));
+ strncat(command, program_name, sizeof(command) - strlen(command));
- strncat(command, "\"", sizeof command - strlen(command));
+ strncat(command, "\"", sizeof(command) - strlen(command));
for(argp = g_argv + 1; *argp; argp++) {
space = strchr(*argp, ' ');
- strncat(command, " ", sizeof command - strlen(command));
+ strncat(command, " ", sizeof(command) - strlen(command));
if(space)
- strncat(command, "\"", sizeof command - strlen(command));
+ strncat(command, "\"", sizeof(command) - strlen(command));
- strncat(command, *argp, sizeof command - strlen(command));
+ strncat(command, *argp, sizeof(command) - strlen(command));
if(space)
- strncat(command, "\"", sizeof command - strlen(command));
+ strncat(command, "\"", sizeof(command) - strlen(command));
}
service = CreateService(manager, identname, identname,
openlogger(identname, use_logfile?LOGMODE_FILE:(do_detach?LOGMODE_SYSLOG:LOGMODE_STDERR));
- logger(LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d",
- VERSION, __DATE__, __TIME__, debug_level);
-
- xalloc_fail_func = memory_full;
+ logger(LOG_NOTICE, "tincd %s starting, debug level %d",
+ VERSION, debug_level);
return true;
}
len++;
#endif
#endif
- char var[len];
- strncpy(var, p, len);
+ char var[len + 1];
+ memcpy(var, p, len);
+ var[len] = 0;
#ifdef HAVE_UNSETENV
unsetenv(var);
#else
// We must keep what we putenv() around in memory.
// To do this without memory leaks, keep things in a list and reuse if possible.
static list_t list = {};
- for(list_node_t *node = list->head; node; node++) {
+ for(list_node_t *node = list.head; node; node = node->next) {
char *data = node->data;
if(!strcmp(data, var)) {
putenv(data);
return;
}
}
- char *data = strcmp(var);
- list_insert_tail(list, data);
+ char *data = xstrdup(var);
+ list_insert_tail(&list, data);
putenv(data);
#endif
}