Mercurial > hg > octave-shane > gnulib-hg
annotate lib/fwriteerror.h @ 7388:de85bc61c2dc
New function fwriteerror_no_ebadf.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Fri, 29 Sep 2006 13:44:52 +0000 |
parents | a48fb0e98c8c |
children | adf3720ff325 |
rev | line source |
---|---|
4709 | 1 /* Detect write error on a stream. |
7388
de85bc61c2dc
New function fwriteerror_no_ebadf.
Bruno Haible <bruno@clisp.org>
parents:
5848
diff
changeset
|
2 Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc. |
4709 | 3 Written by Bruno Haible <bruno@clisp.org>, 2003. |
4 | |
5 This program is free software; you can redistribute it and/or modify | |
6 it under the terms of the GNU General Public License as published by | |
7 the Free Software Foundation; either version 2, or (at your option) | |
8 any later version. | |
9 | |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
16 along with this program; if not, write to the Free Software Foundation, | |
5848
a48fb0e98c8c
*** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents:
5581
diff
changeset
|
17 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
4709 | 18 |
19 /* There are two approaches for detecting a write error on a stream opened | |
20 for writing: | |
21 | |
22 (a) Test the return value of every fwrite() or fprintf() call, and react | |
23 immediately. | |
24 (b) Just before fclose(), test the error indicator in the stream and | |
5581
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
25 the return value of the final fclose() call. |
4709 | 26 |
27 The benefit of (a) is that non file related errors (such that ENOMEM during | |
28 fprintf) and temporary error conditions can be diagnosed accurately. | |
29 | |
30 A theoretical benefit of (a) is also that, on POSIX systems, in the case of | |
31 an ENOSPC error, errno is set and can be used by error() to provide a more | |
32 accurate error message. But in practice, this benefit is not big because | |
33 users can easily figure out by themselves why a file cannot be written to, | |
34 and furthermore the function fwriteerror() can provide errno as well. | |
35 | |
36 The big drawback of (a) is extensive error checking code: Every function | |
37 which does stream output must return an error indicator. | |
38 | |
39 This file provides support for (b). */ | |
40 | |
41 #include <stdio.h> | |
42 | |
5581
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
43 /* Write out the not yet written buffered contents of the stream FP, close |
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
44 the stream FP, and test whether some error occurred on the stream FP. |
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
45 FP must be a stream opened for writing. |
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
46 Return 0 if no error occurred and fclose (fp) succeeded. |
4709 | 47 Return -1 and set errno if there was an error. The errno value will be 0 |
48 if the cause of the error cannot be determined. | |
5581
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
49 For any given stream FP other than stdout, fwriteerror (FP) may only be |
c8676e66b5da
The fwriteerror() function now needs to fclose() the stream,
Bruno Haible <bruno@clisp.org>
parents:
4709
diff
changeset
|
50 called once. */ |
4709 | 51 extern int fwriteerror (FILE *fp); |
7388
de85bc61c2dc
New function fwriteerror_no_ebadf.
Bruno Haible <bruno@clisp.org>
parents:
5848
diff
changeset
|
52 |
de85bc61c2dc
New function fwriteerror_no_ebadf.
Bruno Haible <bruno@clisp.org>
parents:
5848
diff
changeset
|
53 /* Likewise, but don't consider it an error if FP has an invalid file |
de85bc61c2dc
New function fwriteerror_no_ebadf.
Bruno Haible <bruno@clisp.org>
parents:
5848
diff
changeset
|
54 descriptor and no output was done to FP. */ |
de85bc61c2dc
New function fwriteerror_no_ebadf.
Bruno Haible <bruno@clisp.org>
parents:
5848
diff
changeset
|
55 extern int fwriteerror_no_ebadf (FILE *fp); |