sudo_conversation_printf: simplify \n -> \r\n handling
This commit is contained in:
@@ -160,7 +160,6 @@ sudo_conversation_1_7(int num_msgs, const struct sudo_conv_message msgs[],
|
|||||||
int
|
int
|
||||||
sudo_conversation_printf(int msg_type, const char * restrict fmt, ...)
|
sudo_conversation_printf(int msg_type, const char * restrict fmt, ...)
|
||||||
{
|
{
|
||||||
const char *crnl = NULL;
|
|
||||||
FILE *ttyfp = NULL;
|
FILE *ttyfp = NULL;
|
||||||
FILE *fp = stdout;
|
FILE *fp = stdout;
|
||||||
char fmt2[1024];
|
char fmt2[1024];
|
||||||
@@ -184,26 +183,27 @@ sudo_conversation_printf(int msg_type, const char * restrict fmt, ...)
|
|||||||
/* Convert nl -> cr nl in case tty is in raw mode. */
|
/* Convert nl -> cr nl in case tty is in raw mode. */
|
||||||
if (sudo_term_is_raw(fileno(ttyfp ? ttyfp : fp))) {
|
if (sudo_term_is_raw(fileno(ttyfp ? ttyfp : fp))) {
|
||||||
size_t fmtlen = strlen(fmt);
|
size_t fmtlen = strlen(fmt);
|
||||||
if (fmtlen < sizeof(fmt2) && fmtlen && fmt[fmtlen - 1] == '\n') {
|
if (fmtlen < sizeof(fmt2) - 1 && fmtlen && fmt[fmtlen - 1] == '\n') {
|
||||||
if (fmtlen == 1) {
|
if (fmtlen == 1) {
|
||||||
fmt2[0] = '\0';
|
/* Convert bare newline -> \r\n. */
|
||||||
fmt = fmt2;
|
len = (int)fwrite("\r\n", 1, 2, ttyfp ? ttyfp : fp);
|
||||||
crnl = "\r\n";
|
if (len != 2)
|
||||||
|
len = -1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (fmt[fmtlen - 2] != '\r') {
|
if (fmt[fmtlen - 2] != '\r') {
|
||||||
|
/* Convert trailing \n -> \r\n. */
|
||||||
memcpy(fmt2, fmt, fmtlen - 1);
|
memcpy(fmt2, fmt, fmtlen - 1);
|
||||||
fmt2[fmtlen - 1] = '\0';
|
fmt2[fmtlen - 1] = '\r';
|
||||||
|
fmt2[fmtlen ] = '\n';
|
||||||
|
fmt2[fmtlen + 1] = '\0';
|
||||||
fmt = fmt2;
|
fmt = fmt2;
|
||||||
crnl = "\r\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
len = vfprintf(ttyfp ? ttyfp : fp, fmt, ap);
|
len = vfprintf(ttyfp ? ttyfp : fp, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
if (len >= 0 && crnl != NULL) {
|
|
||||||
len += (int)fwrite(crnl, 1, 2, ttyfp ? ttyfp : fp);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
len = -1;
|
len = -1;
|
||||||
|
Reference in New Issue
Block a user