This commit was manufactured by cvs2svn to create tag 'busybox_1_00'.
[oweals/busybox.git] / busybox / libbb / print_file.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Utility routines.
4  *
5  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <unistd.h>
25 #include "libbb.h"
26
27 extern void bb_xprint_and_close_file(FILE *file)
28 {
29         bb_xfflush_stdout();
30         /* Note: Do not use STDOUT_FILENO here, as this is a lib routine
31          *       and the calling code may have reassigned stdout. */
32         if (bb_copyfd_eof(fileno(file), STDOUT_FILENO) == -1) {
33                 /* bb_copyfd outputs any needed messages, so just die. */
34                 exit(bb_default_error_retval);
35         }
36         /* Note: Since we're reading, don't bother checking the return value
37          *       of fclose().  The only possible failure is EINTR which
38          *       should already have been taken care of. */
39         fclose(file);
40 }
41
42 /* Returns:
43  *    0      if successful
44  *   -1      if 'filename' does not exist or is a directory
45  *  exits with default error code if an error occurs
46  */
47
48 extern int bb_xprint_file_by_name(const char *filename)
49 {
50         FILE *f;
51
52 #if 0
53         /* This check shouldn't be necessary for linux, but is left
54         * here disabled just in case. */
55         struct stat statBuf;
56
57         if(is_directory(filename, TRUE, &statBuf)) {
58                 bb_error_msg("%s: Is directory", filename);
59         } else
60 #endif
61         if ((f = bb_wfopen(filename, "r")) != NULL) {
62                 bb_xprint_and_close_file(f);
63                 return 0;
64         }
65
66         return -1;
67 }
68
69 /* END CODE */
70 /*
71 Local Variables:
72 c-file-style: "linux"
73 c-basic-offset: 4
74 tab-width: 4
75 End:
76 */