void co_debug_download_and_parse(void) { co_manager_handle_t handle; xml_start(); handle = co_os_manager_open(); if (handle) { char *buffer = co_os_malloc(BUFFER_SIZE); if (buffer) { co_manager_ioctl_debug_reader_t debug_reader; debug_reader.user_buffer = buffer; debug_reader.user_buffer_size = BUFFER_SIZE; while (1) { debug_reader.filled = 0; co_rc_t rc = co_manager_debug_reader(handle, &debug_reader); if (!CO_OK(rc)) { fprintf(stderr, "log ended: %x\n", (int)rc); return; } parse_tlv_buffer(buffer, debug_reader.filled); /* Flush, if stdout not redirected */ if (output_file != stdout) fflush (output_file); } co_os_free(buffer); } co_os_manager_close(handle); } xml_end(); }
/* XML in edit buffer parsing */ CSSBox *xml_parse_buffer(EditBuffer *b, int offset_start, int offset_end, CSSStyleSheet *style_sheet, int flags, CSSAbortFunc *abort_func, void *abort_opaque) { XMLState *s; CSSBox *box; int ret; s = xml_begin(style_sheet, flags, abort_func, abort_opaque, b->name, NULL); ret = xml_parse_internal(s, NULL, offset_end - offset_start, b, offset_start); box = xml_end(s); if (ret < 0) { css_delete_box(box); box = NULL; } return box; }
static void co_debug_parse(int fd) { xml_start(); for (;;) { co_debug_tlv_t tlv; int nread; nread = read(fd, &tlv, sizeof(tlv)); if (nread != sizeof(tlv) || tlv.length == 0) break; char block[tlv.length]; nread = read_helper(fd, (void*)&block, tlv.length); if (nread != tlv.length) break; parse_tlv(&tlv, block); /* Flush every block, if stdout not redirected */ if (output_file != stdout) fflush (output_file); } xml_end(); }
static void sig_handle(int signo) { xml_end(); fprintf (stderr, "\ncolinux-debug-daemon terminated (%d)\n", signo); exit (signo); }