int convert_unsigned(va_list *ap, t_data *data, int *i, char c) { uintmax_t arg; char *str; int ret; (*i)++; arg = get_unsigned_arg(ap, data->length); if (data->precision == -42 && !arg) return (convert_unsigned_0(data, c)); str = ft_itoa_base(arg, c); if (data->sharp && data->zero && data->width - 2 > (int)ft_strlen(str) && !data->precision) str = apply_precision(str, data->width - 2 - ft_strlen(str)); if (data->precision > (int)ft_strlen(str)) str = apply_precision(str, data->precision - ft_strlen(str)); if (data->sharp && arg) str = convert_unsigned_helper(str, c); if (data->width > (int)ft_strlen(str)) str = apply_width(str, data, data->width - ft_strlen(str)); if (c == 'X') ft_strmaj(str); ft_putstr(str); ret = ft_strlen(str); ft_strdel(&str); return (ret); }
int flag_x(t_format f, va_list *ap) { unsigned long long int nb; char c; int left; int len; left = (ft_strchr(f.flags, '-') ? 0 : 1); nb = get_unsigned_arg(f.modifier, ap); get_out(&f, nb, &c); len = 0; if ((left ? c : ' ') != '0') f.out = add_prefix(&f, nb); else { if (ft_strchr(f.flags, '#') && nb != 0) len -= 2; } len += f.length - ft_strlen(f.out); f.out = add_string(&f, len, (left ? c : ' '), left); if ((left ? c : ' ') == '0') f.out = add_prefix(&f, nb); ft_putstr(f.out); len = ft_strlen(f.out); free(f.out); return (len); }
void flag_x(t_string *out, t_opt *opt, va_list *ap) { char *hex; t_ulong x; t_string tmp; x = get_unsigned_arg(opt, ap); if (x == 0 && opt->preci_set && opt->preci == 0) { add_string(out, "", 0, opt); return ; } if (opt->format->name == 'x') hex = ft_itobase(x, "0123456789abcdef"); else hex = ft_itobase(x, "0123456789ABCDEF"); ft_stringini(&tmp); if (ft_strchr(opt->flags, '#') && x > 0) ft_stringadd(&tmp, (opt->format->name == 'x') ? "0x" : "0X"); ft_stringadd(&tmp, hex); pad_preci(&tmp, (ft_strchr(opt->flags, '#') && x > 0) ? 2 : 0, opt); add_string(out, tmp.content, tmp.length, opt); free(tmp.content); free(hex); }
unsigned get_str_arg(void **params, char *str) { unsigned str_size; str_size = get_unsigned_arg(params); memcpy(str, *params, str_size); *params += str_size; return str_size; }
void write_rpc(u64 sender, void *params, u32 param_size, void *ret, unsigned *ret_size) { char str[1024]; sender = sender; param_size = param_size; unsigned color = get_unsigned_arg(¶ms); unsigned str_size = get_str_arg(¶ms, str); str_size = str_size; printk(color, str); *(unsigned *)ret = 0; *ret_size = 4; }