diff options
Diffstat (limited to 'src/pacman')
| -rw-r--r-- | src/pacman/pacman.c | 4 | ||||
| -rw-r--r-- | src/pacman/sync.c | 34 | ||||
| -rw-r--r-- | src/pacman/util.c | 33 | ||||
| -rw-r--r-- | src/pacman/util.h | 3 | 
4 files changed, 29 insertions, 45 deletions
| diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c index 3e17d905..014520e8 100644 --- a/src/pacman/pacman.c +++ b/src/pacman/pacman.c @@ -218,7 +218,7 @@ static void version(void)  {  	printf("\n");  	printf(" .--.                  Pacman v%s - libalpm v%s\n", PACKAGE_VERSION, alpm_version()); -	printf("/ _.-' .-.  .-.  .-.   Copyright (C) 2006-2011 Pacman Development Team\n"); +	printf("/ _.-' .-.  .-.  .-.   Copyright (C) 2006-2012 Pacman Development Team\n");  	printf("\\  '-. '-'  '-'  '-'   Copyright (C) 2002-2006 Judd Vinet\n");  	printf(" '--'\n");  	printf(_("                       This program may be freely redistributed under\n" @@ -791,7 +791,7 @@ int main(int argc, char *argv[])  	config = config_new();  	/* disable progressbar if the output is redirected */ -	if(!isatty(1)) { +	if(!isatty(fileno(stdout))) {  		config->noprogressbar = 1;  	} diff --git a/src/pacman/sync.c b/src/pacman/sync.c index a13b6c7f..e22f94f7 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -1,7 +1,7 @@  /*   *  sync.c   * - *  Copyright (c) 2006-2011 Pacman Development Team <pacman-dev@archlinux.org> + *  Copyright (c) 2006-2012 Pacman Development Team <pacman-dev@archlinux.org>   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *   *  This program is free software; you can redistribute it and/or modify @@ -196,7 +196,6 @@ static int sync_cleancache(int level)  		/* step through the directory one file at a time */  		while((ent = readdir(dir)) != NULL) {  			char path[PATH_MAX]; -			size_t pathlen;  			int delete = 1;  			alpm_pkg_t *localpkg = NULL, *pkg = NULL;  			const char *local_name, *local_version; @@ -207,30 +206,18 @@ static int sync_cleancache(int level)  			/* build the full filepath */  			snprintf(path, PATH_MAX, "%s%s", cachedir, ent->d_name); -			/* short circuit for removing all packages from cache */ +			/* short circuit for removing all files from cache */  			if(level > 1) {  				unlink(path);  				continue;  			} -			/* we handle .sig files with packages, not separately */ -			pathlen = strlen(path); -			if(strcmp(path + pathlen - 4, ".sig") == 0) { -				continue; -			} - -			/* attempt to load the package, prompt removal on failures as we may have -			 * files here that aren't valid packages. we also don't need a full -			 * load of the package, just the metadata. */ -			if(alpm_pkg_load(config->handle, path, 0, 0, &localpkg) != 0 -					|| localpkg == NULL) { -				if(yesno(_("File %s does not seem to be a valid package, remove it?"), -							path)) { -					if(localpkg) { -						alpm_pkg_free(localpkg); -					} -					unlink(path); -				} +			/* attempt to load the file as a package. if we cannot load the file, +			 * simply skip it and move on. we don't need a full load of the package, +			 * just the metadata. */ +			if(alpm_pkg_load(config->handle, path, 0, 0, &localpkg) != 0) { +				pm_printf(ALPM_LOG_DEBUG, "skipping %s, could not load as package\n", +						path);  				continue;  			}  			local_name = alpm_pkg_get_name(localpkg); @@ -242,7 +229,7 @@ static int sync_cleancache(int level)  				if(pkg != NULL && alpm_pkg_vercmp(local_version,  							alpm_pkg_get_version(pkg)) == 0) {  					/* package was found in local DB and version matches, keep it */ -					pm_printf(ALPM_LOG_DEBUG, "pkg %s-%s found in local db\n", +					pm_printf(ALPM_LOG_DEBUG, "package %s-%s found in local db\n",  							local_name, local_version);  					delete = 0;  				} @@ -256,7 +243,7 @@ static int sync_cleancache(int level)  					if(pkg != NULL && alpm_pkg_vercmp(local_version,  								alpm_pkg_get_version(pkg)) == 0) {  						/* package was found in a sync DB and version matches, keep it */ -						pm_printf(ALPM_LOG_DEBUG, "pkg %s-%s found in sync db\n", +						pm_printf(ALPM_LOG_DEBUG, "package %s-%s found in sync db\n",  								local_name, local_version);  						delete = 0;  					} @@ -266,6 +253,7 @@ static int sync_cleancache(int level)  			alpm_pkg_free(localpkg);  			if(delete) { +				size_t pathlen = strlen(path);  				unlink(path);  				/* unlink a signature file if present too */  				if(PATH_MAX - 5 >= pathlen) { diff --git a/src/pacman/util.c b/src/pacman/util.c index 467bedfe..27efdb0a 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -1,7 +1,7 @@  /*   *  util.c   * - *  Copyright (c) 2006-2011 Pacman Development Team <pacman-dev@archlinux.org> + *  Copyright (c) 2006-2012 Pacman Development Team <pacman-dev@archlinux.org>   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *   *  This program is free software; you can redistribute it and/or modify @@ -190,10 +190,10 @@ int rmrf(const char *path)  			return 1;  		}  		for(dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) { -			if(dp->d_ino) { -				char name[PATH_MAX]; -				sprintf(name, "%s/%s", path, dp->d_name); +			if(dp->d_name) {  				if(strcmp(dp->d_name, "..") != 0 && strcmp(dp->d_name, ".") != 0) { +					char name[PATH_MAX]; +					snprintf(name, PATH_MAX, "%s/%s", path, dp->d_name);  					errflag += rmrf(name);  				}  			} @@ -310,19 +310,6 @@ void indentprint(const char *str, size_t indent)  	free(wcstr);  } -/* Convert a string to uppercase - */ -char *strtoupper(char *str) -{ -	char *ptr = str; - -	while(*ptr) { -		(*ptr) = (char)toupper((unsigned char)*ptr); -		ptr++; -	} -	return str; -} -  /* Trim whitespace and newlines from a string   */  size_t strtrim(char *str) @@ -898,8 +885,12 @@ static void _display_targets(alpm_list_t *targets, int verbose)  			/* add up size of all removed packages */  			rsize += alpm_pkg_get_isize(target->remove);  		} +	} + +	/* form data for both verbose and non-verbose display */ +	for(i = targets; i; i = alpm_list_next(i)) { +		pm_target_t *target = i->data; -		/* form data for both verbose and non-verbose display */  		rows = alpm_list_add(rows, create_verbose_row(target, show_dl_size));  		if(target->install) {  			pm_asprintf(&str, "%s-%s", alpm_pkg_get_name(target->install), @@ -1430,6 +1421,12 @@ static int question(short preset, char *fmt, va_list args)  			return preset;  		} +		/* if stdin is piped, response does not get printed out, and as a result +		 * a \n is missing, resulting in broken output (FS#27909) */ +		if(!isatty(fileno(stdin))) { +			fprintf(stream, "%s\n", response); +		} +  		if(strcasecmp(response, _("Y")) == 0 || strcasecmp(response, _("YES")) == 0) {  			return 1;  		} else if(strcasecmp(response, _("N")) == 0 || strcasecmp(response, _("NO")) == 0) { diff --git a/src/pacman/util.h b/src/pacman/util.h index 5d3ea2f1..18048de9 100644 --- a/src/pacman/util.h +++ b/src/pacman/util.h @@ -1,7 +1,7 @@  /*   *  util.h   * - *  Copyright (c) 2006-2011 Pacman Development Team <pacman-dev@archlinux.org> + *  Copyright (c) 2006-2012 Pacman Development Team <pacman-dev@archlinux.org>   *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>   *   *  This program is free software; you can redistribute it and/or modify @@ -52,7 +52,6 @@ int rmrf(const char *path);  const char *mbasename(const char *path);  char *mdirname(const char *path);  void indentprint(const char *str, size_t indent); -char *strtoupper(char *str);  size_t strtrim(char *str);  char *strreplace(const char *str, const char *needle, const char *replace);  alpm_list_t *strsplit(const char *str, const char splitchar); | 
