diff --git a/coreutils/diff.c b/coreutils/diff.c index 2c89a66e4..12c61ca1e 100644 --- a/coreutils/diff.c +++ b/coreutils/diff.c @@ -1114,8 +1114,8 @@ static char **get_dir(char *path) { else { DIR *dp; struct dirent *ep; - if ((dp = opendir(path)) == NULL) - bb_error_msg("Error reading directory"); + + dp = bb_opendir(path); while ((ep = readdir(dp))) { if ((!strcmp(ep->d_name, "..")) || (!strcmp(ep->d_name, "."))) continue; diff --git a/coreutils/du.c b/coreutils/du.c index d453ba412..38790f83b 100644 --- a/coreutils/du.c +++ b/coreutils/du.c @@ -6,20 +6,7 @@ * Copyright (C) 1999,2000,2001 by John Beppu * Copyright (C) 2002 Edward Betts * - * 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 tarball for details. */ /* BB_AUDIT SUSv3 compliant (unless default blocksize set to 1k) */ @@ -134,9 +121,8 @@ static long du(char *filename) struct dirent *entry; char *newfile; - dir = opendir(filename); + dir = bb_opendir(filename); if (!dir) { - bb_perror_msg("%s", filename); status = EXIT_FAILURE; return sum; } diff --git a/coreutils/ls.c b/coreutils/ls.c index 964e7c964..c9d24ff4a 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -3,19 +3,7 @@ * tiny-ls.c version 0.1.0: A minimalist 'ls' * Copyright (C) 1996 Brian Candler * - * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ /* @@ -592,9 +580,8 @@ static struct dnode **list_dir(const char *path) dn = NULL; nfiles = 0; - dir = opendir(path); + dir = bb_opendir(path); if (dir == NULL) { - bb_perror_msg("%s", path); status = EXIT_FAILURE; return (NULL); /* could not open the dir */ } diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c index 1dd2231dc..5b689740e 100644 --- a/debianutils/start_stop_daemon.c +++ b/debianutils/start_stop_daemon.c @@ -143,9 +143,7 @@ do_procinit(void) return; } - procdir = opendir("/proc"); - if (!procdir) - bb_perror_msg_and_die ("opendir /proc"); + procdir = bb_xopendir("/proc"); foundany = 0; while ((entry = readdir(procdir)) != NULL) { diff --git a/include/libbb.h b/include/libbb.h index 759df8d26..d3634f95d 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -98,6 +99,8 @@ extern int bb_echo(int argc, char** argv); extern const char *bb_mode_string(int mode); extern int is_directory(const char *name, int followLinks, struct stat *statBuf); +extern DIR *bb_opendir(const char *path); +extern DIR *bb_xopendir(const char *path); extern int remove_file(const char *path, int flags); extern int copy_file(const char *source, const char *dest, int flags); diff --git a/libbb/Makefile.in b/libbb/Makefile.in index 2d9a1745d..de511fc9b 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in @@ -105,12 +105,18 @@ LIBBB_MOBJ6:=$(patsubst %,$(LIBBB_DIR)/%, $(LIBBB_MOBJ6)) $(LIBBB_MOBJ6):$(LIBBB_MSRC6) $(compile.c) -DL_$(notdir $*) +LIBBB_MSRC7:=$(srcdir)/opendir.c +LIBBB_MOBJ7:=bb_opendir.o bb_xopendir.o +LIBBB_MOBJ7:=$(patsubst %,$(LIBBB_DIR)/%, $(LIBBB_MOBJ7)) +$(LIBBB_MOBJ7):$(LIBBB_MSRC7) + $(compile.c) -DL_$(notdir $*) # We need the names of the object files built from MSRC for the L_ defines -LIBBB_ALL_MOBJ:=$(LIBBB_MOBJ0) $(LIBBB_MOBJ1) $(LIBBB_MOBJ2) $(LIBBB_MOBJ3) $(LIBBB_MOBJ4) $(LIBBB_MOBJ5) $(LIBBB_MOBJ6) +LIBBB_ALL_MOBJ:=$(LIBBB_MOBJ0) $(LIBBB_MOBJ1) $(LIBBB_MOBJ2) $(LIBBB_MOBJ3) \ + $(LIBBB_MOBJ4) $(LIBBB_MOBJ5) $(LIBBB_MOBJ6) $(LIBBB_MOBJ7) LIBBB_ALL_MSRC:=$(LIBBB_MSRC0) $(LIBBB_MSRC1) $(LIBBB_MSRC2) $(LIBBB_MSRC3) \ - $(LIBBB_MSRC4) $(LIBBB_MSRC5) $(LIBBB_MSRC6) + $(LIBBB_MSRC4) $(LIBBB_MSRC5) $(LIBBB_MSRC6) $(LIBBB_MSRC7) LIBBB-y:=$(sort $(LIBBB-y) $(LIBBB_ALL_MSRC)) diff --git a/libbb/copy_file.c b/libbb/copy_file.c index 3b172ffe4..2f7514628 100644 --- a/libbb/copy_file.c +++ b/libbb/copy_file.c @@ -92,8 +92,7 @@ int copy_file(const char *source, const char *dest, int flags) } /* Recursively copy files in SOURCE. */ - if ((dp = opendir(source)) == NULL) { - bb_perror_msg("unable to open directory `%s'", source); + if ((dp = bb_opendir(source)) == NULL) { status = -1; goto preserve_status; } diff --git a/libbb/opendir.c b/libbb/opendir.c new file mode 100644 index 000000000..e284db0db --- /dev/null +++ b/libbb/opendir.c @@ -0,0 +1,37 @@ +/* vi: set sw=4 ts=4: */ +/* + * wrapper for opendir() + * + * Copyright (C) 2006 Bernhard Fischer + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ + +#include +#include +#include "libbb.h" + +#ifdef L_bb_opendir +DIR *bb_opendir(const char *path) +{ + DIR *dp; + + if ((dp = opendir(path)) == NULL) { + bb_perror_msg("unable to open `%s'", path); + return NULL; + } + return dp; +} +#endif + +#ifdef L_bb_xopendir +DIR *bb_xopendir(const char *path) +{ + DIR *dp; + + if ((dp = opendir(path)) == NULL) { + bb_perror_msg_and_die("unable to open `%s'", path); + } + return dp; +} +#endif diff --git a/libbb/procps.c b/libbb/procps.c index e73c0dc64..25f42ffc8 100644 --- a/libbb/procps.c +++ b/libbb/procps.c @@ -50,9 +50,7 @@ procps_status_t * procps_scan(int save_user_arg0) struct stat sb; if (!dir) { - dir = opendir("/proc"); - if(!dir) - bb_error_msg_and_die("Can't open /proc"); + dir = bb_xopendir("/proc"); } for(;;) { if((entry = readdir(dir)) == NULL) { diff --git a/libbb/recursive_action.c b/libbb/recursive_action.c index d27629829..6b005e22d 100644 --- a/libbb/recursive_action.c +++ b/libbb/recursive_action.c @@ -4,19 +4,7 @@ * * Copyright (C) 1999-2004 by Erik Andersen * - * 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 tarball for details. */ #include @@ -94,9 +82,8 @@ int recursive_action(const char *fileName, } else if (status == SKIP) return TRUE; } - dir = opendir(fileName); + dir = bb_opendir(fileName); if (!dir) { - bb_perror_msg("%s", fileName); return FALSE; } status = TRUE; diff --git a/libbb/remove_file.c b/libbb/remove_file.c index ee1aaa5cd..2fa6596ee 100644 --- a/libbb/remove_file.c +++ b/libbb/remove_file.c @@ -4,19 +4,7 @@ * * Copyright (C) 2001 Matt Kraai * - * 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 tarball for details. */ #include @@ -71,8 +59,7 @@ int remove_file(const char *path, int flags) return 0; } - if ((dp = opendir(path)) == NULL) { - bb_perror_msg("unable to open `%s'", path); + if ((dp = bb_opendir(path)) == NULL) { return -1; } diff --git a/libbb/run_parts.c b/libbb/run_parts.c index 864460d0d..7bdae5b38 100644 --- a/libbb/run_parts.c +++ b/libbb/run_parts.c @@ -7,12 +7,7 @@ * rewrite to vfork usage by * Copyright (C) 2002 by Vladimir Oleynik * - * 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. - * - * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ @@ -69,7 +64,7 @@ int run_parts(char **args, const unsigned char test_mode, char **env) if (test_mode & 2) { return(2); } - bb_perror_msg_and_die("failed to open directory %s", arg0); + bb_perror_msg_and_die("unable to open `%s'", arg0); } for (i = 0; i < entries; i++) { diff --git a/procps/sysctl.c b/procps/sysctl.c index b8835c0d8..bcd229fdd 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -4,13 +4,8 @@ * * * "Copyright 1999 George Staikos - * This file may be used subject to the terms and conditions of the - * GNU General Public License Version 2, or any later version - * at your option, as published by the Free Software Foundation. - * 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." + * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. * * Changelog: * v1.01: @@ -57,7 +52,6 @@ static const char ERR_UNKNOWN_READING[] = "error: unknown error %d reading key '%s'\n"; static const char ERR_PERMISSION_DENIED[] = "error: permission denied on key '%s'\n"; -static const char ERR_OPENING_DIR[] = "error: unable to open directory '%s'\n"; static const char ERR_PRELOAD_FILE[] = "error: unable to open preload file '%s'\n"; static const char WARN_BAD_LINE[] = @@ -316,8 +310,7 @@ int sysctl_display_all(const char *path, int output, int show_table) char *tmpdir; struct stat ts; - if (!(dp = opendir(path))) { - bb_perror_msg(ERR_OPENING_DIR, path); + if (!(dp = bb_opendir(path))) { retval = -1; } else { while ((de = readdir(dp)) != NULL) {