(foreign-primitive ((int fd)) "int length, i = 0; char buffer[BUF_LEN]; length = read(fd, buffer, BUF_LEN); C_word retval[length + 2]; retval[0] = C_SCHEME_UNDEFINED; retval[1] = C_k; while (i < length) { struct inotify_event *event = (struct inotify_event *) &buffer[i]; if (event->len) { C_word *evt_name_alloc = C_alloc(C_SIZEOF_STRING(strlen(event->name))); C_word evt_name = C_string(&evt_name_alloc, strlen(event->name), event->name); C_word *evt_pair_alloc = C_alloc(C_SIZEOF_PAIR); retval[i + 2] = C_pair(&evt_pair_alloc, C_fix(event->mask), evt_name); } i++; } C_values(length + 2, retval);")