Start 1.33.0 development cycle
[oweals/busybox.git] / libbb / wfopen.c
index 368451c5200c5d46c16e16f9ab80fcd88c296dde..1c7f7f3d76a1ae01fe2415c3977886777769ad40 100644 (file)
@@ -2,43 +2,54 @@
 /*
  * Utility routines.
  *
- * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org>
+ * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
-
-#include <stdio.h>
-#include <errno.h>
 #include "libbb.h"
 
-FILE *bb_wfopen(const char *path, const char *mode)
+FILE* FAST_FUNC fopen_or_warn(const char *path, const char *mode)
 {
-       FILE *fp;
-       if ((fp = fopen(path, mode)) == NULL) {
-               bb_perror_msg("%s", path);
-               errno = 0;
+       FILE *fp = fopen(path, mode);
+       if (!fp) {
+               bb_simple_perror_msg(path);
+               //errno = 0; /* why? */
        }
        return fp;
 }
 
+FILE* FAST_FUNC fopen_for_read(const char *path)
+{
+       return fopen(path, "r");
+}
 
-/* END CODE */
-/*
-Local Variables:
-c-file-style: "linux"
-c-basic-offset: 4
-tab-width: 4
-End:
-*/
+FILE* FAST_FUNC xfopen_for_read(const char *path)
+{
+       return xfopen(path, "r");
+}
+
+FILE* FAST_FUNC fopen_for_write(const char *path)
+{
+       return fopen(path, "w");
+}
+
+FILE* FAST_FUNC xfopen_for_write(const char *path)
+{
+       return xfopen(path, "w");
+}
+
+static FILE* xfdopen_helper(unsigned fd_and_rw_bit)
+{
+       FILE* fp = fdopen(fd_and_rw_bit >> 1, fd_and_rw_bit & 1 ? "w" : "r");
+       if (!fp)
+               bb_die_memory_exhausted();
+       return fp;
+}
+FILE* FAST_FUNC xfdopen_for_read(int fd)
+{
+       return xfdopen_helper(fd << 1);
+}
+FILE* FAST_FUNC xfdopen_for_write(int fd)
+{
+       return xfdopen_helper((fd << 1) + 1);
+}