+ Menu *menu = d;
+ char *tmpbuf = NULL;
+ unsigned long num_read;
+#ifdef DEBUG
+ /* because gdb is dumb */
+#if 0
+ Timed_Menu_Data *d = TIMED_MENU_DATA(menu);
+#endif
+#endif
+
+ unsigned long num_realloc;
+ /* if we have less than a quarter BUFSIZ left, allocate more */
+ num_realloc = (BUFSIZ - (TIMED_MENU_DATA(menu)->buflen % BUFSIZ) <
+ BUFSIZ >> 2) ?
+ 0 : BUFSIZ;
+
+ tmpbuf = g_try_realloc(TIMED_MENU_DATA(menu)->buf,
+ TIMED_MENU_DATA(menu)->buflen + num_realloc);
+
+ 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) {
+ unsigned long count = 0;
+ char *found = NULL;
+ menu->invalid = TRUE;
+ menu_clear(menu);
+
+ /* TEMP: list them */
+ while (NULL !=
+ (found = strchr(&TIMED_MENU_DATA(menu)->buf[count], '\n'))) {
+ TIMED_MENU_DATA(menu)->buf
+ [found - TIMED_MENU_DATA(menu)->buf] = '\0';
+ menu_add_entry(menu,
+ menu_entry_new_separator
+ (&TIMED_MENU_DATA(menu)->buf[count]));
+ count = found - TIMED_MENU_DATA(menu)->buf + 1;
+ }