bc: send stderr/stdout logging through rktio
One effect of using rktio instead of fwrite is that Windows output produces LF instead of CRLF. Writing CRLF is arguably more correct, but it likely doesn't matter, and consistency with normal Racket output is helpful.
This commit is contained in:
parent
448b77a662
commit
237d627583
|
@ -3829,26 +3829,35 @@ void scheme_log_name_pfx_message(Scheme_Logger *logger, int level, Scheme_Object
|
|||
}
|
||||
|
||||
if (extract_spec_level(logger->stderr_level, name) >= level) {
|
||||
if (name && prefix_msg) {
|
||||
intptr_t slen;
|
||||
slen = SCHEME_SYM_LEN(name);
|
||||
fwrite(SCHEME_SYM_VAL(name), slen, 1, stderr);
|
||||
fwrite(": ", 2, 1, stderr);
|
||||
rktio_fd_t *fd;
|
||||
fd = rktio_std_fd(scheme_rktio, RKTIO_STDERR);
|
||||
if (fd) {
|
||||
if (name && prefix_msg) {
|
||||
intptr_t slen;
|
||||
slen = SCHEME_SYM_LEN(name);
|
||||
scheme_rktio_write_all(fd, SCHEME_SYM_VAL(name), slen);
|
||||
scheme_rktio_write_all(fd, ": ", 2);
|
||||
}
|
||||
scheme_rktio_write_all(fd, buffer, len);
|
||||
scheme_rktio_write_all(fd, "\n", 1);
|
||||
rktio_forget(scheme_rktio, fd);
|
||||
}
|
||||
fwrite(buffer, len, 1, stderr);
|
||||
fwrite("\n", 1, 1, stderr);
|
||||
}
|
||||
|
||||
if (extract_spec_level(logger->stdout_level, name) >= level) {
|
||||
if (name && prefix_msg) {
|
||||
intptr_t slen;
|
||||
slen = SCHEME_SYM_LEN(name);
|
||||
fwrite(SCHEME_SYM_VAL(name), slen, 1, stdout);
|
||||
fwrite(": ", 2, 1, stdout);
|
||||
rktio_fd_t *fd;
|
||||
fd = rktio_std_fd(scheme_rktio, RKTIO_STDOUT);
|
||||
if (fd) {
|
||||
if (name && prefix_msg) {
|
||||
intptr_t slen;
|
||||
slen = SCHEME_SYM_LEN(name);
|
||||
scheme_rktio_write_all(fd, SCHEME_SYM_VAL(name), slen);
|
||||
scheme_rktio_write_all(fd, ": ", 2);
|
||||
}
|
||||
scheme_rktio_write_all(fd, buffer, len);
|
||||
scheme_rktio_write_all(fd, "\n", 1);
|
||||
rktio_forget(scheme_rktio, fd);
|
||||
}
|
||||
fwrite(buffer, len, 1, stdout);
|
||||
fwrite("\n", 1, 1, stdout);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
queue = logger->readers;
|
||||
|
|
|
@ -5607,6 +5607,17 @@ scheme_make_rktio_fd_output_port(rktio_fd_t *rfd, Scheme_Object *name, int read_
|
|||
return make_fd_output_port(rfd, name, read_too, -1, NULL);
|
||||
}
|
||||
|
||||
void scheme_rktio_write_all(struct rktio_fd_t *fd, const char *data, intptr_t len)
|
||||
{
|
||||
while (len > 0) {
|
||||
intptr_t r;
|
||||
r = rktio_write(scheme_rktio, fd, data, len);
|
||||
if (r == RKTIO_WRITE_ERROR)
|
||||
break;
|
||||
len -= r;
|
||||
}
|
||||
}
|
||||
|
||||
/*========================================================================*/
|
||||
/* null output ports */
|
||||
/*========================================================================*/
|
||||
|
|
|
@ -3672,6 +3672,8 @@ void scheme_rktio_socket_to_input_port(struct rktio_fd_t *fd, Scheme_Object *nam
|
|||
void scheme_rktio_socket_to_output_port(struct rktio_fd_t *fd, Scheme_Object *name, int takeover,
|
||||
Scheme_Object **_outp);
|
||||
|
||||
void scheme_rktio_write_all(struct rktio_fd_t *fd, const char *data, intptr_t len);
|
||||
|
||||
void scheme_fs_change_properties(int *_supported, int *_scalable, int *_low_latency, int *_file_level);
|
||||
|
||||
THREAD_LOCAL_DECL(extern struct rktio_ltps_t *scheme_semaphore_fd_set);
|
||||
|
|
Loading…
Reference in New Issue
Block a user