X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=chat%2Fchat.c;h=64d96c230bfcd943c28e9182711c7fbaee7d20ad;hb=eff574c871822c7e2788aa8a928f2480fa7a6cb3;hp=1639b3e440692f6bbb92da8ab60314d5ad4e15d3;hpb=c58bf2e8023dd846683f09cb00e15d64143dac8c;p=ppp.git diff --git a/chat/chat.c b/chat/chat.c index 1639b3e..64d96c2 100644 --- a/chat/chat.c +++ b/chat/chat.c @@ -201,7 +201,7 @@ SIGTYPE sighup (int signo); void unalarm (void); void init (void); void set_tty_parameters (void); -void echo_stderr (int); +int echo_stderr (int); void break_sequence (void); void terminate (int status); void do_file (char *chat_file); @@ -210,7 +210,7 @@ int put_string (register char *s); int write_char (int c); int put_char (int c); int get_char (void); -void chat_send (register char *s); +int chat_send (register char *s); char *character (int c); void chat_expect (register char *s); char *clean (register char *s, int sending); @@ -983,16 +983,18 @@ char *character(int c) /* * process the reply string */ -void chat_send (register char *s) +int chat_send (register char *s) { char file_data[STR_LEN]; + int len, ret = 0; if (say_next) { say_next = 0; s = clean(s, 1); - write(2, s, strlen(s)); + len = strlen(s); + ret = write(2, s, len) != len; free(s); - return; + return ret; } if (hup_next) { @@ -1001,13 +1003,13 @@ void chat_send (register char *s) signal(SIGHUP, SIG_IGN); else signal(SIGHUP, sighup); - return; + return 0; } if (echo_next) { echo_next = 0; echo = (strcmp(s, "ON") == 0); - return; + return 0; } if (abort_next) { @@ -1020,15 +1022,14 @@ void chat_send (register char *s) s1 = clean(s, 0); - if (strlen(s1) > strlen(s) - || strlen(s1) + 1 > sizeof(fail_buffer)) + if (strlen(s1) + 1 > sizeof(fail_buffer)) fatal(1, "Illegal or too-long ABORT string ('%v')", s); abort_string[n_aborts++] = s1; if (verbose) - msgf("abort on (%v)", s); - return; + msgf("abort on (%v)", s1); + return 0; } if (clear_abort_next) { @@ -1041,8 +1042,7 @@ void chat_send (register char *s) s1 = clean(s, 0); - if (strlen(s1) > strlen(s) - || strlen(s1) + 1 > sizeof(fail_buffer)) + if (strlen(s1) + 1 > sizeof(fail_buffer)) fatal(1, "Illegal or too-long CLR_ABORT string ('%v')", s); old_max = n_aborts; @@ -1053,13 +1053,13 @@ void chat_send (register char *s) pack++; n_aborts--; if (verbose) - msgf("clear abort on (%v)", s); + msgf("clear abort on (%v)", s1); } } free(s1); if (pack) pack_array(abort_string,old_max); - return; + return 0; } if (report_next) { @@ -1070,15 +1070,14 @@ void chat_send (register char *s) fatal(2, "Too many REPORT strings"); s1 = clean(s, 0); - if (strlen(s1) > strlen(s) - || strlen(s1) + 1 > sizeof(fail_buffer)) + if (strlen(s1) + 1 > sizeof(fail_buffer)) fatal(1, "Illegal or too-long REPORT string ('%v')", s); report_string[n_reports++] = s1; if (verbose) - msgf("report (%v)", s); - return; + msgf("report (%v)", s1); + return 0; } if (clear_report_next) { @@ -1091,8 +1090,7 @@ void chat_send (register char *s) s1 = clean(s, 0); - if (strlen(s1) > strlen(s) - || strlen(s1) + 1 > sizeof(fail_buffer)) + if (strlen(s1) + 1 > sizeof(fail_buffer)) fatal(1, "Illegal or too-long REPORT string ('%v')", s); old_max = n_reports; @@ -1103,14 +1101,14 @@ void chat_send (register char *s) pack++; n_reports--; if (verbose) - msgf("clear report (%v)", s); + msgf("clear report (%v)", s1); } } free(s1); if (pack) pack_array(report_string,old_max); - return; + return 0; } if (timeout_next) { @@ -1124,7 +1122,7 @@ void chat_send (register char *s) if (verbose) msgf("timeout set to %d seconds", timeout); - return; + return 0; } /* @@ -1171,6 +1169,8 @@ void chat_send (register char *s) if (!put_string(s)) fatal(1, "Failed"); + + return 0; } int get_char(void) @@ -1296,10 +1296,11 @@ int put_string(register char *s) * When called with -1, a '\n' character is generated when * the cursor is not at the beginning of a line. */ -void echo_stderr(int n) +int echo_stderr(int n) { static int need_lf; char *s; + int len, ret = 0; switch (n) { case '\r': /* ignore '\r' */ @@ -1309,15 +1310,17 @@ void echo_stderr(int n) break; /* fall through */ case '\n': - write(2, "\n", 1); + ret = write(2, "\n", 1) != 1; need_lf = 0; break; default: s = character(n); - write(2, s, strlen(s)); + len = strlen(s); + ret = write(2, s, len) != len; need_lf = 1; break; } + return ret; } /* @@ -1356,8 +1359,11 @@ int get_string(register char *string) while ( ! alarmed && (c = get_char()) >= 0) { int n, abort_len, report_len; - if (echo) - echo_stderr(c); + if (echo) { + if (echo_stderr(c) != 0) { + fatal(2, "Could not write to stderr, %m"); + } + } if (verbose && c == '\n') { if (s == logged) msgf(""); /* blank line */