Changeset cd63d58 for unix.c


Ignore:
Timestamp:
2008-06-29T12:47:39Z (13 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
f5d1b31
Parents:
1145964
Message:

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)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • unix.c

    r1145964 rcd63d58  
    4040static void sighandler( int signal );
    4141
    42 int main( int argc, char *argv[], char **envp )
     42int main( int argc, char *argv[] )
    4343{
    4444        int i = 0;
     
    135135        {
    136136                char *fn = ipc_master_save_state();
    137                 char **args;
    138                 int n, i;
    139137               
    140138                chdir( old_cwd );
    141139               
    142                 n = 0;
    143                 args = g_new0( char *, argc + 3 );
    144                 args[n++] = argv[0];
    145                 if( fn )
    146                 {
    147                         args[n++] = "-R";
    148                         args[n++] = fn;
    149                 }
    150                 for( i = 1; argv[i] && i < argc; i ++ )
    151                 {
    152                         if( strcmp( argv[i], "-R" ) == 0 )
    153                                 i += 2;
    154                        
    155                         args[n++] = argv[i];
    156                 }
     140                setenv( "_BITLBEE_RESTART_STATE", fn, 1 );
     141                g_free( fn );
    157142               
    158143                close( global.listen_socket );
    159144               
    160                 execve( args[0], args, envp );
     145                if( execv( argv[0], argv ) == -1 )
     146                        /* Apparently the execve() failed, so let's just
     147                           jump back into our own/current main(). */
     148                        /* Need more cleanup code to make this work. */
     149                        return 1; /* main( argc, argv ); */
    161150        }
    162151       
Note: See TracChangeset for help on using the changeset viewer.