diff -r 000000000000 -r bde4ae8d615e os/ossrv/genericopenlibs/cstdlib/LSTDIO/FWRITE.C --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/genericopenlibs/cstdlib/LSTDIO/FWRITE.C Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,97 @@ +/* FWRITE.C + * + * Portions Copyright (c) 1990-2005 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + */ + +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* +FUNCTION +<>---write array elements + +INDEX + fwrite + +ANSI_SYNOPSIS + #include + size_t fwrite(const void *<[buf]>, size_t <[size]>, + size_t <[count]>, FILE *<[fp]>); + +TRAD_SYNOPSIS + #include + size_t fwrite(<[buf]>, <[size]>, <[count]>, <[fp]>) + char *<[buf]>; + size_t <[size]>; + size_t <[count]>; + FILE *<[fp]>; + +DESCRIPTION +<> attempts to copy, starting from the memory location +<[buf]>, <[count]> elements (each of size <[size]>) into the file or +stream identified by <[fp]>. <> may copy fewer elements than +<[count]> if an error intervenes. + +<> also advances the file position indicator (if any) for +<[fp]> by the number of @emph{characters} actually written. + +RETURNS +If <> succeeds in writing all the elements you specify, the +result is the same as the argument <[count]>. In any event, the +result is the number of complete elements that <> copied to +the file. + +PORTABILITY +ANSI C requires <>. + +Supporting OS subroutines required: <>, <>, <>, +<>, <>, <>, <>. +*/ + +#include +#include +#include "LOCAL.H" +#include "FVWRITE.H" + +/* + * Write `count' objects (each size `size') from memory to the given file. + * Return the number of whole objects written. + */ + +EXPORT_C size_t +fwrite (const void *buf, size_t size, size_t count, FILE * fp) +{ + size_t n; + struct __suio uio; + struct __siov iov; + + iov.iov_base = buf; + uio.uio_resid = iov.iov_len = n = count * size; + uio.uio_iov = &iov; + uio.uio_iovcnt = 1; + + /* + * The usual case is success (__sfvwrite returns 0); + * skip the divide if this happens, since divides are + * generally slow and since this occurs whenever size==0. + */ + + if (__sfvwrite (fp, &uio) == 0) + return count; + return (n - uio.uio_resid) / size; +}