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  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8  */
9 
10 #include "libbb.h"
11 
fopen_or_warn(const char * path,const char * mode)12 FILE* FAST_FUNC fopen_or_warn(const char *path, const char *mode)
13 {
14 	FILE *fp = fopen(path, mode);
15 	if (!fp) {
16 		bb_simple_perror_msg(path);
17 		//errno = 0; /* why? */
18 	}
19 	return fp;
20 }
21 
fopen_for_read(const char * path)22 FILE* FAST_FUNC fopen_for_read(const char *path)
23 {
24 	return fopen(path, "r");
25 }
26 
xfopen_for_read(const char * path)27 FILE* FAST_FUNC xfopen_for_read(const char *path)
28 {
29 	return xfopen(path, "r");
30 }
31 
fopen_for_write(const char * path)32 FILE* FAST_FUNC fopen_for_write(const char *path)
33 {
34 	return fopen(path, "w");
35 }
36 
xfopen_for_write(const char * path)37 FILE* FAST_FUNC xfopen_for_write(const char *path)
38 {
39 	return xfopen(path, "w");
40 }
41 
xfdopen_helper(unsigned fd_and_rw_bit)42 static 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 }
xfdopen_for_read(int fd)49 FILE* FAST_FUNC xfdopen_for_read(int fd)
50 {
51 	return xfdopen_helper(fd << 1);
52 }
xfdopen_for_write(int fd)53 FILE* FAST_FUNC xfdopen_for_write(int fd)
54 {
55 	return xfdopen_helper((fd << 1) + 1);
56 }
57