Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • unix.c

    rcd63d58 r51bbec0  
    4040static void sighandler( int signal );
    4141
    42 int main( int argc, char *argv[] )
     42int main( int argc, char *argv[], char **envp )
    4343{
    4444        int i = 0;
     
    135135        {
    136136                char *fn = ipc_master_save_state();
     137                char **args;
     138                int n, i;
    137139               
    138140                chdir( old_cwd );
    139141               
    140                 setenv( "_BITLBEE_RESTART_STATE", fn, 1 );
    141                 g_free( fn );
     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                }
    142157               
    143158                close( global.listen_socket );
    144159               
    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 ); */
     160                execve( args[0], args, envp );
    150161        }
    151162       
Note: See TracChangeset for help on using the changeset viewer.