diff options
Diffstat (limited to 'src/cssh.c')
-rw-r--r-- | src/cssh.c | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -299,12 +299,50 @@ static void cleanup_sessions( ssh_session **session, ssh_channel **channel, char free( port ); } +typedef enum execution_mode_e { + CSSH_EXECUTE_UNKNOWN, + CSSH_EXECUTE_AS_SSH, + CSSH_EXECUTE_AS_SCP +} execution_mode_e; + +static execution_mode_e determine_execution_mode( const char *argv0 ) +{ + char *b = ssh_basename( argv0 ); + if( b == NULL ) { + return CSSH_EXECUTE_UNKNOWN; + } + + if( strcmp( b, "cssh" ) == 0 ) { + free( b ); + return CSSH_EXECUTE_AS_SSH; + } else if( strcmp( b, "cscp" ) == 0 ) { + free( b ); + return CSSH_EXECUTE_AS_SCP; + } + + free( b ); + return CSSH_EXECUTE_UNKNOWN; +} + int main( int argc, char *argv[] ) { struct gengetopt_args_info args_info; ssh_session *session; int rc; + execution_mode_e execution_mode = determine_execution_mode( argv[0] ); + switch( execution_mode ) { + case CSSH_EXECUTE_UNKNOWN: + fprintf( stderr, "ERROR: binary name unknown, can't determine execution mode\n" ); + exit( EXIT_FAILURE ); + + case CSSH_EXECUTE_AS_SSH: + break; + + case CSSH_EXECUTE_AS_SCP: + break; + } + if( parse_options_and_arguments( argc, argv, &args_info ) != 0 ) { exit( EXIT_FAILURE ); } |