Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pacman/pacman.c4
-rw-r--r--src/pacman/sync.c34
-rw-r--r--src/pacman/util.c33
-rw-r--r--src/pacman/util.h3
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);