wchar_t *ft_wstrndup(wchar_t *s1, int n) { wchar_t *dest; int i; i = 0; if (ft_wstrlen(s1) >= n) dest = ft_wstrnew(n); else dest = ft_wstrnew(ft_wstrlen(s1)); while (s1[i] != '\0' && n > 0) { if (n >= ft_wcharlen(s1[i])) { dest[i] = s1[i]; n -= ft_wcharlen(s1[i]); i++; } else { n = 0; dest[i + 1] = '\0'; } } return (dest); }
int wstr(t_m *m, char buf[MAX]) { wchar_t *arg; int l; int i; int p; int w; arg = extract_wstring(m); if (!ft_wstrncmp(arg, L"", ((l = ft_wstrlen(arg)) ? l : 1))) { arg = m->place->precision ? ft_wstrnew(m->place->precision) : arg; m->place->precision = 0; } p = !m->place->precision ? ft_wstrlen(arg) : m->place->precision; w = m->place->width - p; i = -1; if (!(m->place->flags & MINUS)) while (w-- > 0) buf[m->pos_b++] = (char)L' '; while (arg[++i] && i < p) buf[m->pos_b++] = (char)arg[i]; if (m->place->flags & MINUS) while (w-- > 0) buf[m->pos_b++] = (char)L' '; return (0); }
wchar_t *op_csmaj(wchar_t *str, t_op *op) { if (op->dot == 1 && op->pre == 0 && op->type == 'S') str = ft_wstrnew(1); else if (op->dot == 1 && (op->type == 's' || op->type == 'S')) str = ft_wstrsub(str, 0, op->pre); while (op->width >= bytes_len_str(str) + 1) { if (op->minus == 1) str = ft_wstrjoin(str, L" "); else { if (op->zero == 1) str = ft_wstrjoin(L"0", str); else str = ft_wstrjoin(L" ", str); } } return (str); }