/* wstring EchoWstring (in wstring s); */ NS_IMETHODIMP rbXPCOMTest::EchoWstring(const PRUnichar *s, PRUnichar **_retval) { if(!s) { *_retval = nsnull; return NS_OK; } size_t size = wstring_len(s) + sizeof(PRUnichar); *_retval = (PRUnichar*) nsMemory::Clone(s, size); return *_retval ? NS_OK : NS_ERROR_OUT_OF_MEMORY; }
/* void EchoArrayWCHAR_STR (in PRUint32 size, [array, size_is (size)] in wstring i, [array, size_is (size)] out wstring o); */ NS_IMETHODIMP rbXPCOMTest::EchoArrayWCHAR_STR(PRUint32 size, const PRUnichar **i, PRUnichar ***o) { if(!i) { *o = nsnull; return NS_OK; } PRUnichar **array = (PRUnichar**) nsMemory::Alloc(sizeof(PRUnichar*) * size); if(!array) { *o = nsnull; return NS_ERROR_OUT_OF_MEMORY; } PRUint32 idx, idx2; for(idx = 0; idx < size; idx++) { if(!i[idx]) { array[idx] = nsnull; continue; } size_t size = wstring_len(i[idx]) + sizeof(PRUnichar); PRUnichar *clone = (PRUnichar*) nsMemory::Clone(i[idx], size); if(!clone) break; else array[idx] = clone; } if(idx < size) { for(idx2 = 0; idx2 < idx; idx2++) if(array[idx2]) nsMemory::Free(array[idx2]); nsMemory::Free(array); *o = nsnull; return NS_ERROR_OUT_OF_MEMORY; } *o = array; return NS_OK; }
int ft_printf_wstring(va_list ap, t_printf_flags *flags) { int *str; int prec; int l_prec; int len; char marg; str = va_arg(ap, int*); len = wstring_len(str); prec = (flags->precision >= 0) ? flags->precision : -1; l_prec = (prec > 0) ? w_prec(str, prec, &prec) : 0; len = (prec >= 0 && prec < len) ? prec : len; marg = (flags->FLAGS_ZERO) ? '0' : ' '; if (!flags->FLAGS_DASH) ft_printf_margin(marg, flags->width - len); if (!str) ft_printf_buffer("(null)", BUF_WRITE); else write_wstring(str, prec, l_prec); if (flags->FLAGS_DASH) ft_printf_margin(' ', flags->width - len); return (0); }