blob: 6d3667b60a282333d87b4ac3779302b424cc045c [file] [log] [blame]
Eric Andersenaad1a882001-03-16 22:47:14 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Utility routines.
4 *
Eric Andersencb81e642003-07-14 21:21:08 +00005 * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00006 *
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
Eric Andersenaad1a882001-03-16 22:47:14 +000020 */
21
22#include <stdio.h>
Glenn L McGrath25fe94f2002-12-13 08:20:44 +000023#include <stdlib.h>
Eric Andersenaad1a882001-03-16 22:47:14 +000024#include "libbb.h"
25
Manuel Novoa III cad53642003-03-19 09:13:01 +000026extern void bb_xprint_and_close_file(FILE *file)
Eric Andersenaad1a882001-03-16 22:47:14 +000027{
Manuel Novoa III cad53642003-03-19 09:13:01 +000028 bb_xfflush_stdout();
29 /* Note: Do not use STDOUT_FILENO here, as this is a lib routine
30 * and the calling code may have reassigned stdout. */
31 if (bb_copyfd(fileno(file), fileno(stdout), 0) == -1) {
32 /* bb_copyfd outputs any needed messages, so just die. */
33 exit(bb_default_error_retval);
Glenn L McGrath25fe94f2002-12-13 08:20:44 +000034 }
Manuel Novoa III cad53642003-03-19 09:13:01 +000035 /* Note: Since we're reading, don't bother checking the return value
36 * of fclose(). The only possible failure is EINTR which
37 * should already have been taken care of. */
Eric Andersen55f98722001-05-15 17:48:09 +000038 fclose(file);
Eric Andersenaad1a882001-03-16 22:47:14 +000039}
40
Manuel Novoa III cad53642003-03-19 09:13:01 +000041/* Returns:
42 * 0 if successful
43 * -1 if 'filename' does not exist or is a directory
44 * exits with default error code if an error occurs
45 */
Eric Andersene5dfced2001-04-09 22:48:12 +000046
Manuel Novoa III cad53642003-03-19 09:13:01 +000047extern int bb_xprint_file_by_name(const char *filename)
48{
49 FILE *f;
50
51#if 0
52 /* This check shouldn't be necessary for linux, but is left
53 * here disabled just in case. */
54 struct stat statBuf;
55
56 if(is_directory(filename, TRUE, &statBuf)) {
57 bb_error_msg("%s: Is directory", filename);
58 } else
59#endif
60 if ((f = bb_wfopen(filename, "r")) != NULL) {
61 bb_xprint_and_close_file(f);
62 return 0;
Eric Andersene5dfced2001-04-09 22:48:12 +000063 }
64
Manuel Novoa III cad53642003-03-19 09:13:01 +000065 return -1;
Eric Andersenaad1a882001-03-16 22:47:14 +000066}
67
Eric Andersenaad1a882001-03-16 22:47:14 +000068/* END CODE */
69/*
70Local Variables:
71c-file-style: "linux"
72c-basic-offset: 4
73tab-width: 4
74End:
75*/