summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/pacman.8.txt19
-rw-r--r--lib/libalpm/add.c16
-rw-r--r--lib/libalpm/alpm.h1
-rw-r--r--lib/libalpm/be_package.c34
-rw-r--r--lib/libalpm/conflict.c4
-rw-r--r--lib/libalpm/deps.c2
-rw-r--r--lib/libalpm/dload.c2
-rw-r--r--lib/libalpm/package.c2
-rw-r--r--lib/libalpm/trans.c4
-rw-r--r--lib/libalpm/util.c20
-rw-r--r--scripts/makepkg.sh.in237
-rw-r--r--src/pacman/callback.c2
-rw-r--r--src/pacman/package.c2
-rw-r--r--src/pacman/pacman.c17
-rw-r--r--src/pacman/sync.c8
-rw-r--r--src/pacman/upgrade.c2
-rw-r--r--src/pacman/util.c6
-rw-r--r--src/util/testdb.c2
18 files changed, 211 insertions, 169 deletions
diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt
index 3d14a42a..de1f51f8 100644
--- a/doc/pacman.8.txt
+++ b/doc/pacman.8.txt
@@ -415,6 +415,25 @@ original=X, current=Y, new=Z::
necessary changes into the original file.
+Examples
+--------
+
+pacman -Ss ne.hack::
+ Search for regexp "ne.hack" in package database.
+
+pacman -S gpm::
+ Download and install gpm including dependencies.
+
+pacman -U /home/user/ceofhack-0.6-1-x86_64.pkg.tar.gz::
+ Install ceofhack-0.6-1 package from a local file.
+
+pacman -Syu::
+ Update package list and upgrade all packages afterwards.
+
+pacman -Syu gpm::
+ Update package list, upgrade all packages, and then install gpm if it
+ wasn't already installed.
+
Configuration
-------------
See linkman:pacman.conf[5] for more details on configuring pacman using the
diff --git a/lib/libalpm/add.c b/lib/libalpm/add.c
index f39a0ecf..cc0c4c13 100644
--- a/lib/libalpm/add.c
+++ b/lib/libalpm/add.c
@@ -556,6 +556,7 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
struct archive *archive;
struct archive_entry *entry;
char cwd[PATH_MAX] = "";
+ int restore_cwd = 0;
_alpm_log(PM_LOG_DEBUG, "extracting files\n");
@@ -579,11 +580,16 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
/* save the cwd so we can restore it later */
if(getcwd(cwd, PATH_MAX) == NULL) {
_alpm_log(PM_LOG_ERROR, _("could not get current working directory\n"));
- cwd[0] = 0;
+ } else {
+ restore_cwd = 1;
}
/* libarchive requires this for extracting hard links */
- chdir(handle->root);
+ if(chdir(handle->root) != 0) {
+ _alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), handle->root, strerror(errno));
+ ret = -1;
+ goto cleanup;
+ }
/* call PROGRESS once with 0 percent, as we sort-of skip that here */
if(is_upgrade) {
@@ -629,9 +635,9 @@ static int commit_single_pkg(pmpkg_t *newpkg, int pkg_current, int pkg_count,
}
archive_read_finish(archive);
- /* restore the old cwd is we have it */
- if(strlen(cwd)) {
- chdir(cwd);
+ /* restore the old cwd if we have it */
+ if(restore_cwd && chdir(cwd) != 0) {
+ _alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));
}
if(errors) {
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index 33291325..0c01f214 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -522,6 +522,7 @@ enum _pmerrno_t {
PM_ERR_FILE_CONFLICTS,
/* Misc */
PM_ERR_RETRIEVE,
+ PM_ERR_WRITE,
PM_ERR_INVALID_REGEX,
/* External library errors */
PM_ERR_LIBARCHIVE,
diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c
index 38cf357a..7b77ae6b 100644
--- a/lib/libalpm/be_package.c
+++ b/lib/libalpm/be_package.c
@@ -69,19 +69,19 @@ static int parse_descfile(struct archive *a, pmpkg_t *newpkg)
} else {
key = _alpm_strtrim(key);
ptr = _alpm_strtrim(ptr);
- if(!strcmp(key, "pkgname")) {
+ if(strcmp(key, "pkgname") == 0) {
STRDUP(newpkg->name, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "pkgver")) {
+ } else if(strcmp(key, "pkgver") == 0) {
STRDUP(newpkg->version, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "pkgdesc")) {
+ } else if(strcmp(key, "pkgdesc") == 0) {
STRDUP(newpkg->desc, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "group")) {
+ } else if(strcmp(key, "group") == 0) {
newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
- } else if(!strcmp(key, "url")) {
+ } else if(strcmp(key, "url") == 0) {
STRDUP(newpkg->url, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "license")) {
+ } else if(strcmp(key, "license") == 0) {
newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
- } else if(!strcmp(key, "builddate")) {
+ } else if(strcmp(key, "builddate") == 0) {
char first = tolower((unsigned char)ptr[0]);
if(first > 'a' && first < 'z') {
struct tm tmp_tm = {0}; /* initialize to null in case of failure */
@@ -92,27 +92,27 @@ static int parse_descfile(struct archive *a, pmpkg_t *newpkg)
} else {
newpkg->builddate = atol(ptr);
}
- } else if(!strcmp(key, "packager")) {
+ } else if(strcmp(key, "packager") == 0) {
STRDUP(newpkg->packager, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "arch")) {
+ } else if(strcmp(key, "arch") == 0) {
STRDUP(newpkg->arch, ptr, RET_ERR(PM_ERR_MEMORY, -1));
- } else if(!strcmp(key, "size")) {
+ } else if(strcmp(key, "size") == 0) {
/* size in the raw package is uncompressed (installed) size */
newpkg->isize = atol(ptr);
- } else if(!strcmp(key, "depend")) {
+ } else if(strcmp(key, "depend") == 0) {
pmdepend_t *dep = _alpm_splitdep(ptr);
newpkg->depends = alpm_list_add(newpkg->depends, dep);
- } else if(!strcmp(key, "optdepend")) {
+ } else if(strcmp(key, "optdepend") == 0) {
newpkg->optdepends = alpm_list_add(newpkg->optdepends, strdup(ptr));
- } else if(!strcmp(key, "conflict")) {
+ } else if(strcmp(key, "conflict") == 0) {
newpkg->conflicts = alpm_list_add(newpkg->conflicts, strdup(ptr));
- } else if(!strcmp(key, "replaces")) {
+ } else if(strcmp(key, "replaces") == 0) {
newpkg->replaces = alpm_list_add(newpkg->replaces, strdup(ptr));
- } else if(!strcmp(key, "provides")) {
+ } else if(strcmp(key, "provides") == 0) {
newpkg->provides = alpm_list_add(newpkg->provides, strdup(ptr));
- } else if(!strcmp(key, "backup")) {
+ } else if(strcmp(key, "backup") == 0) {
newpkg->backup = alpm_list_add(newpkg->backup, strdup(ptr));
- } else if(!strcmp(key, "makepkgopt")) {
+ } else if(strcmp(key, "makepkgopt") == 0) {
/* not used atm */
} else {
_alpm_log(PM_LOG_DEBUG, "%s: syntax error in description file line %d\n",
diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c
index e36844a8..236ec1df 100644
--- a/lib/libalpm/conflict.c
+++ b/lib/libalpm/conflict.c
@@ -88,8 +88,8 @@ int _alpm_conflict_isin(pmconflict_t *needle, alpm_list_t *haystack)
char *cpkg2 = conflict->package2;
char *npkg1 = needle->package1;
char *npkg2 = needle->package2;
- if((!strcmp(cpkg1, npkg1) && !strcmp(cpkg2, npkg2))
- || (!strcmp(cpkg1, npkg2) && !strcmp(cpkg2, npkg1))) {
+ if((strcmp(cpkg1, npkg1) == 0 && strcmp(cpkg2, npkg2) == 0)
+ || (strcmp(cpkg1, npkg2) == 0 && strcmp(cpkg2, npkg1) == 0)) {
return(1);
}
}
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 26f9b16d..fd893a63 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -546,7 +546,7 @@ pmpkg_t *_alpm_resolvedep(pmdepend_t *dep, alpm_list_t *dbs,
for(i = dbs; i; i = i->next) {
for(j = _alpm_db_get_pkgcache(i->data); j; j = j->next) {
pmpkg_t *pkg = j->data;
- if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) &&
+ if(alpm_depcmp(pkg, dep) && strcmp(pkg->name, dep->name) != 0 &&
!_alpm_pkg_find(excluding, pkg->name)) {
if(_alpm_pkg_should_ignore(pkg)) {
int install = 0;
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index c11148d1..3185d2aa 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -251,7 +251,7 @@ static int download_internal(const char *url, const char *localpath,
check_stop();
size_t nwritten = 0;
nwritten = fwrite(buffer, 1, nread, localf);
- if((nwritten != nread) || ferror(localf)) {
+ if((nwritten != (size_t)nread) || ferror(localf)) {
pm_errno = PM_ERR_RETRIEVE;
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
tempfile, strerror(errno));
diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c
index becbc60f..0060300c 100644
--- a/lib/libalpm/package.c
+++ b/lib/libalpm/package.c
@@ -749,7 +749,7 @@ int _alpm_pkg_cmp(const void *p1, const void *p2)
{
pmpkg_t *pkg1 = (pmpkg_t *)p1;
pmpkg_t *pkg2 = (pmpkg_t *)p2;
- return(strcmp(pkg1->name, pkg2->name));
+ return(strcoll(pkg1->name, pkg2->name));
}
/* Test for existence of a package in a alpm_list_t*
diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c
index 49fc0f67..c042f099 100644
--- a/lib/libalpm/trans.c
+++ b/lib/libalpm/trans.c
@@ -107,7 +107,7 @@ static alpm_list_t *check_arch(alpm_list_t *pkgs)
for(i = pkgs; i; i = i->next) {
pmpkg_t *pkg = i->data;
const char *pkgarch = alpm_pkg_get_arch(pkg);
- if(strcmp(pkgarch,arch) && strcmp(pkgarch,"any")) {
+ if(strcmp(pkgarch,arch) != 0 && strcmp(pkgarch,"any") != 0) {
char *string;
const char *pkgname = alpm_pkg_get_name(pkg);
const char *pkgver = alpm_pkg_get_version(pkg);
@@ -371,7 +371,7 @@ int _alpm_runscriptlet(const char *root, const char *installfn,
/* either extract or copy the scriptlet */
snprintf(scriptfn, PATH_MAX, "%s/.INSTALL", tmpdir);
- if(!strcmp(script, "pre_upgrade") || !strcmp(script, "pre_install")) {
+ if(strcmp(script, "pre_upgrade") == 0 || strcmp(script, "pre_install") == 0) {
if(_alpm_unpack_single(installfn, tmpdir, ".INSTALL")) {
retval = 1;
}
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index 32eaa442..ffebe9e8 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -143,7 +143,15 @@ int _alpm_copyfile(const char *src, const char *dest)
/* do the actual file copy */
while((len = fread(buf, 1, CPBUFSIZE, in))) {
- fwrite(buf, 1, len, out);
+ size_t nwritten = 0;
+ nwritten = fwrite(buf, 1, len, out);
+ if((nwritten != len) || ferror(out)) {
+ pm_errno = PM_ERR_WRITE;
+ _alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
+ dest, strerror(errno));
+ ret = -1;
+ goto cleanup;
+ }
}
/* chmod dest to permissions of src, as long as it is not a symlink */
@@ -364,8 +372,8 @@ int _alpm_unpack(const char *archive, const char *prefix, alpm_list_t *list, int
cleanup:
umask(oldmask);
archive_read_finish(_archive);
- if(restore_cwd) {
- chdir(cwd);
+ if(restore_cwd && chdir(cwd) != 0) {
+ _alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));
}
return(ret);
}
@@ -398,7 +406,7 @@ int _alpm_rmrf(const char *path)
for(dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
if(dp->d_ino) {
sprintf(name, "%s/%s", path, dp->d_name);
- if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) {
+ if(strcmp(dp->d_name, "..") != 0 && strcmp(dp->d_name, ".") != 0) {
errflag += _alpm_rmrf(name);
}
}
@@ -534,8 +542,8 @@ int _alpm_run_chroot(const char *root, const char *cmd)
}
cleanup:
- if(restore_cwd) {
- chdir(cwd);
+ if(restore_cwd && chdir(cwd) != 0) {
+ _alpm_log(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));
}
return(retval);
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 516e1d7c..9f3bbb2c 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -135,6 +135,8 @@ clean_up() {
fi
if (( ! EXIT_CODE && CLEANUP )); then
+ local pkg file
+
# If it's a clean exit and -c/--clean has been passed...
msg "$(gettext "Cleaning up...")"
rm -rf "$pkgdir" "$srcdir"
@@ -153,7 +155,7 @@ clean_up() {
# clean up dangling symlinks to packages
for pkg in ${pkgname[@]}; do
- for file in ${pkg}-*-*-${CARCH}${PKGEXT}; do
+ for file in ${pkg}-*-*-${CARCH}{${PKGEXT},${SRCEXT}}; do
if [[ -h $file && ! -e $file ]]; then
rm -f $file
fi
@@ -308,7 +310,7 @@ get_downloadclient() {
for i in "${DLAGENTS[@]}"; do
local handler="${i%%::*}"
if [[ $proto = $handler ]]; then
- agent="${i##*::}"
+ local agent="${i##*::}"
break
fi
done
@@ -323,7 +325,7 @@ get_downloadclient() {
# ensure specified program is installed
local program="${agent%% *}"
if [[ ! -x $program ]]; then
- local baseprog=$(basename $program)
+ local baseprog="${program##*/}"
error "$(gettext "The download program %s is not installed.")" "$baseprog"
plain "$(gettext "Aborting...")"
exit 1 # $E_MISSING_PROGRAM
@@ -387,6 +389,7 @@ check_deps() {
# Also, a non-zero return value is not unexpected and we are manually dealing them
set +E
local ret=0
+ local pmout
pmout=$(run_pacman -T "$@") || ret=$?
set -E
@@ -543,7 +546,7 @@ generate_checksums() {
msg "$(gettext "Generating checksums for source files...")"
plain ""
- if [ ! $(type -p openssl) ]; then
+ if ! type -p openssl >/dev/null; then
error "$(gettext "Cannot find openssl.")"
exit 1 # $E_MISSING_PROGRAM
fi
@@ -593,7 +596,7 @@ generate_checksums() {
check_checksums() {
(( ! ${#source[@]} )) && return 0
- if [ ! $(type -p openssl) ]; then
+ if ! type -p openssl >/dev/null; then
error "$(gettext "Cannot find openssl.")"
exit 1 # $E_MISSING_PROGRAM
fi
@@ -654,7 +657,7 @@ extract_sources() {
msg "$(gettext "Extracting Sources...")"
local netfile
for netfile in "${source[@]}"; do
- file=$(get_filename "$netfile")
+ local file=$(get_filename "$netfile")
if in_array "$file" ${noextract[@]}; then
#skip source files in the noextract=() array
# these are marked explicitly to NOT be extracted
@@ -685,9 +688,12 @@ extract_sources() {
*) continue;;
esac ;;
*)
- # Don't know what to use to extract this file,
- # skip to the next file
- continue;;
+ # See if bsdtar can recognize the file
+ if bsdtar -tf "$file" -q '*' &>/dev/null; then
+ cmd="bsdtar"
+ else
+ continue
+ fi ;;
esac
local ret=0
@@ -717,6 +723,7 @@ error_function() {
fi
# first exit all subshells, then print the error
if (( ! BASH_SUBSHELL )); then
+ error "$(gettext "A failure occurred in %s().")" "$1"
plain "$(gettext "Aborting...")"
remove_deps
fi
@@ -727,7 +734,7 @@ run_function() {
if [[ -z $1 ]]; then
return 1
fi
- pkgfunc="$1"
+ local pkgfunc="$1"
# clear user-specified makeflags if requested
if [[ $(check_option makeflags) = "n" ]]; then
@@ -743,8 +750,9 @@ run_function() {
local shellopts=$(shopt -p)
local ret=0
+ local restoretrap
if (( LOGGING )); then
- BUILDLOG="${startdir}/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-$pkgfunc.log"
+ local BUILDLOG="${startdir}/${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-$pkgfunc.log"
if [[ -f $BUILDLOG ]]; then
local i=1
while true; do
@@ -764,7 +772,7 @@ run_function() {
tee "$BUILDLOG" < "$logpipe" &
exec 1>"$logpipe" 2>"$logpipe"
restoretrap=$(trap -p ERR)
- trap 'error_function' ERR
+ trap 'error_function $pkgfunc' ERR
$pkgfunc 2>&1
eval $restoretrap
sync
@@ -772,7 +780,7 @@ run_function() {
rm "$logpipe"
else
restoretrap=$(trap -p ERR)
- trap 'error_function' ERR
+ trap 'error_function $pkgfunc' ERR
$pkgfunc 2>&1
eval $restoretrap
fi
@@ -799,6 +807,7 @@ run_build() {
}
run_package() {
+ local pkgfunc
if [[ -z $1 ]]; then
pkgfunc="package"
else
@@ -905,56 +914,41 @@ write_pkginfo() {
size="$(( ${size%%[^0-9]*} * 1024 ))"
msg2 "$(gettext "Generating .PKGINFO file...")"
- echo "# Generated by makepkg $myver" >.PKGINFO
+ echo "# Generated by makepkg $myver"
if (( INFAKEROOT )); then
- echo "# using $(fakeroot -v)" >>.PKGINFO
- fi
- echo "# $(LC_ALL=C date -u)" >>.PKGINFO
- echo "pkgname = $1" >>.PKGINFO
- (( SPLITPKG )) && echo pkgbase = $pkgbase >>.PKGINFO
- echo "pkgver = $pkgver-$pkgrel" >>.PKGINFO
- echo "pkgdesc = $pkgdesc" >>.PKGINFO
- echo "url = $url" >>.PKGINFO
- echo "builddate = $builddate" >>.PKGINFO
- echo "packager = $packager" >>.PKGINFO
- echo "size = $size" >>.PKGINFO
- echo "arch = $PKGARCH" >>.PKGINFO
+ echo "# using $(fakeroot -v)"
+ fi
+ echo "# $(LC_ALL=C date -u)"
+ echo "pkgname = $1"
+ (( SPLITPKG )) && echo pkgbase = $pkgbase
+ echo "pkgver = $pkgver-$pkgrel"
+ echo "pkgdesc = $pkgdesc"
+ echo "url = $url"
+ echo "builddate = $builddate"
+ echo "packager = $packager"
+ echo "size = $size"
+ echo "arch = $PKGARCH"
if [[ $(check_option force) = "y" ]]; then
- echo "force = true" >> .PKGINFO
+ echo "force = true"
fi
+ [[ $license ]] && printf "license = %s\n" "${license[@]}"
+ [[ $replaces ]] && printf "replaces = %s\n" "${replaces[@]}"
+ [[ $groups ]] && printf "group = %s\n" "${groups[@]}"
+ [[ $depends ]] && printf "depend = %s\n" "${depends[@]}"
+ [[ $optdepends ]] && printf "optdepend = %s\n" "${optdepends[@]}"
+ [[ $conflicts ]] && printf "conflict = %s\n" "${conflicts[@]}"
+ [[ $provides ]] && printf "provides = %s\n" "${provides[@]}"
+ [[ $backup ]] && printf "backup = %s\n" "${backup[@]}"
+
local it
- for it in "${license[@]}"; do
- echo "license = $it" >>.PKGINFO
- done
- for it in "${replaces[@]}"; do
- echo "replaces = $it" >>.PKGINFO
- done
- for it in "${groups[@]}"; do
- echo "group = $it" >>.PKGINFO
- done
- for it in "${depends[@]}"; do
- echo "depend = $it" >>.PKGINFO
- done
- for it in "${optdepends[@]}"; do
- echo "optdepend = $it" >>.PKGINFO
- done
- for it in "${conflicts[@]}"; do
- echo "conflict = $it" >>.PKGINFO
- done
- for it in "${provides[@]}"; do
- echo "provides = $it" >>.PKGINFO
- done
- for it in "${backup[@]}"; do
- echo "backup = $it" >>.PKGINFO
- done
for it in "${packaging_options[@]}"; do
local ret="$(check_option $it)"
if [[ $ret != "?" ]]; then
if [[ $ret = y ]]; then
- echo "makepkgopt = $it" >>.PKGINFO
+ echo "makepkgopt = $it"
else
- echo "makepkgopt = !$it" >>.PKGINFO
+ echo "makepkgopt = !$it"
fi
fi
done
@@ -996,6 +990,7 @@ create_package() {
cd "$pkgdir"
msg "$(gettext "Creating package...")"
+ local nameofpkg
if [[ -z $1 ]]; then
nameofpkg="$pkgname"
else
@@ -1008,7 +1003,7 @@ create_package() {
PKGARCH=$CARCH
fi
- write_pkginfo $nameofpkg
+ write_pkginfo $nameofpkg > .PKGINFO
local comp_files=".PKGINFO"
@@ -1031,6 +1026,7 @@ create_package() {
# tar it up
msg2 "$(gettext "Compressing package...")"
+ local EXT
case "$PKGEXT" in
*tar.gz) EXT=${PKGEXT%.gz} ;;
*tar.bz2) EXT=${PKGEXT%.bz2} ;;
@@ -1142,6 +1138,16 @@ create_srcpackage() {
error "$(gettext "Failed to create source package file.")"
exit 1 # TODO: error code
fi
+
+ if (( ! ret )) && [[ "$SRCPKGDEST" != "${startdir}" ]]; then
+ ln -sf "${pkg_file}" "${pkg_file/$SRCPKGDEST/$startdir}"
+ ret=$?
+ fi
+
+ if (( ret )); then
+ warning "$(gettext "Failed to create symlink to source package file.")"
+ fi
+
cd "${startdir}"
rm -rf "${srclinks}"
}
@@ -1155,12 +1161,12 @@ install_package() {
msg "$(gettext "Installing %s package group with %s -U...")" "$pkgbase" "$PACMAN"
fi
- local pkglist
+ local pkg pkglist
for pkg in ${pkgname[@]}; do
if [[ -f $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT} ]]; then
- pkglist="${pkglist} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
+ pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
else
- pkglist="${pkglist} $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT}"
+ pkglist+=" $PKGDEST/${pkg}-${pkgver}-${pkgrel}-any${PKGEXT}"
fi
done
@@ -1172,18 +1178,13 @@ install_package() {
check_sanity() {
# check for no-no's in the build script
- if [[ -z $pkgname ]]; then
- error "$(gettext "%s is not allowed to be empty.")" "pkgname"
- return 1
- fi
- if [[ -z $pkgver ]]; then
- error "$(gettext "%s is not allowed to be empty.")" "pkgver"
- return 1
- fi
- if [[ -z $pkgrel ]]; then
- error "$(gettext "%s is not allowed to be empty.")" "pkgrel"
- return 1
- fi
+ local i
+ for i in 'pkgname' 'pkgrel' 'pkgver'; do
+ if [[ -z ${!i} ]]; then
+ error "$(gettext "%s is not allowed to be empty.")" "$i"
+ return 1
+ fi
+ done
local name
for name in "${pkgname[@]}"; do
@@ -1235,7 +1236,7 @@ check_sanity() {
local optdepend
for optdepend in "${optdepends[@]}"; do
- pkg=${optdepend%%:*}
+ local pkg=${optdepend%%:*}
if [[ ! $pkg =~ ^[[:alnum:]\>\<\=\.\+\_\-]*$ ]]; then
error "$(gettext "Invalid syntax for optdepend : '%s'")" "$optdepend"
fi
@@ -1274,9 +1275,10 @@ check_sanity() {
return 1
fi
+ local pkg
if (( ${#pkgname[@]} > 1 )); then
for pkg in ${pkgname[@]}; do
- if [ "$(type -t package_${pkg})" != "function" ]; then
+ if ! declare -f package_${pkg} >/dev/null; then
error "$(gettext "missing package function for split package '%s'")" "$pkg"
return 1
fi
@@ -1313,27 +1315,27 @@ devel_check() {
# Also do a brief check to make sure we have the VCS tool available.
oldpkgver=$pkgver
if [[ -n ${_darcstrunk} && -n ${_darcsmod} ]] ; then
- [ $(type -p darcs) ] || return 0
+ type -p darcs >/dev/null || return 0
msg "$(gettext "Determining latest darcs revision...")"
newpkgver=$(date +%Y%m%d)
elif [[ -n ${_cvsroot} && -n ${_cvsmod} ]] ; then
- [ $(type -p cvs) ] || return 0
+ type -p cvs >/dev/null || return 0
msg "$(gettext "Determining latest cvs revision...")"
newpkgver=$(date +%Y%m%d)
elif [[ -n ${_gitroot} && -n ${_gitname} ]] ; then
- [ $(type -p git) ] || return 0
+ type -p git >/dev/null || return 0
msg "$(gettext "Determining latest git revision...")"
newpkgver=$(date +%Y%m%d)
elif [[ -n ${_svntrunk} && -n ${_svnmod} ]] ; then
- [ $(type -p svn) ] || return 0
+ type -p svn >/dev/null || return 0
msg "$(gettext "Determining latest svn revision...")"
newpkgver=$(LC_ALL=C svn info $_svntrunk | sed -n 's/^Last Changed Rev: \([0-9]*\)$/\1/p')
elif [[ -n ${_bzrtrunk} && -n ${_bzrmod} ]] ; then
- [ $(type -p bzr) ] || return 0
+ type -p bzr >/dev/null || return 0
msg "$(gettext "Determining latest bzr revision...")"
newpkgver=$(bzr revno ${_bzrtrunk})
elif [[ -n ${_hgroot} && -n ${_hgrepo} ]] ; then
- [ $(type -p hg) ] || return 0
+ type -p hg >/dev/null || return 0
msg "$(gettext "Determining latest hg revision...")"
if [[ -d ./src/$_hgrepo ]] ; then
cd ./src/$_hgrepo
@@ -1380,15 +1382,17 @@ devel_update() {
}
backup_package_variables() {
+ local var
for var in ${splitpkg_overrides[@]}; do
- indirect="${var}_backup"
+ local indirect="${var}_backup"
eval "${indirect}=(\"\${$var[@]}\")"
done
}
restore_package_variables() {
+ local var
for var in ${splitpkg_overrides[@]}; do
- indirect="${var}_backup"
+ local indirect="${var}_backup"
if [[ -n ${!indirect} ]]; then
eval "${var}=(\"\${$indirect[@]}\")"
else
@@ -1397,12 +1401,27 @@ restore_package_variables() {
done
}
+run_split_packaging() {
+ for pkg in ${pkgname[@]}; do
+ pkgdir="$pkgdir/$pkg"
+ mkdir -p "$pkgdir"
+ chmod a-s "$pkgdir"
+ backup_package_variables
+ run_package $pkg
+ tidy_install
+ create_package $pkg
+ restore_package_variables
+ pkgdir="${pkgdir%/*}"
+ done
+}
+
# getopt like parser
parse_options() {
local short_options=$1; shift;
local long_options=$1; shift;
local ret=0;
local unused_options=""
+ local i
while [[ -n $1 ]]; do
if [[ ${1:0:2} = '--' ]]; then
@@ -1535,7 +1554,7 @@ There is NO WARRANTY, to the extent permitted by law.\n")"
# PROGRAM START
# determine whether we have gettext; make it a no-op if we do not
-if [ ! $(type -t gettext) ]; then
+if ! type -p gettext >/dev/null; then
gettext() {
echo "$@"
}
@@ -1546,11 +1565,11 @@ ARGLIST=("$@")
# Parse Command Line Options.
OPT_SHORT="AcCdefFghiLmop:rRsV"
OPT_LONG="allsource,asroot,ignorearch,clean,cleancache,nodeps"
-OPT_LONG="$OPT_LONG,noextract,force,forcever:,geninteg,help,holdver"
-OPT_LONG="$OPT_LONG,install,log,nocolor,nobuild,pkg:,rmdeps,repackage,skipinteg"
-OPT_LONG="$OPT_LONG,source,syncdeps,version,config:"
+OPT_LONG+=",noextract,force,forcever:,geninteg,help,holdver"
+OPT_LONG+=",install,log,nocolor,nobuild,pkg:,rmdeps,repackage,skipinteg"
+OPT_LONG+=",source,syncdeps,version,config:"
# Pacman Options
-OPT_LONG="$OPT_LONG,noconfirm,noprogressbar"
+OPT_LONG+=",noconfirm,noprogressbar"
OPT_TEMP="$(parse_options $OPT_SHORT $OPT_LONG "$@" || echo 'PARSE_OPTIONS FAILED')"
if [[ $OPT_TEMP = *'PARSE_OPTIONS FAILED'* ]]; then
# This is a small hack to stop the script bailing with 'set -e'
@@ -1562,8 +1581,8 @@ unset OPT_SHORT OPT_LONG OPT_TEMP
while true; do
case "$1" in
# Pacman Options
- --noconfirm) PACMAN_OPTS="$PACMAN_OPTS --noconfirm" ;;
- --noprogressbar) PACMAN_OPTS="$PACMAN_OPTS --noprogressbar" ;;
+ --noconfirm) PACMAN_OPTS+=" --noconfirm" ;;
+ --noprogressbar) PACMAN_OPTS+=" --noprogressbar" ;;
# Makepkg Options
--allsource) SOURCEONLY=2 ;;
@@ -1709,7 +1728,7 @@ if (( ! INFAKEROOT )); then
plain "$(gettext "Please rerun makepkg without the --asroot flag.")"
exit 1 # $E_USER_ABORT
elif [[ $(check_buildenv fakeroot) = "y" ]] && (( EUID > 0 )); then
- if [ ! $(type -p fakeroot) ]; then
+ if ! type -p fakeroot >/dev/null; then
error "$(gettext "Fakeroot must be installed if using the 'fakeroot' option")"
plain "$(gettext "in the BUILDENV array in %s.")" "$MAKEPKG_CONF"
exit 1
@@ -1729,7 +1748,7 @@ fi
# check for sudo if we will need it during makepkg execution
if (( ! ( ASROOT || INFAKEROOT ) && ( DEP_BIN || RMDEPS || INSTALL ) )); then
- if [ ! "$(type -p sudo)" ]; then
+ if ! type -p sudo >/dev/null; then
warning "$(gettext "Sudo can not be found. Will use su to acquire root privileges.")"
fi
fi
@@ -1785,14 +1804,12 @@ if (( ${#pkgname[@]} > 1 )); then
fi
# test for available PKGBUILD functions
-# The exclamation mark is required here to avoid triggering the ERR trap when
-# a tested function does not exist.
-if [[ $(! type -t build) = "function" ]]; then
+if declare -f build >/dev/null; then
BUILDFUNC=1
fi
-if [ "$(type -t package)" = "function" ]; then
+if declare -f package >/dev/null; then
PKGFUNC=1
-elif [ $SPLITPKG -eq 0 -a "$(type -t package_${pkgname})" = "function" ]; then
+elif [[ $SPLITPKG -eq 0 ]] && declare -f package_${pkgname} >/dev/null; then
SPLITPKG=1
fi
@@ -1865,17 +1882,7 @@ if (( INFAKEROOT )); then
fi
create_package
else
- for pkg in ${pkgname[@]}; do
- pkgdir="$pkgdir/$pkg"
- mkdir -p "$pkgdir"
- chmod a-s "$pkgdir"
- backup_package_variables
- run_package $pkg
- tidy_install
- create_package $pkg
- restore_package_variables
- pkgdir="${pkgdir%/*}"
- done
+ run_split_packaging
fi
msg "$(gettext "Leaving fakeroot environment.")"
@@ -1901,20 +1908,20 @@ if (( NODEPS || ( (NOBUILD || REPKG) && !DEP_BIN ) )); then
if (( NODEPS || ( REPKG && PKGFUNC ) )); then
warning "$(gettext "Skipping dependency checks.")"
fi
-elif [ $(type -p "${PACMAN%% *}") ]; then
+elif type -p "${PACMAN%% *}" >/dev/null; then
if (( RMDEPS )); then
- original_pkglist=($(run_pacman -Qq | sort)) # required by remove_dep
+ original_pkglist=($(run_pacman -Qq)) # required by remove_dep
fi
deperr=0
- msg "$(gettext "Checking Runtime Dependencies...")"
+ msg "$(gettext "Checking runtime dependencies...")"
resolve_deps ${depends[@]} || deperr=1
- msg "$(gettext "Checking Buildtime Dependencies...")"
+ msg "$(gettext "Checking buildtime dependencies...")"
resolve_deps ${makedepends[@]} || deperr=1
if (( RMDEPS )); then
- current_pkglist=($(run_pacman -Qq | sort)) # required by remove_deps
+ current_pkglist=($(run_pacman -Qq)) # required by remove_deps
fi
if (( deperr )); then
@@ -1993,17 +2000,7 @@ else
fi
create_package
else
- for pkg in ${pkgname[@]}; do
- pkgdir="$pkgdir/$pkg"
- mkdir -p "$pkgdir"
- chmod a-s "$pkgdir"
- backup_package_variables
- run_package $pkg
- tidy_install
- create_package $pkg
- restore_package_variables
- pkgdir="${pkgdir%/*}"
- done
+ run_split_packaging
fi
else
if (( ! REPKG && ( PKGFUNC || SPLITPKG ) )); then
diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index f5bf17d1..23804d7c 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -262,7 +262,7 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
case PM_TRANS_CONV_CONFLICT_PKG:
/* data parameters: target package, local package, conflict (strings) */
/* print conflict only if it contains new information */
- if(!strcmp(data1, data3) || !strcmp(data2, data3)) {
+ if(strcmp(data1, data3) == 0 || strcmp(data2, data3) == 0) {
*response = noyes(_(":: %s and %s are in conflict. Remove %s?"),
(char *)data1,
(char *)data2,
diff --git a/src/pacman/package.c b/src/pacman/package.c
index 413754c7..ac84a0c7 100644
--- a/src/pacman/package.c
+++ b/src/pacman/package.c
@@ -189,7 +189,7 @@ void dump_pkg_backups(pmpkg_t *pkg)
}
/* if checksums don't match, file has been modified */
- if (strcmp(md5sum, ptr)) {
+ if (strcmp(md5sum, ptr) != 0) {
printf(_("MODIFIED\t%s\n"), path);
} else {
printf(_("Not Modified\t%s\n"), path);
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 78407d67..049bc40b 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -676,6 +676,7 @@ int download_with_xfercommand(const char *url, const char *localpath,
struct stat st;
char *parsedcmd,*tempcmd;
char cwd[PATH_MAX];
+ int restore_cwd = 0;
char *destfile, *tempfile, *filename;
if(!config->xfercommand) {
@@ -708,8 +709,14 @@ int download_with_xfercommand(const char *url, const char *localpath,
parsedcmd = strreplace(tempcmd, "%u", url);
free(tempcmd);
+ /* save the cwd so we can restore it later */
+ if(getcwd(cwd, PATH_MAX) == NULL) {
+ pm_printf(PM_LOG_ERROR, _("could not get current working directory\n"));
+ } else {
+ restore_cwd = 1;
+ }
+
/* cwd to the download directory */
- getcwd(cwd, PATH_MAX);
if(chdir(localpath)) {
pm_printf(PM_LOG_WARNING, _("could not chdir to download directory %s\n"), localpath);
ret = -1;
@@ -736,7 +743,11 @@ int download_with_xfercommand(const char *url, const char *localpath,
}
cleanup:
- chdir(cwd);
+ /* restore the old cwd if we have it */
+ if(restore_cwd && chdir(cwd) != 0) {
+ pm_printf(PM_LOG_ERROR, _("could not change directory to %s (%s)\n"), cwd, strerror(errno));
+ }
+
if(ret == -1) {
/* hack to let an user the time to cancel a download */
sleep(2);
@@ -989,7 +1000,7 @@ static int _parseconfig(const char *file, const char *givensection,
file, linenum, value);
break;
default:
- for(int gindex = 0; gindex < globbuf.gl_pathc; gindex++) {
+ for(size_t gindex = 0; gindex < globbuf.gl_pathc; gindex++) {
pm_printf(PM_LOG_DEBUG, "config file %s, line %d: including %s\n",
file, linenum, globbuf.gl_pathv[gindex]);
_parseconfig(globbuf.gl_pathv[gindex], section, db);
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index b2994389..b9497d65 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -60,11 +60,11 @@ static int sync_cleandb(const char *dbpath, int keep_used) {
int found = 0;
const char *dname = ent->d_name;
- if(!strcmp(dname, ".") || !strcmp(dname, "..")) {
+ if(strcmp(dname, ".") == 0 || strcmp(dname, "..") == 0) {
continue;
}
/* skip the local and sync directories */
- if(!strcmp(dname, "sync") || !strcmp(dname, "local")) {
+ if(strcmp(dname, "sync") == 0 || strcmp(dname, "local") == 0) {
continue;
}
@@ -178,7 +178,7 @@ static int sync_cleancache(int level)
pmpkg_t *localpkg = NULL, *pkg = NULL;
alpm_list_t *j;
- if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")) {
+ if(strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
continue;
}
/* build the full filepath */
@@ -666,7 +666,7 @@ static int sync_trans(alpm_list_t *targets)
const char *package2 = alpm_conflict_get_package2(conflict);
const char *reason = alpm_conflict_get_reason(conflict);
/* only print reason if it contains new information */
- if(!strcmp(package1, reason) || !strcmp(package2, reason)) {
+ if(strcmp(package1, reason) == 0 || strcmp(package2, reason) == 0) {
printf(_(":: %s and %s are in conflict\n"), package1, package2);
} else {
printf(_(":: %s and %s are in conflict (%s)\n"), package1, package2, reason);
diff --git a/src/pacman/upgrade.c b/src/pacman/upgrade.c
index 1442eb56..c9c8301f 100644
--- a/src/pacman/upgrade.c
+++ b/src/pacman/upgrade.c
@@ -112,7 +112,7 @@ int pacman_upgrade(alpm_list_t *targets)
const char *package2 = alpm_conflict_get_package2(conflict);
const char *reason = alpm_conflict_get_reason(conflict);
/* only print reason if it contains new information */
- if(!strcmp(package1, reason) || !strcmp(package2, reason)) {
+ if(strcmp(package1, reason) == 0 || strcmp(package2, reason) == 0) {
printf(_(":: %s and %s are in conflict\n"), package1, package2);
} else {
printf(_(":: %s and %s are in conflict (%s)\n"), package1, package2, reason);
diff --git a/src/pacman/util.c b/src/pacman/util.c
index 0cae6d7c..de1b1626 100644
--- a/src/pacman/util.c
+++ b/src/pacman/util.c
@@ -142,7 +142,7 @@ int rmrf(const char *path)
if(dp->d_ino) {
char name[PATH_MAX];
sprintf(name, "%s/%s", path, dp->d_name);
- if(strcmp(dp->d_name, "..") && strcmp(dp->d_name, ".")) {
+ if(strcmp(dp->d_name, "..") != 0 && strcmp(dp->d_name, ".") != 0) {
errflag += rmrf(name);
}
}
@@ -718,9 +718,9 @@ static int question(short preset, char *fmt, va_list args)
return(preset);
}
- if(!strcasecmp(response, _("Y")) || !strcasecmp(response, _("YES"))) {
+ if(strcasecmp(response, _("Y")) == 0 || strcasecmp(response, _("YES")) == 0) {
return(1);
- } else if (!strcasecmp(response, _("N")) || !strcasecmp(response, _("NO"))) {
+ } else if (strcasecmp(response, _("N")) == 0 || strcasecmp(response, _("NO")) == 0) {
return(0);
}
}
diff --git a/src/util/testdb.c b/src/util/testdb.c
index 6d351ebd..45a2626d 100644
--- a/src/util/testdb.c
+++ b/src/util/testdb.c
@@ -69,7 +69,7 @@ static int db_test(char *dbpath, int local)
}
while ((ent = readdir(dir)) != NULL) {
- if(!strcmp(ent->d_name, ".") || !strcmp(ent->d_name, "..")
+ if(strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0
|| ent->d_name[0] == '.') {
continue;
}