diff options
author | Andreas Schneider <asn@cryptomilk.org> | 2011-02-08 10:54:25 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2011-02-08 10:54:25 +0100 |
commit | ac785e0aa3e2700cf8955031866e022010ca8201 (patch) | |
tree | 02376f6694d129fe318378e5014fd16d36245677 | |
parent | 541519e563a1ef481a1b45959d1060ee31d95f32 (diff) | |
download | libssh-ac785e0aa3e2700cf8955031866e022010ca8201.tar.gz libssh-ac785e0aa3e2700cf8955031866e022010ca8201.tar.xz libssh-ac785e0aa3e2700cf8955031866e022010ca8201.zip |
examples: The exec example should be like tutorial one.
-rw-r--r-- | examples/exec.c | 84 |
1 files changed, 44 insertions, 40 deletions
diff --git a/examples/exec.c b/examples/exec.c index 1f6fa29..31e981c 100644 --- a/examples/exec.c +++ b/examples/exec.c @@ -5,53 +5,57 @@ #include "examples_common.h" int main(void) { - ssh_session session; - ssh_channel channel; - char buffer[256]; - int rc; - - session = connect_ssh("localhost", NULL, 0); - if (session == NULL) { - return 1; - } + ssh_session session; + ssh_channel channel; + char buffer[256]; + uint32_t nbytes; + int rc; + + session = connect_ssh("localhost", NULL, 0); + if (session == NULL) { + return 1; + } - channel = ssh_channel_new(session);; - if (channel == NULL) { - ssh_disconnect(session); - return 1; - } + channel = ssh_channel_new(session);; + if (channel == NULL) { + ssh_disconnect(session); + ssh_free(session); + return 1; + } - rc = ssh_channel_open_session(channel); - if (rc < 0) { - ssh_channel_close(channel); - ssh_disconnect(session); - return 1; - } + rc = ssh_channel_open_session(channel); + if (rc < 0) { + goto failed; + } - rc = ssh_channel_request_exec(channel, "ps aux"); - if (rc < 0) { - ssh_channel_close(channel); - ssh_disconnect(session); - return 1; - } + rc = ssh_channel_request_exec(channel, "lsof"); + if (rc < 0) { + goto failed; + } + nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0); + while (nbytes > 0) { + if (fwrite(buffer, 1, nbytes, stdout) != nbytes) { + goto failed; + } + nbytes = ssh_channel_read(channel, buffer, sizeof(buffer), 0); + } - while ((rc = ssh_channel_read(channel, buffer, sizeof(buffer), 0)) > 0) { - if (fwrite(buffer, 1, rc, stdout) != (unsigned int) rc) { - return 1; + if (nbytes < 0) { + goto failed; } - } - - if (rc < 0) { - ssh_channel_close(channel); - ssh_disconnect(session); - return 1; - } - ssh_channel_send_eof(channel); - ssh_channel_close(channel); + ssh_channel_send_eof(channel); + ssh_channel_close(channel); + ssh_channel_free(channel); + ssh_free(session); - ssh_disconnect(session); + return 0; +failed: + ssh_channel_close(channel); + ssh_channel_free(channel); + ssh_disconnect(session); + ssh_free(session); - return 0; + return 1; } |