aboutsummaryrefslogtreecommitdiffstats
path: root/unix.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2008-06-29 13:47:39 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2008-06-29 13:47:39 +0100
commitcd63d5822e76a6126bb3017567c9ce2869a44e0b (patch)
tree58177973085309fd2e3089864037c33cccaafe94 /unix.c
parent1145964911d0d7dd5145de6f7b9d4ed8aeeacd79 (diff)
Now using an environment variable instead of a flag to pass state info when
restarting the ForkDaemon. Preparing for a proper fallback when execv() fails. (Bug #425)
Diffstat (limited to 'unix.c')
-rw-r--r--unix.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/unix.c b/unix.c
index d25aeb2e..336b49c4 100644
--- a/unix.c
+++ b/unix.c
@@ -39,7 +39,7 @@ global_t global; /* Against global namespace pollution */
static void sighandler( int signal );
-int main( int argc, char *argv[], char **envp )
+int main( int argc, char *argv[] )
{
int i = 0;
char *old_cwd = NULL;
@@ -134,30 +134,19 @@ int main( int argc, char *argv[], char **envp )
if( global.restart )
{
char *fn = ipc_master_save_state();
- char **args;
- int n, i;
chdir( old_cwd );
- n = 0;
- args = g_new0( char *, argc + 3 );
- args[n++] = argv[0];
- if( fn )
- {
- args[n++] = "-R";
- args[n++] = fn;
- }
- for( i = 1; argv[i] && i < argc; i ++ )
- {
- if( strcmp( argv[i], "-R" ) == 0 )
- i += 2;
-
- args[n++] = argv[i];
- }
+ setenv( "_BITLBEE_RESTART_STATE", fn, 1 );
+ g_free( fn );
close( global.listen_socket );
- execve( args[0], args, envp );
+ if( execv( argv[0], argv ) == -1 )
+ /* Apparently the execve() failed, so let's just
+ jump back into our own/current main(). */
+ /* Need more cleanup code to make this work. */
+ return 1; /* main( argc, argv ); */
}
return( 0 );