aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2011-02-08 10:54:25 +0100
committerAndreas Schneider <asn@cryptomilk.org>2011-02-08 10:54:25 +0100
commitac785e0aa3e2700cf8955031866e022010ca8201 (patch)
tree02376f6694d129fe318378e5014fd16d36245677 /examples
parent541519e563a1ef481a1b45959d1060ee31d95f32 (diff)
downloadlibssh-ac785e0aa3e2700cf8955031866e022010ca8201.tar.gz
libssh-ac785e0aa3e2700cf8955031866e022010ca8201.tar.xz
libssh-ac785e0aa3e2700cf8955031866e022010ca8201.zip
examples: The exec example should be like tutorial one.
Diffstat (limited to 'examples')
-rw-r--r--examples/exec.c84
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;
}