X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=client.c;h=663f22060e1e1e3c6aad88761fa24a0872d848b6;hp=1ece195036b55a51538884f3af7539215c36b714;hb=e57d2b9211bb734b71838142a7936fe6dfdc449c;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/client.c b/client.c index 1ece1950..663f2206 100644 --- a/client.c +++ b/client.c @@ -37,7 +37,7 @@ struct gengetopt_args_info args_info; /* * client log function */ -void para_log(int ll, char* fmt,...) +void para_log(int ll, const char* fmt,...) { va_list argp; FILE *outfd; @@ -240,7 +240,7 @@ interactive_loop: numbytes); buf[numbytes] = '\0'; PARA_ERROR_LOG("received the following instead: %s\n", buf); - goto write_out; + exit(EXIT_FAILURE); } PARA_INFO_LOG("<-- [challenge (%i bytes)]\n", numbytes); /* decrypt challenge number */ @@ -289,18 +289,16 @@ interactive_loop: if (send_buffer(sockfd, EOC_MSG "\n") < 0) exit(EXIT_FAILURE); PARA_NOTICE_LOG("%s", "command sent.\n"); -write_out: received = 0; - /* write server output to stdout */ - while ((numbytes = recv_bin_buffer(sockfd, buf, sizeof(buf))) > 0) { - int ret; - + while ((numbytes = recv_bin_buffer(sockfd, buf, sizeof(buf) - 1)) > 0) { + buf[numbytes] = '\0'; if (!received && strstr(buf, AWAITING_DATA_MSG)) { - PARA_NOTICE_LOG("%s", "<-- awaiting data\n"); - PARA_NOTICE_LOG("%s", "--> sending stdin\n"); + PARA_NOTICE_LOG("%s", "sending stdin\n"); while ((ret = read(STDIN_FILENO, buf, - sizeof(buf))) > 0) - send_bin_buffer(sockfd, buf, ret); + sizeof(buf))) > 0) { + if (send_bin_buffer(sockfd, buf, ret) < 0) + break; + } PARA_NOTICE_LOG("%s", "closing connection\n"); numbytes = 1; break; @@ -314,5 +312,5 @@ write_out: close(sockfd); if (interactive) goto interactive_loop; - return 0; + return ret >= 0? 0: 1; }