diff options
| -rw-r--r-- | src/pacman/Makefile.am | 1 | ||||
| -rw-r--r-- | src/pacman/check.c | 82 | ||||
| -rw-r--r-- | src/pacman/check.h | 29 | ||||
| -rw-r--r-- | src/pacman/query.c | 56 | 
4 files changed, 113 insertions, 55 deletions
diff --git a/src/pacman/Makefile.am b/src/pacman/Makefile.am index d296d485..311f7c5b 100644 --- a/src/pacman/Makefile.am +++ b/src/pacman/Makefile.am @@ -27,6 +27,7 @@ AM_CPPFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"  endif  pacman_SOURCES = \ +	check.h check.c \  	conf.h conf.c \  	database.c \  	deptest.c \ diff --git a/src/pacman/check.c b/src/pacman/check.c new file mode 100644 index 00000000..e3b68a59 --- /dev/null +++ b/src/pacman/check.c @@ -0,0 +1,82 @@ +/* + *  check.c + * + *  Copyright (c) 2012 Pacman Development Team <pacman-dev@archlinux.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, see <http://www.gnu.org/licenses/>. + */ + +#include <limits.h> +#include <string.h> +#include <errno.h> + +/* pacman */ +#include "check.h" +#include "conf.h" +#include "util.h" + +/* Loop through the files of the package to check if they exist. */ +int check(alpm_pkg_t *pkg) +{ +	const char *root, *pkgname; +	size_t errors = 0; +	size_t rootlen; +	char f[PATH_MAX]; +	alpm_filelist_t *filelist; +	size_t i; + +	root = alpm_option_get_root(config->handle); +	rootlen = strlen(root); +	if(rootlen + 1 > PATH_MAX) { +		/* we are in trouble here */ +		pm_printf(ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, ""); +		return 1; +	} +	strcpy(f, root); + +	pkgname = alpm_pkg_get_name(pkg); +	filelist = alpm_pkg_get_files(pkg); +	for(i = 0; i < filelist->count; i++) { +		const alpm_file_t *file = filelist->files + i; +		struct stat st; +		const char *path = file->name; + +		if(rootlen + 1 + strlen(path) > PATH_MAX) { +			pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path); +			continue; +		} +		strcpy(f + rootlen, path); +		/* use lstat to prevent errors from symlinks */ +		if(lstat(f, &st) != 0) { +			if(config->quiet) { +				printf("%s %s\n", pkgname, f); +			} else { +				pm_printf(ALPM_LOG_WARNING, "%s: %s (%s)\n", +						pkgname, f, strerror(errno)); +			} +			errors++; +		} +	} + +	if(!config->quiet) { +		printf(_n("%s: %jd total file, ", "%s: %jd total files, ", +					(unsigned long)filelist->count), pkgname, (intmax_t)filelist->count); +		printf(_n("%jd missing file\n", "%jd missing files\n", +					(unsigned long)errors), (intmax_t)errors); +	} + +	return (errors != 0 ? 1 : 0); +} + +/* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/check.h b/src/pacman/check.h new file mode 100644 index 00000000..b107a7f5 --- /dev/null +++ b/src/pacman/check.h @@ -0,0 +1,29 @@ +/* + *  check.h + * + *  Copyright (c) 2012 Pacman Development Team <pacman-dev@archlinux.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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _PM_CHECK_H +#define _PM_CHECK_H + +#include <alpm.h> + +int check(alpm_pkg_t *pkg); + +#endif /* _PM_CHECK_H */ + +/* vim: set ts=2 sw=2 noet: */ diff --git a/src/pacman/query.c b/src/pacman/query.c index 72891200..f2d5f007 100644 --- a/src/pacman/query.c +++ b/src/pacman/query.c @@ -22,7 +22,6 @@  #include <stdio.h>  #include <stdint.h>  #include <limits.h> -#include <string.h>  #include <sys/stat.h>  #include <unistd.h>  #include <errno.h> @@ -33,6 +32,7 @@  /* pacman */  #include "pacman.h"  #include "package.h" +#include "check.h"  #include "conf.h"  #include "util.h" @@ -393,60 +393,6 @@ static int filter(alpm_pkg_t *pkg)  	return 1;  } -/* Loop through the packages. For each package, - * loop through files to check if they exist. */ -static int check(alpm_pkg_t *pkg) -{ -	const char *root, *pkgname; -	size_t errors = 0; -	size_t rootlen; -	char f[PATH_MAX]; -	alpm_filelist_t *filelist; -	size_t i; - -	root = alpm_option_get_root(config->handle); -	rootlen = strlen(root); -	if(rootlen + 1 > PATH_MAX) { -		/* we are in trouble here */ -		pm_printf(ALPM_LOG_ERROR, _("path too long: %s%s\n"), root, ""); -		return 1; -	} -	strcpy(f, root); - -	pkgname = alpm_pkg_get_name(pkg); -	filelist = alpm_pkg_get_files(pkg); -	for(i = 0; i < filelist->count; i++) { -		const alpm_file_t *file = filelist->files + i; -		struct stat st; -		const char *path = file->name; - -		if(rootlen + 1 + strlen(path) > PATH_MAX) { -			pm_printf(ALPM_LOG_WARNING, _("path too long: %s%s\n"), root, path); -			continue; -		} -		strcpy(f + rootlen, path); -		/* use lstat to prevent errors from symlinks */ -		if(lstat(f, &st) != 0) { -			if(config->quiet) { -				printf("%s %s\n", pkgname, f); -			} else { -				pm_printf(ALPM_LOG_WARNING, "%s: %s (%s)\n", -						pkgname, f, strerror(errno)); -			} -			errors++; -		} -	} - -	if(!config->quiet) { -		printf(_n("%s: %jd total file, ", "%s: %jd total files, ", -					(unsigned long)filelist->count), pkgname, (intmax_t)filelist->count); -		printf(_n("%jd missing file\n", "%jd missing files\n", -					(unsigned long)errors), (intmax_t)errors); -	} - -	return (errors != 0 ? 1 : 0); -} -  static int display(alpm_pkg_t *pkg)  {  	int ret = 0;  | 
