blob: deec79a280683d468f0ded2e3f4fee9eb7a38d81 [file] [log] [blame]
Eric Andersenaad1a882001-03-16 22:47:14 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Utility routines.
4 *
Eric Andersenc7bda1c2004-03-15 08:29:22 +00005 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00006 *
Bernhard Reutner-Fischerb1629b12006-05-19 19:29:19 +00007 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
Eric Andersenaad1a882001-03-16 22:47:14 +00008 */
9
Eric Andersenaad1a882001-03-16 22:47:14 +000010#include "libbb.h"
11
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000012FILE* FAST_FUNC fopen_or_warn(const char *path, const char *mode)
Eric Andersenaad1a882001-03-16 22:47:14 +000013{
Denis Vlasenkoddec5af2006-10-26 23:25:17 +000014 FILE *fp = fopen(path, mode);
15 if (!fp) {
Denis Vlasenko0c97c9d2007-10-01 11:58:38 +000016 bb_simple_perror_msg(path);
Denis Vlasenkobfbc9712009-04-06 12:04:42 +000017 //errno = 0; /* why? */
Eric Andersenaad1a882001-03-16 22:47:14 +000018 }
19 return fp;
20}
Denis Vlasenko5415c852008-07-21 23:05:26 +000021
22FILE* FAST_FUNC fopen_for_read(const char *path)
23{
24 return fopen(path, "r");
25}
26
27FILE* FAST_FUNC xfopen_for_read(const char *path)
28{
29 return xfopen(path, "r");
30}
31
32FILE* FAST_FUNC fopen_for_write(const char *path)
33{
34 return fopen(path, "w");
35}
36
37FILE* FAST_FUNC xfopen_for_write(const char *path)
38{
39 return xfopen(path, "w");
40}
Denys Vlasenkoa7ccdee2009-11-15 23:28:11 +010041
42static FILE* xfdopen_helper(unsigned fd_and_rw_bit)
43{
44 FILE* fp = fdopen(fd_and_rw_bit >> 1, fd_and_rw_bit & 1 ? "w" : "r");
45 if (!fp)
46 bb_error_msg_and_die(bb_msg_memory_exhausted);
47 return fp;
48}
49FILE* FAST_FUNC xfdopen_for_read(int fd)
50{
51 return xfdopen_helper(fd << 1);
52}
53FILE* FAST_FUNC xfdopen_for_write(int fd)
54{
55 return xfdopen_helper((fd << 1) + 1);
56}