fputws.c (bad3b6889aecd4b42701fd9b1e63f3cefa1595a4) | fputws.c (e74101e4eff767325553039def89de70b70f36d3) |
---|---|
1/*- | 1/*- |
2 * Copyright (c) 2002-2004 Tim J. Robbins. | 2 * Copyright (c) 2002 Tim J. Robbins. |
3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright --- 13 unchanged lines hidden (view full) --- 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> 28__FBSDID("$FreeBSD$"); 29 30#include "namespace.h" 31#include <errno.h> | 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright --- 13 unchanged lines hidden (view full) --- 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> 28__FBSDID("$FreeBSD$"); 29 30#include "namespace.h" 31#include <errno.h> |
32#include <limits.h> | 32#include <rune.h> |
33#include <stdio.h> 34#include <wchar.h> 35#include "un-namespace.h" | 33#include <stdio.h> 34#include <wchar.h> 35#include "un-namespace.h" |
36#include "fvwrite.h" | |
37#include "libc_private.h" 38#include "local.h" | 36#include "libc_private.h" 37#include "local.h" |
39#include "mblocal.h" | |
40 41int | 38 39int |
42fputws(const wchar_t * __restrict ws, FILE * __restrict fp) | 40fputws(const wchar_t *__restrict ws, FILE *__restrict fp) |
43{ | 41{ |
44 size_t nbytes; 45 char buf[BUFSIZ]; 46 struct __suio uio; 47 struct __siov iov; 48 const wchar_t *wsp; | |
49 | 42 |
50 FLOCKFILE(fp); 51 ORIENT(fp, 1); 52 if (prepwrite(fp) != 0) 53 goto error; 54 uio.uio_iov = &iov; 55 uio.uio_iovcnt = 1; 56 iov.iov_base = buf; 57 do { 58 wsp = ws; 59 nbytes = __wcsnrtombs(buf, &wsp, SIZE_T_MAX, sizeof(buf), 60 &fp->_mbstate); 61 if (nbytes == (size_t)-1) 62 goto error; 63 iov.iov_len = uio.uio_resid = nbytes; 64 if (__sfvwrite(fp, &uio) != 0) 65 goto error; 66 } while (ws != NULL); 67 FUNLOCKFILE(fp); 68 return (0); | 43 ORIENTLOCK(fp, 1); |
69 | 44 |
70error: 71 FUNLOCKFILE(fp); 72 return (-1); | 45 /* XXX Inefficient */ 46 while (*ws != '\0') 47 if (fputrune((rune_t)*ws++, fp) == EOF) 48 return (-1); 49 50 return (0); |
73} | 51} |