val ftw_wrap(val dirpath, val fn, val flags_in, val nopenfd_in) { if (s_callback) { uw_throwf(error_s, lit("ftw: cannot be re-entered from " "ftw callback"), nao); } else if (dirpath == nil) { return t; } else if (consp(dirpath)) { uses_or2; val ret = nil; for (; dirpath; dirpath = cdr(dirpath)) { val res = ftw_wrap(car(dirpath), fn, flags_in, nopenfd_in); if (res != t && res != nil) return res; ret = or2(ret, res); } return ret; } else { int nopenfd = c_num(default_arg(nopenfd_in, num_fast(20))); int flags = c_num(default_arg(flags_in, zero)); char *dirpath_u8 = utf8_dup_to(c_str(dirpath)); int res = (s_callback = fn, nftw(dirpath_u8, ftw_callback, nopenfd, flags)); s_callback = nil; free(dirpath_u8); if (s_exit_point) { uw_frame_t *ep = s_exit_point; s_exit_point = 0; uw_continue(ep); } switch (res) { case 0: return t; case -1: return nil; default: return num(res); } } }
static int print_arg(const char *format, va_list ap, t_argf *arg) { arg->end = parse_arg((char *)format, default_arg(arg)); if (arg->precision == -4) arg->precision = va_arg(ap, int); if (arg->width == -4) arg->width = va_arg(ap, int); if (arg->type == -1 && *(arg->end)) return (notype(arg)); return (arg->func_type ? arg->func_type(arg, ap) : 0); }