@@ -78,12 +78,6 @@ static void remove_node(struct chan_X11_list *elem)
7878 }
7979}
8080
81- static void session_shutdown (LIBSSH2_SESSION * session )
82- {
83- libssh2_session_disconnect (session , "Normal Shutdown" );
84- libssh2_session_free (session );
85- }
86-
8781static int _raw_mode (void )
8882{
8983 int rc ;
@@ -276,7 +270,7 @@ int main(int argc, char *argv[])
276270 libssh2_socket_t sock = LIBSSH2_INVALID_SOCKET ;
277271 struct sockaddr_in sin ;
278272 LIBSSH2_SESSION * session = NULL ;
279- LIBSSH2_CHANNEL * channel ;
273+ LIBSSH2_CHANNEL * channel = NULL ;
280274 char * username = NULL ;
281275 char * password = NULL ;
282276 size_t bufsiz = 8193 ;
@@ -306,7 +300,7 @@ int main(int argc, char *argv[])
306300 else {
307301 fprintf (stderr , "Usage: %s destination username password" ,
308302 argv [0 ]);
309- return - 1 ;
303+ return 1 ;
310304 }
311305
312306 if (argc > 4 ) {
@@ -323,7 +317,7 @@ int main(int argc, char *argv[])
323317 sock = socket (AF_INET , SOCK_STREAM , 0 );
324318 if (sock == LIBSSH2_INVALID_SOCKET ) {
325319 fprintf (stderr , "failed to open socket.\n" );
326- return - 1 ;
320+ return 1 ;
327321 }
328322
329323 sin .sin_family = AF_INET ;
@@ -332,14 +326,14 @@ int main(int argc, char *argv[])
332326
333327 if (connect (sock , (struct sockaddr * )(& sin ), sizeof (struct sockaddr_in ))) {
334328 fprintf (stderr , "Failed to established connection.\n" );
335- return - 1 ;
329+ return 1 ;
336330 }
337331 /* Open a session */
338332 session = libssh2_session_init ();
339333 rc = libssh2_session_handshake (session , sock );
340334 if (rc ) {
341335 fprintf (stderr , "Failed Start the SSH session\n" );
342- return - 1 ;
336+ return 1 ;
343337 }
344338
345339 if (set_debug_on == 1 )
@@ -360,59 +354,41 @@ int main(int argc, char *argv[])
360354 rc = libssh2_userauth_password (session , username , password );
361355 if (rc ) {
362356 fprintf (stderr , "Failed to authenticate\n" );
363- session_shutdown (session );
364- shutdown (sock , SHUT_RDWR );
365- LIBSSH2_SOCKET_CLOSE (sock );
366- return -1 ;
357+ goto shutdown ;
367358 }
368359
369360 /* Open a channel */
370361 channel = libssh2_channel_open_session (session );
371362 if (!channel ) {
372363 fprintf (stderr , "Failed to open a new channel\n" );
373- session_shutdown (session );
374- shutdown (sock , SHUT_RDWR );
375- LIBSSH2_SOCKET_CLOSE (sock );
376- return -1 ;
364+ goto shutdown ;
377365 }
378366
379367 /* Request a PTY */
380368 rc = libssh2_channel_request_pty (channel , "xterm" );
381369 if (rc ) {
382370 fprintf (stderr , "Failed to request a pty\n" );
383- session_shutdown (session );
384- shutdown (sock , SHUT_RDWR );
385- LIBSSH2_SOCKET_CLOSE (sock );
386- return -1 ;
371+ goto shutdown ;
387372 }
388373
389374 /* Request X11 */
390375 rc = libssh2_channel_x11_req (channel , 0 );
391376 if (rc ) {
392377 fprintf (stderr , "Failed to request X11 forwarding\n" );
393- session_shutdown (session );
394- shutdown (sock , SHUT_RDWR );
395- LIBSSH2_SOCKET_CLOSE (sock );
396- return -1 ;
378+ goto shutdown ;
397379 }
398380
399381 /* Request a shell */
400382 rc = libssh2_channel_shell (channel );
401383 if (rc ) {
402384 fprintf (stderr , "Failed to open a shell\n" );
403- session_shutdown (session );
404- shutdown (sock , SHUT_RDWR );
405- LIBSSH2_SOCKET_CLOSE (sock );
406- return -1 ;
385+ goto shutdown ;
407386 }
408387
409388 rc = _raw_mode ();
410389 if (rc ) {
411390 fprintf (stderr , "Failed to entered in raw mode\n" );
412- session_shutdown (session );
413- shutdown (sock , SHUT_RDWR );
414- LIBSSH2_SOCKET_CLOSE (sock );
415- return -1 ;
391+ goto shutdown ;
416392 }
417393
418394 memset (& w_size , 0 , sizeof (struct winsize ));
@@ -501,15 +477,30 @@ int main(int argc, char *argv[])
501477 }
502478 }
503479
480+ shutdown :
481+
504482 if (channel ) {
505483 libssh2_channel_free (channel );
506484 channel = NULL ;
507485 }
486+
487+ if (session ) {
488+ libssh2_session_disconnect (session , "Normal Shutdown" );
489+ libssh2_session_free (session );
490+ }
491+
492+ if (sock != LIBSSH2_INVALID_SOCKET ) {
493+ shutdown (sock , 2 );
494+ LIBSSH2_SOCKET_CLOSE (sock );
495+ }
496+
497+ fprintf (stderr , "all done\n" );
498+
508499 _normal_mode ();
509500
510501 libssh2_exit ();
511502
512- return 0 ;
503+ return rc ? 1 : 0 ;
513504}
514505
515506#else
0 commit comments