Bug 104529: on OS/2, when writing to the command-line console, we must
write \r\n to go to a new line. So we need to translate \n to \r\n. The patch is contributed by Julien Pierre.
This commit is contained in:
Родитель
d4ea38723c
Коммит
6388a9e737
|
@ -56,7 +56,45 @@ PR_IMPLEMENT(PRUint32) PR_vfprintf(PRFileDesc* fd, const char *fmt, va_list ap)
|
|||
PRUint32 rv, len;
|
||||
char* msg = PR_vsmprintf(fmt, ap);
|
||||
len = strlen(msg);
|
||||
#ifdef XP_OS2
|
||||
/*
|
||||
* OS/2 really needs a \r for every \n.
|
||||
* In the future we should try to use scatter-gather instead of a
|
||||
* succession of PR_Write.
|
||||
*/
|
||||
if (isatty(PR_FileDesc2NativeHandle(fd))) {
|
||||
PRUint32 last = 0, idx;
|
||||
PRInt32 tmp;
|
||||
rv = 0;
|
||||
for (idx = 0; idx < len+1; idx++) {
|
||||
if ((idx - last > 0) && (('\n' == msg[idx]) || (idx == len))) {
|
||||
tmp = PR_Write(fd, msg + last, idx - last);
|
||||
if (tmp >= 0) {
|
||||
rv += tmp;
|
||||
}
|
||||
last = idx;
|
||||
}
|
||||
/*
|
||||
* if current character is \n, and
|
||||
* previous character isn't \r, and
|
||||
* next character isn't \r
|
||||
*/
|
||||
if (('\n' == msg[idx]) &&
|
||||
((0 == idx) || ('\r' != msg[idx-1])) &&
|
||||
('\r' != msg[idx+1])) {
|
||||
/* add extra \r */
|
||||
tmp = PR_Write(fd, "\r", 1);
|
||||
if (tmp >= 0) {
|
||||
rv += tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rv = PR_Write(fd, msg, len);
|
||||
}
|
||||
#else
|
||||
rv = PR_Write(fd, msg, len);
|
||||
#endif
|
||||
PR_DELETE(msg);
|
||||
return rv;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче