size_t vterm_screen_get_text(const VTermScreen *screen, char *str, size_t len, const VTermRect rect) { return _get_chars(screen, 1, str, len, rect); }
void sys_handler(struct evhttp_request *req, void *arg) { struct evbuffer *buf; int valid_cmd = 1; int raw_output = 0; int timeout = 2; int needs_escaped = 1; char * cmd; cmd = (char *) malloc(1024 * sizeof(char)); buf = evbuffer_new(); if (buf == NULL) err(1, "failed to create response buffer"); if (strncmp(_get_chars(req, "cmd", ""),"zing", 50) == 0) { evhttp_add_header(evhttp_request_get_output_headers(req), "Content-Type", "text/javascript"); sprintf(cmd, "zing_json_fetcher.sh \"%s\" %d", _get_chars(req, "artist", ""), _get_int(req, "page", 1) ); timeout = 10; raw_output = 1; } else if (strncmp(_get_chars(req, "cmd", ""),"m3u", 50) == 0) { evhttp_add_header(evhttp_request_get_output_headers(req), "Content-Type", "application/x-mpegurl"); sprintf(cmd, "zing_m3u_fetcher.sh \"%s\"", _get_chars(req, "artist", "")); timeout = 60; raw_output = 1; needs_escaped = 0; } else if (strncmp(_get_chars(req, "cmd", ""),"pls", 50) == 0) { evhttp_add_header(evhttp_request_get_output_headers(req), "Content-Type", "audio/x-scpls"); sprintf(cmd, "zing_pls_fetcher.sh \"%s\"", _get_chars(req, "artist", "")); timeout = 60; raw_output = 1; needs_escaped = 0; } else { valid_cmd = 0; } if (valid_cmd) { char * ret; char * ret_escaped; ret = (char *) malloc(102400 *sizeof(char)); pthread_t f; execstruct e; e.cmd = cmd; e.ret = ret; e.done = 0; int s, i; fprintf(stderr, "Trying to create a new exec thread... [%s]", cmd); pthread_create (&f, NULL, execworker, (void *) &e); for (i = 0; i < timeout; ++i) { sleep(1); if (e.done) { fprintf(stderr, " Done!\n"); break; } fprintf(stderr, "."); } s = pthread_cancel(f); if (s != ESRCH) { fprintf(stderr, " Timed out!\n"); sprintf(ret, "Request timed out\0"); } //fprintf(stderr, "%s\n", ret); ret_escaped = escape(ret); if (raw_output == 0) { evbuffer_add_printf(buf, "{\"valid\":%d,\"result\":\"%s\"}", valid_cmd, ret_escaped); } else { evbuffer_add_printf(buf, "%s", needs_escaped ? ret_escaped : ret); } free(ret_escaped); free(ret); } else { evbuffer_add_printf(buf, "{\"valid\":%d,\"result\":\"\"}", valid_cmd); } evhttp_send_reply(req, HTTP_OK, "OK", buf); free(cmd); }
size_t vterm_screen_get_chars(const VTermScreen *screen, uint32_t *chars, size_t len, const VTermRect rect) { return _get_chars(screen, 0, chars, len, rect); }