+ if (tmpbuf == NULL) {
+ g_warning("Unable to allocate memory for read()");
+ return;
+ }
+
+ TIMED_MENU_DATA(menu)->buf = tmpbuf;
+
+ num_read = read(fd,
+ TIMED_MENU_DATA(menu)->buf + TIMED_MENU_DATA(menu)->buflen,
+ num_realloc);
+ if (num_read == 0) {
+ ObParseInst *i;
+ xmlDocPtr doc;
+ xmlNodePtr node;
+
+ menu->invalid = TRUE;
+ menu_clear(menu);
+
+ TIMED_MENU_DATA(menu)->buf[TIMED_MENU_DATA(menu)->buflen] = '\0';
+
+ i = parse_startup();
+
+ if (parse_load_mem(TIMED_MENU_DATA(menu)->buf,
+ TIMED_MENU_DATA(menu)->buflen,
+ "timed_menu", &doc, &node))
+ parse_menu_full(i, doc, node, menu, FALSE);
+
+ parse_shutdown(i);
+
+ timed_menu_clean_up(menu);
+ } else if (num_read > 0) {
+ TIMED_MENU_DATA(menu)->buflen += num_read;
+ TIMED_MENU_DATA(menu)->buf[TIMED_MENU_DATA(menu)->buflen] = '\0';
+ } else { /* num_read < 1 */
+ g_warning("Error on read %s", strerror(errno));
+ timed_menu_clean_up(menu);
+ }
+}
+
+void timed_menu_timeout_handler(ObTimer *t, void *d)
+{
+ ObMenu *data = d;
+ if (!data->shown && TIMED_MENU_DATA(data)->fd == -1) {