i3bar: Split stdin reading logic to get_buffer

This commit is contained in:
Quentin Glidic 2012-09-03 09:45:59 +02:00 committed by Michael Stapelberg
parent 13ecc79fcc
commit 3732cef764
1 changed files with 19 additions and 6 deletions

View File

@ -148,11 +148,10 @@ static int stdin_end_array(void *context) {
} }
/* /*
* Callbalk for stdin. We read a line from stdin and store the result * Helper function to read stdin
* in statusline
* *
*/ */
void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) { static unsigned char *get_buffer(ev_io *watcher, int *ret_buffer_len) {
int fd = watcher->fd; int fd = watcher->fd;
int n = 0; int n = 0;
int rec = 0; int rec = 0;
@ -174,7 +173,8 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
ELOG("stdin: received EOF\n"); ELOG("stdin: received EOF\n");
cleanup(); cleanup();
draw_bars(); draw_bars();
return; *ret_buffer_len = -1;
return NULL;
} }
rec += n; rec += n;
@ -185,9 +185,22 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
} }
if (*buffer == '\0') { if (*buffer == '\0') {
FREE(buffer); FREE(buffer);
return; rec = -1;
} }
*ret_buffer_len = rec;
return buffer;
}
/*
* Callbalk for stdin. We read a line from stdin and store the result
* in statusline
*
*/
void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
int rec;
unsigned char *buffer = get_buffer(watcher, &rec);
if (buffer == NULL)
return;
unsigned char *json_input = buffer; unsigned char *json_input = buffer;
if (first_line) { if (first_line) {
DLOG("Detecting input type based on buffer *%.*s*\n", rec, buffer); DLOG("Detecting input type based on buffer *%.*s*\n", rec, buffer);
@ -195,7 +208,7 @@ void stdin_io_cb(struct ev_loop *loop, ev_io *watcher, int revents) {
unsigned int consumed = 0; unsigned int consumed = 0;
/* At the moment, we dont care for the version. This might change /* At the moment, we dont care for the version. This might change
* in the future, but for now, we just discard it. */ * in the future, but for now, we just discard it. */
plaintext = (determine_json_version(buffer, buffer_len, &consumed) == -1); plaintext = (determine_json_version(buffer, rec, &consumed) == -1);
if (plaintext) { if (plaintext) {
/* In case of plaintext, we just add a single block and change its /* In case of plaintext, we just add a single block and change its
* full_text pointer later. */ * full_text pointer later. */