/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1985-2011 AT&T Intellectual Property * * and is licensed under the * * Eclipse Public License, Version 1.0 * * by AT&T Intellectual Property * * * * A copy of the License is available at * * http://www.eclipse.org/org/documents/epl-v10.html * * (with md5 checksum b35adb5213ca9657e911e9befb180842) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * David Korn * * Phong Vo * * * ***********************************************************************/ #pragma prototyped #include "stdhdr.h" int vfwprintf(Sfio_t* f, const wchar_t* fmt, va_list args) { char* m; char* x; wchar_t*w; size_t n; int v; Sfio_t* t; STDIO_INT(f, "vfwprintf", int, (Sfio_t*, const wchar_t*, va_list), (f, fmt, args)) FWIDE(f, WEOF); n = wcstombs(NiL, fmt, 0); if (m = malloc(n + 1)) { if (t = sfstropen()) { wcstombs(m, fmt, n + 1); sfvprintf(t, m, args); free(m); if (!(x = sfstruse(t))) v = -1; else { n = mbstowcs(NiL, x, 0); if (w = (wchar_t*)sfreserve(f, n * sizeof(wchar_t) + 1, 0)) v = mbstowcs(w, x, n + 1); else v = -1; } sfstrclose(t); } else { free(m); v = -1; } } else v = -1; return v; }