diff -r 000000000000 -r e4d67989cc36 genericopenlibs/cstdlib/LSTDIO/FCLOSE.C --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cstdlib/LSTDIO/FCLOSE.C Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,94 @@ +/* FCLOSE.C + * + * Portions Copyright (c) 1997-1999 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + */ + +/* +FUNCTION +<>---close a file + +INDEX + fclose + +ANSI_SYNOPSIS + #include + int fclose(FILE *<[fp]>); + +TRAD_SYNOPSIS + #include + int fclose(<[fp]>) + FILE *<[fp]>; + +DESCRIPTION +If the file or stream identified by <[fp]> is open, <> closes +it, after first ensuring that any pending data is written (by calling +<)>>). + +RETURNS +<> returns <<0>> if successful (including when <[fp]> is +<> or not an open file); otherwise, it returns <>. + +PORTABILITY +<> is required by ANSI C. + +Required OS subroutines: <>, <>, <>, <>, +<>, <>, <>. + */ + +/* + * 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. + */ + +#include +#include +#include "LOCAL.H" + +/* + * Close a file. + */ + +/** +Close a stream. +Close the file associated with the specified stream +after flushing all buffers associated with it. +@return If the stream is successfully closed 0 is returned. +If any error EOF is returned. +@param fp Pointer to FILE structure specifying the stream to be closed. +*/ +EXPORT_C int fclose (FILE * fp) +{ + int r; + + if (fp == NULL) + return (0); /* on NULL */ + + CHECK_INIT (fp); + + if (fp->_flags == 0) /* not open! */ + return (0); + r = fp->_flags & __SWR ? fflush (fp) : 0; + if (fp->_close != NULL && (*fp->_close) (fp->_cookie) < 0) + r = EOF; + if (fp->_flags & __SMBF) + _free_r (fp->_data, (char *) fp->_bf._base); + if (HASUB (fp)) + FREEUB (fp); + if (HASLB (fp)) + FREELB (fp); + fp->_flags = 0; /* release this FILE for reuse */ + return (r); +}