1
0
forked from mirrors/pacman

Compare commits

..

26 Commits

Author SHA1 Message Date
Allan McRae
c2d4568d35 Release v6.0.2
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-03 12:52:04 +10:00
Allan McRae
8c61170ca4 Remove move translations with mismatching arguments
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-03 12:49:34 +10:00
Allan McRae
69eae86445 Update NEWS for pacman-6.0.2 release
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-10-02 11:54:34 +10:00
Allan McRae
5c10680f6f libmakepkg: fix compatibility with bash-5.2 globskipdots
Bash 5.2 has a new globskipdots option, which is enabled by default. The
check_dotfiles lint fails with globskipdots due to the assumption that
at least the "." and ".." paths will match. Disabling globskipdots would
be the usual solution, but that fails on bash<5.2.  Instead, enable
nullglob for this check.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit a6b06a5b17)
2022-10-02 11:45:43 +10:00
Allan McRae
1daabff0fb Gitlab CI: Install glibc-debug valgrind test
Currently our gitlab CI is failing due to valgrind breakage. With
Arch stripping glibc, valgrind now requires debuginfod to be active.
However the gitlab CI system combined without our testsuite does not
retrieve these symbols, even when the appropriate environmental
variable is set.

Work around this by installing the glibc-debug package directly
using a slight kludge...  All blame for this approach is assigned
to foutrelis!

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit d1e95c4e54)
2022-10-02 11:26:26 +10:00
Kristian Klausen
958475a7cf pacman-key: Don't check gpg's trustdb after each key revocation
The trustdb is marked as dirty when a key is revoked[1] and GPG will
recheck it the next time. Checking the trustdb can take 300-500ms which
with 52 revoked keys (and counting) adds up.

This is very noticeable when initializing and populating pacman's
keyring like archiso is doing[2]. It is also unnecessary as the trustdb
is always checked as the last step when populating the keyring.

[1] https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=g10/keyedit.c;h=1cb62de8a87a823e06b2ed74efdc9e7a4cd99e2b;hb=refs/heads/STABLE-BRANCH-2-2#l6509
[2] https://gitlab.archlinux.org/archlinux/archiso/-/issues/191

(cherry picked from commit 673ce1ab10)
2022-10-02 11:26:04 +10:00
Allan McRae
4b21c60e50 Correctly handle failure in getting build or install dates
alpm_pkg_get_builddate() and alpm_pkg_get_installdate() both return -1 on
error. Correctly handle the error condition in pacman.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 7bcc2d9b23)
2022-10-02 11:25:22 +10:00
Morten Linderud
d55924dbd7 debugflags: Ensure we have unique source paths
In some cases packages are built outside of a directory which contains
pkgname-pkgver, this results in source listing in debug packages having
a conflicting path like `/usr/src/debug/build/` which is not ideal.

This patch ensures we always include the pkgbase to ensure the paths are
unique.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 776b7c1e75)
2022-10-02 11:24:47 +10:00
Allan McRae
ce40629b7d libmakepkg: Do not "strip" files when the format is not recognised
We use a multi step process during stripping to ensure permissions do
not get changed.  However, if the initial objcopy fails, the subsequent cat
results in a blank file.  Abandon early if objcopy fails.

Fixes FS#74486

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 18152a211a)
2022-10-02 11:24:15 +10:00
Jonas Witschel
a1837fa585 makepkg: use bsdtar --no-read-sparse for archive creation if available
bsdtar uses the "pax" TAR archive format by default, which has support for
storing sparse file information in the archive. Unfortunately this is a source
of unreproducibility because the sparse encoding is taken from the file system
and different file systems handle sparse files differently: some file systems
have no support for sparsely encoded files at all, and even file systems with
sparse file support can report different file information for identical files
due to differing implementations.

As a real world example where this happens, consider the Arch Linux package
"brotli-testdata 1.0.9-7", which contains a sparsely encoded all-zeros file
"usr/share/brotli/testdata/zeros". Building this package on a btrfs file system
yields a different package than building it on tmpfs or ext4 solely due to
different sparse file information that gets recorded in the package tarball.

To improve the reproducibility of archives containing sparsely encoded files,
libarchive version 3.6.0 introduces a new --no-read-sparse option. This skips
reading sparse file information from disk entirely and therefore stores files
"expanded" in the archive, which is the only way to make them reliably
reproducible across file systems.

makepkg will use this option if libarchive is recent enough to support it,
which is detected at build time.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit f5f9e0f4ea)
2022-10-02 11:23:51 +10:00
Allan McRae
3bad984871 Avoid information leakage with badly formed download header
Parsing of Content-Disposition relies on well formed headers.
A malformed header such as:

Content-Disposition="";

will result in a strnduppayload->content_disp_name, -1, ptr),
which will copy memory until it hits a \0.

Prevent this by only copying the value if it exists.

Fixes FS#73704.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 40583ebe89)
2022-10-02 11:23:51 +10:00
Allan McRae
b187daefdf Do not use WKD to import keys for package installs from a file
In order to use WKD in pacman -U/--upgrade operations, we need to
get the packager information from the .PKGINFO within the package.
That has obvious security implications. e.g. something like this
could convince a user to download a different key to what they
expect:

packager = foo bar <>^[[2K^[[0G:: Import PGP key DEADBEEF, "foo <bar>

While downloading an untrusted key has little impact due to the
web-of-trust model used by pacman, this could be bad in combination
with an exploit that allowed trust of keys in the keyring to be
altered.

To be safe, do not use WKD when installing using -U.

Fixes FS#73703.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 632eb9739d)
2022-10-02 11:23:51 +10:00
Allan McRae
2c83cd08a4 Fix segfault when failing to import keys
Avoid a segfault when a search of the keyserver returns that the
key is found but returns no primary IDs.  We are then likely going
to fail the import, but attempt anyway because no-one know what
a keyserver will do!

Fixes FS#73534.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 6b37d99431)
2022-10-02 11:23:51 +10:00
Allan McRae
c974d6d245 Ensure WKD key lookup returns the correct key
Looking up a key using WKD just ensures you have a key with the
same email address, it does not ensure that a key with the correct
fingerprint has been downloaded.

Check a key with the relevant fingerprint is available after a
WKD import.

(cherry picked from commit e1246baddd)
2022-10-02 11:23:51 +10:00
Evangelos Foutras
51354b7da9 Make link time optimization flags configurable
We want to use -flto=auto in Arch Linux to speed up building, but we
can't hardcode it in buildenv/lto.sh because other downstreams might
have clang < 13.0.0 which did not recognize -flto=auto as equivalent
to -flto=full.

Introducing an LTOFLAGS variable to makepkg.conf seems the way to go.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit e1ce2351f5)
2022-10-02 11:20:32 +10:00
Morten Linderud
c4a21f333a strip: Use debugedit instead of AWK to parse source files
This moves us from the fairly ugly AWK parsing line to debugedit which
originally comes out of the rpm project.

The original code has issues parsing anything that was not straight
C/C++ and languages like Rust or Go would return invalid source code
files. debugedit handles all these cases better.

Fixes FS#66755
Fixes FS#66888
Fixes FS#65677

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit ae2f506ddf)
2022-10-02 11:19:25 +10:00
Allan McRae
23e337ba5a libmakepkg: add extra buildflags only when buildflags is not disabled
This means options=('!buildflags') will disable the addition of CFLAG
etc for LTO and debug building.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 42fe4864a0)
2022-10-02 11:19:09 +10:00
Morten Linderud
6c880acb5c makepkg: Use pkgbase in pkgdesc for debug packages
When trying to identify debug packages among other packages we
discovered that it's pkgname used in pkgdesc. Since pkgname can
sometimes be an array when building debug packages for a split package,
this could potentially include a pkgname that might not make sense
depending on the order of the array.

This patch simply uses pkgbase as it seems more correct.

Signed-off-by: Morten Linderud <morten@linderud.pw>
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 2fe1ba5d81)
2022-10-02 11:18:33 +10:00
Xiretza
95ef989978 makepkg: use -ffile-prefix-map instead of -fdebug-prefix-map
>From gcc(1):

-ffile-prefix-map=old=new
	[...] Specifying this option is equivalent to specifying all the
	individual -f*-prefix-map options. This can be used to make reproducible
	builds that are location independent.

Specifically, this additionally enables -fmacro-prefix-map=, which causes
prefix mapping to be applied to expansions of __FILE__ and similar macros.

Without this option, if source files are compiled by passing the
absolute file path to the compiler (as done by e.g. cmake), any
expansions of __FILE__ (e.g. from uses of assert()) will contain
$srcdir.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit e37f7d8b6b)
2022-10-02 11:16:56 +10:00
morganamilo
ff91a9d449 alpm: return -1 for error in find_dl_candidates
This is the error value generally used and the calling function
explicitly checks for -1, later causing the error to be missed
and the transaction to continue.

> pacman -S xterm
warning: xterm-369-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Package (1)  Old Version  New Version  Net Change  Download Size

extra/xterm  369-1        369-1          0.00 MiB       0.42 MiB

Total Download Size:   0.42 MiB
Total Installed Size:  1.05 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n]
error: no servers configured for repository: extra
(1/1) checking keys in keyring                                                                 [--------------------------------------------------------] 100%
(1/1) checking package integrity                                                               [--------------------------------------------------------] 100%
error: failed to commit transaction (wrong or NULL argument passed)
Errors occurred, no packages were upgraded.

(cherry picked from commit 58c81fa213)
2022-10-02 11:16:22 +10:00
Allan McRae
0352053e30 LTO: Add -flto to LDFLAGS for clang
GCC automatically detects when it is linking LTO objects, but clang does
not.  Add -flto to LDFLAGS to make this work for clang too.

Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit 26ee6ff6ad)
2022-10-02 11:15:37 +10:00
morganamilo
53289acdc9 alpm: fix wrong access() being used
When removing files we check _alpm_access() to see if we can write
(delete) the file. If not, we check if the file exists because if the
file does not exist then we don't actually need to remove it so there's
no issue.

However the second call uses acess() instead of _alpm_access() which
does not the rootdir into account.

(cherry picked from commit 5287cc7251)
2022-10-02 11:14:59 +10:00
Carlo Teubner
e56c7a3f41 "pacman -Q --changelog": fix writing uninit'd mem
Previously, when printing a package changelog to stdout, we would write
chunks of data that were not necessarily nul-terminated to stdout using
a function (fputs) which requires the input string to be nul-terminated.

On my system, this would result in occasional garbage characters showing
up in the "pacman -Qc" output.

Fix this by never nul-terminating the chunk, and using the fwrite()
function which takes an explicit input size and does not require a
nul-terminated string.

Signed-off-by: Carlo Teubner <carlo@cteubner.net>
(cherry picked from commit 806ccd90ed)
2022-10-02 11:14:31 +10:00
Andrew Gregory
ec0bf17ced remove YouCompleteMe config
Added, seemingly by accident, with meson in
51db84750e

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
(cherry picked from commit 529e208f39)
2022-10-02 11:14:00 +10:00
Allan McRae
77420fe500 Final update of 6.0.x translations from Transifex
Signed-off-by: Allan McRae <allan@archlinux.org>
2022-09-26 21:09:49 +10:00
Allan McRae
6b1a836544 Update Transifex config
Signed-off-by: Allan McRae <allan@archlinux.org>
(cherry picked from commit e10751a1e0)
2022-09-26 20:54:21 +10:00
372 changed files with 3528 additions and 4807 deletions

View File

@@ -16,22 +16,18 @@ default:
python
fakeroot fakechroot
meson
artifacts:
when: always
paths:
- build/meson-logs/meson-log.txt
arch:
extends: .arch-test
script:
- meson setup build
- meson build
- ninja -C build
- fakechroot meson test -C build
arch-debug:
extends: .arch-test
script:
- meson setup --buildtype=debug --werror build
- meson --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
@@ -39,51 +35,51 @@ arch-docs:
extends: .arch-test
script:
- pacman -Syu --needed --noconfirm asciidoc
- meson setup -Ddoc=enabled build
- meson -Ddoc=enabled build
- ninja -C build
arch-clang:
extends: .arch-test
script:
- pacman -Syu --needed --noconfirm clang
- CC=clang meson setup build
- CC=clang meson build
- ninja -C build
- fakechroot meson test -C build
#arch-valgrind:
# extends: .arch-test
# script:
# - pacman -Syu --needed --noconfirm valgrind
# - pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
# - meson setup build
# - ninja -C build
# - PACTEST_VALGRIND=1 fakechroot meson test -C build
arch-valgrind:
extends: .arch-test
script:
- pacman -Syu --needed --noconfirm valgrind
- pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
- meson build
- ninja -C build
- PACTEST_VALGRIND=1 fakechroot meson test -C build
arch-nettle:
extends: .arch-test
script:
- meson setup -Dcrypto=nettle --buildtype=debug build
- meson -Dcrypto=nettle --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-gpg:
extends: .arch-test
script:
- meson setup -Dgpgme=disabled --buildtype=debug build
- meson -Dgpgme=disabled --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-curl:
extends: .arch-test
script:
- meson setup -Dcurl=disabled --buildtype=debug build
- meson -Dcurl=disabled --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
arch-no-nls:
extends: .arch-test
script:
- meson setup -Di18n=false --buildtype=debug build
- meson -Di18n=false --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
@@ -98,7 +94,7 @@ debian:
gettext python3 python3-setuptools dash gawk ca-certificates
fakeroot fakechroot
script:
- meson setup --buildtype=debug build
- meson --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build
@@ -114,6 +110,6 @@ fedora:
fakeroot fakechroot
perl-Module-Load-Conditional
script:
- meson setup --buildtype=debug build
- meson --buildtype=debug build
- ninja -C build
- fakechroot meson test -C build

14
NEWS
View File

@@ -1,5 +1,19 @@
VERSION DESCRIPTION
-----------------------------------------------------------------------------
6.0.2 - Fix potential content injection during PGP import (FS#73703)
- Fix potential segfault during PGP key import (FS#73534)
- Fix potential information leak while parsing badly formed
download header (FS#73704)
- Translation fixes to avoid segfault (FS#75680)
- makepkg:
- Fix compatability with bash 5.2 (FS#76035)
- Fix behaviour while attempting stripping of readonly files
(FS#74486)
- Use debugedit instead of awk for identifying source files
for debug packages
- Use -ffile-prefix-map instead of -fdebug-prefix-map to
capture all source files in debug packages
- Add -flto to LDFLAGS for clang
6.0.1 - Prevent download error pages ending up in package files
(FS#71083)
- Give -U downloads a random .part file name if needed

View File

@@ -14,7 +14,7 @@ The following checklist should be used for making a pacman release.
- Update pacman website
Transifex updates are handled using the transifex client. The basic process is:
- Pull updates from transifex ("tx pull -f --minimum-perc 75")
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
- Update po files ("./build-aux/update-po")
- Fix all translation errors found
- Add any new locales to the relevant LINGUAS file

View File

@@ -11,7 +11,6 @@ sed \
-e "s|@localstatedir[@]|@localstatedir@|g" \
-e "s|@libmakepkgdir[@]|@LIBMAKEPKGDIR@|g" \
-e "s|@pkgdatadir[@]|@PKGDATADIR@|g" \
-e "s|@keyringdir[@]|@KEYRINGDIR@|g" \
-e "s|@prefix[@]|@PREFIX@|g" \
-e "1s|#!/bin/bash|#!@BASH@|g" \
-e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \

View File

@@ -3,4 +3,4 @@
# This script serves as a trampoline for running scripts which depend on
# libmakepkg with the libmakepkg within the build tree.
MAKEPKG_LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"

View File

@@ -18,7 +18,7 @@ value.
Description
-----------
This is a description of the contents of version '2' of the
This is a description of the contents of version '1' of the
BUILDINFO file format.
*format*::
@@ -53,15 +53,6 @@ BUILDINFO file format.
*startdir*::
The directory from which makepkg was executed.
*buildtool*::
The name of the tool ecosystem used to set up the build environment. Used
for defining a spec for reproducible builds, e.g. the source of the
linkman:makepkg.conf[5] used.
*buildtoolver*::
The full version of the 'buildtool', for example:
"$pkgver-$pkgrel-$pkgarch".
*buildenv (array)*::
The build environment specified in makepkg.conf.

View File

@@ -1,4 +1,4 @@
# Doxyfile 1.9.3
# Doxyfile 1.8.20
#---------------------------------------------------------------------------
# Project related configuration options
@@ -12,6 +12,7 @@ OUTPUT_DIRECTORY = @OUTPUT_DIRECTORY@
CREATE_SUBDIRS = NO
ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
OUTPUT_TEXT_DIRECTION = None
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF = "The $name class" \
@@ -72,7 +73,6 @@ EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
RESOLVE_UNNAMED_PARAMS = YES
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
@@ -81,7 +81,6 @@ INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_HEADERFILE = YES
SHOW_INCLUDE_FILES = YES
SHOW_GROUPED_MEMB_INC = NO
FORCE_LOCAL_INCLUDES = NO
@@ -111,7 +110,6 @@ QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_IF_INCOMPLETE_DOC = YES
WARN_NO_PARAMDOC = NO
WARN_AS_ERROR = NO
WARN_FORMAT = "$file:$line: $text"
@@ -154,6 +152,7 @@ VERBATIM_HEADERS = YES
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
@@ -169,12 +168,12 @@ HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_DYNAMIC_MENUS = YES
HTML_DYNAMIC_SECTIONS = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_FEEDURL =
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
@@ -197,16 +196,14 @@ GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
GENERATE_TREEVIEW = NO
FULL_SIDEBAR = NO
ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
OBFUSCATE_EMAILS = YES
HTML_FORMULA_FORMAT = png
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
FORMULA_MACROFILE =
USE_MATHJAX = NO
MATHJAX_VERSION = MathJax_2
MATHJAX_FORMAT = HTML-CSS
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
MATHJAX_EXTENSIONS =
@@ -237,7 +234,9 @@ PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
LATEX_TIMESTAMP = NO
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
@@ -248,6 +247,7 @@ COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
@@ -268,9 +268,7 @@ XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
GENERATE_DOCBOOK = NO
DOCBOOK_OUTPUT = docbook
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
DOCBOOK_PROGRAMLISTING = NO
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
@@ -306,18 +304,19 @@ EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
DIA_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
UML_LIMIT_NUM_FIELDS = 10
DOT_UML_DETAILS = NO
DOT_WRAP_THRESHOLD = 17
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
@@ -325,7 +324,6 @@ CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DIR_GRAPH_MAX_DEPTH = 1
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
@@ -337,6 +335,7 @@ PLANTUML_CFG_FILE =
PLANTUML_INCLUDE_PATH =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 3
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

View File

@@ -12,8 +12,8 @@ depends=('glibc')
makedepends=('ed')
optdepends=('ed: for "patch -e" functionality')
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
'SKIP')
md5sums=('e9ae5393426d3ad783a300a338c09b72'
'SKIP')
build() {
cd "$srcdir/$pkgname-$pkgver"

View File

@@ -3,7 +3,7 @@ PKGBUILD(5)
Name
----
PKGBUILD - Package build description file
PKGBUILD - Arch Linux package build description file
Synopsis
@@ -84,7 +84,14 @@ systems (see below).
*license (array)*::
This field specifies the license(s) that apply to the package.
If multiple licenses are applicable, list all of them:
Commonly used licenses can be found in '/usr/share/licenses/common'. If you
see the package's license there, simply reference it in the license
field (e.g., `license=('GPL')`). If the package provides a license not
available in '/usr/share/licenses/common', then you should include it
in the package itself and set `license=('custom')` or
`license=('custom:LicenseName')`. The license should be placed in
'$pkgdir/usr/share/licenses/$pkgname/' when building the package. If
multiple licenses are applicable, list all of them:
`license=('GPL' 'FDL')`.
*install*::
@@ -180,6 +187,11 @@ contain whitespace characters.
than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
(greater than), or `<` (less than).
+
If the dependency name appears to be a library (ends with .so), makepkg will
try to find a binary that depends on the library in the built package and
append the version needed by the binary. Appending the version yourself
disables automatic detection.
+
Additional architecture-specific depends can be added by appending an
underscore and the architecture name e.g., 'depends_x86_64=()'.
@@ -233,6 +245,10 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
other packages. Provisions involving the `>` and `<` operators are invalid as
only specific versions of a package may be provided.
+
If the provision name appears to be a library (ends with .so), makepkg will
try to find the library in the built package and append the correct
version. Appending the version yourself disables automatic detection.
+
Additional architecture-specific provides can be added by appending an
underscore and the architecture name e.g., 'provides_x86_64=()'.
@@ -336,13 +352,6 @@ function.
the optional functions listed below. The packaging stage is run using
fakeroot to ensure correct file permissions in the resulting package.
All other functions will be run as the user calling makepkg.
This function is run inside `$srcdir`.
*verify() Function*::
An optional `verify()` function can be specified to implement arbitrary
source authentication. The function should return a non-zero exit code when
verification fails. This function is run before sources are extracted.
This function is run inside `$startdir`.
*prepare() Function*::
An optional `prepare()` function can be specified in which operations to
@@ -350,19 +359,16 @@ function.
function is run after the source extraction and before the `build()`
function. The `prepare()` function is skipped when source extraction
is skipped.
This function is run inside `$srcdir`.
*build() Function*::
The optional `build()` function is used to compile and/or adjust the source
files in preparation to be installed by the `package()` function.
This function is run inside `$srcdir`.
*check() Function*::
An optional `check()` function can be specified in which a package's
test-suite may be run. This function is run between the `build()` and
`package()` functions. Be sure any exotic commands used are covered by the
`checkdepends` array.
This function is run inside `$srcdir`.
All of the above variables such as `$pkgname` and `$pkgver` are available for
use in the packaging functions. In addition, makepkg defines the following
@@ -372,6 +378,7 @@ variables:
This contains the directory where makepkg extracts, or copies, all source
files.
+
All of the packaging functions defined above are run starting inside `$srcdir`
*pkgdir*::
This contains the directory where makepkg bundles the installed package.
@@ -473,9 +480,6 @@ Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial
version control systems. For other version control systems, manual cloning of
upstream repositories must be done in the `prepare()` function.
Some <<VCS,VCS Sources>> like Git support pinning the checkout by a checksum of
its content using deterministic export functionality like ``git archive''.
The source URL is divided into four components:
*directory*::
@@ -520,7 +524,8 @@ The source URL is divided into four components:
Example
-------
The following is an example PKGBUILD for the 'patch' package. For more
examples, look through the build files of your distribution's packages.
examples, look through the build files of your distribution's packages. For
those using Arch Linux, consult the Arch Build System (ABS) tree.
[source,sh]
-------------------------------

View File

@@ -18,6 +18,7 @@ Current maintainers:
* Allan McRae <allan@archlinux.org>
* Andrew Gregory <andrew.gregory.8@gmail.com>
* Eli Schwartz <eschwartz@archlinux.org>
* Morgan Adamiec <morganamilo@archlinux.org>
Past major contributors:
@@ -29,7 +30,6 @@ Past major contributors:
* Xavier Chantry <shiningxc@gmail.com>
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
* Dave Reisner <dreisner@archlinux.org>
* Eli Schwartz <eschwartz@archlinux.org>
For additional contributors, use `git shortlog -s` on the pacman.git
repository.

View File

@@ -77,6 +77,7 @@ Releases
[frame="topbot",grid="none",options="header,autowidth"]
!======
!Version !Date
!6.0.2 !2022-10-03
!6.0.1 !2021-09-04
!6.0.0 !2021-05-20
!6.0.0alpha1 !2020-12-04
@@ -240,7 +241,7 @@ link:translation-help.html[translation-help].
Bugs
----
If you find bugs (which is quite likely), please email them to the pacman-dev
mailing last at mailto:pacman-dev@lists.archlinux.org[] with specific information
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
such as your command-line, the nature of the bug, and even the package database
if it helps.
@@ -250,7 +251,7 @@ bugs under the Pacman project.
Copyright
---------
pacman is Copyright (C) 2006-2022 Pacman Development Team
<pacman-dev@lists.archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
pacman is Copyright (C) 2006-2021 Pacman Development Team
<pacman-dev@archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
<jvinet@zeroflux.org> and is licensed through the GNU General Public License,
version 2 or later.

View File

@@ -85,7 +85,7 @@ Example PKGBUILD
license=('PerlArtistic' 'GPL')
depends=('perl')
source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
md5sums=('f014aec54f0a1e2e880d317180fce502')
_distname="Config-Simple"
# template start; name=perl-module; version=1.0;

View File

@@ -75,7 +75,7 @@ Options
For each source file in the source array of PKGBUILD, download the file
if required and generate integrity checks. The integrity checks generated
are determined by the checks present in the PKGBUILD, falling back to the
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent.
value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent
This output can be redirected into your PKGBUILD for source validation
using "`makepkg -g >> PKGBUILD`".
@@ -146,9 +146,6 @@ Options
*-C, \--cleanbuild*::
Remove the $srcdir before building the package.
*-D* <dir>, *\--dir* <dir> ::
Change to directory <dir> before reading the PKGBUILD or doing anything else.
*\--allsource*::
Do not actually build the package, but build a source-only tarball that
includes all sources, including those that are normally downloaded via
@@ -171,9 +168,6 @@ Options
*\--noprepare*::
Do not run the prepare() function in the PKGBUILD.
*\--noverify*::
Do not run the verify() function in the PKGBUILD.
*\--sign*::
Sign the resulting package with gpg, overriding the setting in
linkman:makepkg.conf[5].
@@ -233,9 +227,6 @@ before building.
Environment Variables
---------------------
**MAKEPKG_LIBRARY**="/path/to/directory"::
Use an alternative libmakepkg path instead of the {libmakepkgdir} default.
**PACMAN**::
The command that will be used to check for missing dependencies and to
install and remove packages. Pacman's '-Qq', '-Rns', '-S', '-T', and '-U'
@@ -296,10 +287,6 @@ Environment Variables
**BUILDTOOLVER=**"<version>"::
The version of the '$BUILDTOOL' used.
**GITFLAGS**::
The options to pass when checking out git sources, replacing the default
"--mirror".
Configuration
-------------
See linkman:makepkg.conf[5] for more details on configuring makepkg using the

View File

@@ -199,11 +199,6 @@ Options
flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or
``-flto'' if LTOFLAGS is empty).
*autodeps*;;
Enable the automatic addition of libraries to the depends and
provides arrays. Search library directories are controlled by
the LIB_DIRS variable defined below.
**INTEGRITY_CHECK=(**check1 ...**)**::
File integrity checks to use. Multiple checks may be specified; this
affects both generation and checking. The current valid options are:
@@ -234,12 +229,6 @@ Options
that are located in opt/, you may need to add the directory to this
array. *NOTE:* Do not add the leading slash to the directory name.
**LIB_DIRS=(**lib:usr/lib ...**)**::
If `autodeps` is specified in the `OPTIONS` array, this variable will
instruct makepkg where to look to find libraries to add to the `provides`
array. The format is "prefix:path", where provides will be added for
libraries found in "path" with the specified prefix added.
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
If `purge` is specified in the `OPTIONS` array, this variable will
instruct makepkg which files to remove from the package. This is
@@ -291,10 +280,9 @@ Options
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
Sets the compression used when making compiled or source packages.
Valid suffixes are `.pkg` or `.src` (for PKGEXT and SRCEXT resepectively)
followed by one of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lzo`,
`.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or simply `.tar` to
disable compression entirely.
Valid suffixes are `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`,
`.tar.lzo`, `.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or
simply `.tar` to disable compression entirely.
**PACMAN_AUTH=()**::
Specify a command prefix for running pacman as root. If unset, makepkg will

View File

@@ -5,9 +5,7 @@ manpages = [
{ 'name': 'makepkg-template.1' },
{ 'name': 'repo-add.8' },
{ 'name': 'vercmp.8' },
{ 'name': 'testpkg.8' },
{ 'name': 'pacman-key.8' },
{ 'name': 'pacman-db-upgrade.8' },
{ 'name': 'PKGBUILD.5', 'extra_depends' : [ 'PKGBUILD-example.txt' ] },
{ 'name': 'makepkg.conf.5' },
{ 'name': 'pacman.conf.5' },
@@ -30,12 +28,10 @@ asciidoc_opts = [
'-a', 'srcext=@0@'.format(get_option('src-ext')),
'-a', 'pkgext=@0@'.format(get_option('pkg-ext')),
'-a', 'pkgdatadir=@0@'.format(PKGDATADIR),
'-a', 'keyringdir=@0@'.format(KEYRINGDIR),
'-a', 'localstatedir=@0@'.format(LOCALSTATEDIR),
'-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
'-a', 'datarootdir=@0@'.format(DATAROOTDIR),
'-a', 'rootdir=@0@'.format(ROOTDIR),
'-a', 'libmakepkgdir=@0@'.format(LIBMAKEPKGDIR),
]
html_targets = []

View File

@@ -34,7 +34,7 @@ Options
*-R, \--rootdir* <path>::
Specify an alternate installation root (default is `/`).
*-r, \--repo* <repository>::
*-r, \--repo* <remote>::
Query options for a specific repository.
*-v, \--verbose*::

View File

@@ -1,36 +0,0 @@
pacman-db-upgrade(8)
====================
Name
----
pacman-db-upgrade - upgrade the local pacman database to a newer format
Synopsis
--------
'pacman-db-upgrade' [options]
Description
-----------
'pacman-db-upgrade' is a script that upgrades the local database used
by linkman:pacman[8] to a newer format.
Options
--------------
*-h, \--help*::
Show the built-in help message and exit.
*-V, \--version*::
Show version information and exit.
*-d, \--dbpath* <path>::
Set an alternate database location.
*-r, \--root* <path>::
Set an alternate installation root.
*\--config* <path>::
Set an alternate configuration file.
*\--nocolor*::
Remove color from output.
See Also
--------
linkman:pacman[8]
include::footer.asciidoc[]

View File

@@ -86,7 +86,7 @@ Operations
*\--populate*::
Reload the default keys from the (optionally provided) keyrings in
+{keyringdir}+. For more information, see
+{pkgdatadir}/keyrings+. For more information, see
<<PK,Providing a Keyring for Import>> below.
*-u, \--updatedb*::
@@ -129,7 +129,7 @@ A distribution or other repository provided may want to provide a set of
PGP keys used in the signing of its packages and repository databases that can
be readily imported into the pacman keyring. This is achieved by providing a
PGP keyring file `foo.gpg` that contains the keys for the foo keyring in the
directory +{keyringdir}+.
directory +{pkgdatadir}/keyrings+.
Optionally, the file `foo-trusted` can be provided containing a list of trusted
key IDs for that keyring. This is a file in a format compatible with 'gpg

View File

@@ -212,7 +212,7 @@ Transaction Options (apply to '-S', '-R' and '-U')
*\--assume-installed* <package=version>::
Add a virtual package "package" with version "version" to the transaction
to satisfy dependencies. This allows disabling the specific dependency checks
to satisfy dependencies. This allows to disable specific dependency checks
without affecting all dependency checks. To disable all dependency
checking, see the '\--nodeps' option.
@@ -235,15 +235,8 @@ Transaction Options (apply to '-S', '-R' and '-U')
*\--print-format* <format>::
Specify a printf-like format to control the output of the '\--print'
operation. The possible attributes are: "%a" for arch, "%b" for
builddate, "%d" for description, "%e" for pkgbase, "%f" for filename,
"%g" for base64 encoded PGP signature, "%h" for sha256sum, "%m" for
md5sum, "%n" for pkgname, "%p" for packager, "%v" for pkgver, "%l" for
location, "%r" for repository, "%s" for size, "%C" for checkdepends,
"%D" for depends, "%G" for groups, "%H" for conflicts, "%L" for
licenses, "%M" for makedepends, "%O" for optional depends, "%P" for
provides and "%R" for replaces.
Implies '\--print'.
operation. The possible attributes are: "%n" for pkgname, "%v" for pkgver,
"%l" for location, "%r" for repository, and "%s" for size. Implies '\--print'.
Upgrade Options (apply to '-S' and '-U')[[UO]]
@@ -456,11 +449,11 @@ Additional targets can also be specified manually, so that '-Su foo' will do a
system upgrade and install/upgrade the "foo" package in the same operation.
*-y, \--refresh*::
Download a fresh copy of the master package databases '(repo.db)' from the
server(s) defined in linkman:pacman.conf[5]. This should typically be used
each time you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y'
flags will force a refresh of all package databases, even if they appear to
be up-to-date.
Download a fresh copy of the master package database from the server(s)
defined in linkman:pacman.conf[5]. This should typically be used each time
you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
will force a refresh of all package databases, even if they appear to be
up-to-date.
Database Options (apply to '-D')[[QO]]
@@ -489,8 +482,8 @@ Database Options (apply to '-D')[[QO]]
File Options (apply to '-F')[[FO]]
----------------------------------
*-y, --refresh*::
Download fresh package file databases '(repo.files)' from the server.
Use twice to force a refresh even if databases are up to date.
Download fresh package databases from the server. Use twice to force a
refresh even if databases are up to date.
*-l, \--list*::
List the files owned by the queried package.

View File

@@ -121,7 +121,7 @@ Options
architecture 'any' can always be installed, as they are meant to be
architecture independent.
*XferCommand =* /path/to/command %u [%o]::
*XferCommand =* /path/to/command %u::
If set, an external program will be used to download all remote files.
All instances of `%u` will be replaced with the download URL. If present,
instances of `%o` will be replaced with the local filename, plus a
@@ -207,10 +207,6 @@ Options
positive integer. If this config option is not set then only one download
stream is used (i.e. downloads happen sequentially).
*DownloadUser =* username::
Specifies the user to switch to for downloading files. If this config
option is not set then the downloads are done as the user running pacman.
Repository Sections
-------------------
@@ -244,12 +240,6 @@ number.
general configuration options. Wildcards in the specified paths will get
expanded based on linkman:glob[7] rules.
*CacheServer =* url::
A full URL to a location where the packages, and signatures (if
available) for this repository can be found. Cache servers will be tried
before any non-cache servers, will not be removed from the server pool for
404 download errors, and will not be used for database files.
*Server =* url::
A full URL to a location where the database, packages, and signatures (if
available) for this repository can be found.

View File

@@ -70,8 +70,6 @@ repo-add Options
Remove old package files from the disk when updating their entry in the
database.
*\--include-sigs*::
Include package PGP signatures in the repository database (if available)
Example
-------

View File

@@ -1,20 +0,0 @@
testpkg(8)
==========
Name
----
testpkg - test a pacman package for validity
Synopsis
--------
'testpkg' <package file>
Description
-----------
'testpkg' is a script used to make sure that a pacman package is valid.
See Also
--------
linkman:pacman[8]
include::footer.asciidoc[]

View File

@@ -55,7 +55,7 @@ Pre-release Updates
~~~~~~~~~~~~~~~~~~~
A week or two before each release, the codebase will go into a string freeze
and an email will be sent to the mailto:pacman-dev@lists.archlinux.org[pacman-dev]
and an email will be sent to the mailto:pacman-dev@archlinux.org[pacman-dev]
mailing list asking for translations. This email will have a prefix of
*[translation]* for anyone looking to set up an email filter.
@@ -150,4 +150,4 @@ There are currently no efforts underway to include translated manual pages in
the pacman codebase. However, this is not to say translations are unwelcome. If
someone has experience with i18n man pages and how to best include them with our
source, please contact the pacman-dev mailing list at
mailto:pacman-dev@lists.archlinux.org[].
mailto:pacman-dev@archlinux.org[].

View File

@@ -1,11 +0,0 @@
#!/hint/bash
#
# @sysconfdir@/makepkg.conf.d/rust.conf
#
#########################################################################
# RUST LANGUAGE SUPPORT
#########################################################################
#
#RUSTFLAGS="-C opt-level=2"
#DEBUG_RUSTFLAGS="-C debuginfo=2"

View File

@@ -9,10 +9,10 @@
#
#-- The download utilities that makepkg should use to acquire sources
# Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
'rsync::/usr/bin/rsync --no-motd -z %u %o'
'scp::/usr/bin/scp -C %u %o')
@@ -23,7 +23,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
#-- The package required by makepkg to download VCS sources
# Format: 'protocol::package'
VCSCLIENTS=('bzr::breezy'
VCSCLIENTS=('bzr::bzr'
'fossil::fossil'
'git::git'
'hg::mercurial'
@@ -42,11 +42,13 @@ CHOST="@CHOST@"
#CXXFLAGS="-O2 -pipe"
#LDFLAGS=""
#LTOFLAGS="-flto"
#RUSTFLAGS="-C opt-level=2"
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"
#-- Debugging flags
#DEBUG_CFLAGS="-g"
#DEBUG_CXXFLAGS="-g"
#DEBUG_RUSTFLAGS="-C debuginfo=2"
#########################################################################
# BUILD ENVIRONMENT
@@ -75,8 +77,7 @@ BUILDENV=(!distcc color !ccache check !sign)
# These are default values for the options=() settings
#########################################################################
#
# Makepkg defaults:
# OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
# Makepkg defaults: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto)
# A negated option will do the opposite of the comments below.
#
#-- strip: Strip symbols from binaries/libraries
@@ -88,9 +89,8 @@ BUILDENV=(!distcc color !ccache check !sign)
#-- purge: Remove files specified by PURGE_TARGETS
#-- debug: Add debugging flags as specified in DEBUG_* variables
#-- lto: Add compile flags for building with link time optimization
#-- autodeps: Automatically add depends/provides
#
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto !autodeps)
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto)
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
INTEGRITY_CHECK=(ck)
@@ -108,8 +108,6 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"
#-- Prefix and directories for library autodeps
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
#########################################################################
# PACKAGE OUTPUT

View File

@@ -74,4 +74,4 @@ ParallelDownloads = 5
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/packages
#Server = file:///home/custompkgs

View File

@@ -1,7 +1,7 @@
/*
* add.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -262,7 +262,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
"filesystem: %o package: %o\n"), filename, lsbuf.st_mode & mask,
entrymode & mask);
alpm_logaction(handle, ALPM_CALLER_PREFIX,
"warning: directory permissions differ on %s, "
"warning: directory permissions differ on %s\n"
"filesystem: %o package: %o\n", filename, lsbuf.st_mode & mask,
entrymode & mask);
}
@@ -277,7 +277,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
"filesystem: %u:%u package: %u:%u\n"), filename,
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
alpm_logaction(handle, ALPM_CALLER_PREFIX,
"warning: directory ownership differs on %s, "
"warning: directory ownership differs on %s\n"
"filesystem: %u:%u package: %u:%u\n", filename,
lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
}
@@ -415,7 +415,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
size_t pkg_current, size_t pkg_count)
{
int ret = 0, errors = 0;
int i, ret = 0, errors = 0;
int is_upgrade = 0;
alpm_pkg_t *oldpkg = NULL;
alpm_db_t *db = handle->db_local;
@@ -538,7 +538,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
/* call PROGRESS once with 0 percent, as we sort-of skip that here */
PROGRESS(handle, progress, newpkg->name, 0, pkg_count, pkg_current);
while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) {
for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
int percent;
if(newpkg->size != 0) {

View File

@@ -1,7 +1,7 @@
/*
* add.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* alpm.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
@@ -93,16 +93,34 @@ cleanup:
return NULL;
}
/* check current state and free all resources including storage locks */
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
{
int ret = 0;
alpm_db_t *db;
CHECK_HANDLE(myhandle, return -1);
ASSERT(myhandle->trans == NULL, RET_ERR(myhandle, ALPM_ERR_TRANS_NOT_NULL, -1));
/* close local database */
db = myhandle->db_local;
if(db) {
db->ops->unregister(db);
myhandle->db_local = NULL;
}
if(alpm_unregister_all_syncdbs(myhandle) == -1) {
ret = -1;
}
#ifdef HAVE_LIBCURL
curl_multi_cleanup(myhandle->curlm);
curl_global_cleanup();
FREELIST(myhandle->server_errors);
#endif
_alpm_handle_unlock(myhandle);
_alpm_handle_free(myhandle);
return 0;
return ret;
}
const char SYMEXPORT *alpm_version(void)

View File

@@ -1,7 +1,7 @@
/*
* alpm.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
@@ -78,7 +78,7 @@ extern "C" {
* This struct represents an instance of libalpm.
* @ingroup libalpm_handle
*/
typedef struct _alpm_handle_t alpm_handle_t;
typedef struct __alpm_handle_t alpm_handle_t;
/** A database.
*
@@ -98,7 +98,7 @@ typedef struct _alpm_handle_t alpm_handle_t;
* Databases are automatically unregistered when the \link alpm_handle_t \endlink is released.
* @ingroup libalpm_databases
*/
typedef struct _alpm_db_t alpm_db_t;
typedef struct __alpm_db_t alpm_db_t;
/** A package.
@@ -107,19 +107,17 @@ typedef struct _alpm_db_t alpm_db_t;
* Packages from databases are automatically freed when the database is unregistered. Packages loaded
* from a file must be freed manually.
*
* Packages can then be queried for metadata or added to a transaction
* Packages can then be queried for metadata or added to a \link alpm_trans_t transaction \endlink
* to be added or removed from the system.
* @ingroup libalpm_packages
*/
typedef struct _alpm_pkg_t alpm_pkg_t;
typedef struct __alpm_pkg_t alpm_pkg_t;
/** Transaction structure used internally by libalpm
* @ingroup libalpm_trans
* */
typedef struct __alpm_trans_t alpm_trans_t;
/** The extended data type used to store non-standard package data fields
* @ingroup libalpm_packages
*/
typedef struct _alpm_pkg_xdata_t {
char *name;
char *value;
} alpm_pkg_xdata_t;
/** The time type used by libalpm. Represents a unix time stamp
* @ingroup libalpm_misc */
@@ -164,7 +162,7 @@ typedef struct _alpm_backup_t {
* @param path the path to search for in the package
* @return a pointer to the matching file or NULL if not found
*/
alpm_file_t *alpm_filelist_contains(const alpm_filelist_t *filelist, const char *path);
alpm_file_t *alpm_filelist_contains(alpm_filelist_t *filelist, const char *path);
/* End of libalpm_files */
/** @} */
@@ -488,7 +486,7 @@ typedef struct _alpm_siglist_t {
* Check the PGP signature for the given package file.
* @param pkg the package to check
* @param siglist a pointer to storage for signature results
* @return 0 if valid, -1 if an error occurred or signature is invalid
* @return a int value : 0 (valid), 1 (invalid), -1 (an error occurred)
*/
int alpm_pkg_check_pgp_signature(alpm_pkg_t *pkg, alpm_siglist_t *siglist);
@@ -496,7 +494,7 @@ int alpm_pkg_check_pgp_signature(alpm_pkg_t *pkg, alpm_siglist_t *siglist);
* Check the PGP signature for the given database.
* @param db the database to check
* @param siglist a pointer to storage for signature results
* @return 0 if valid, -1 if an error occurred or signature is invalid
* @return a int value : 0 (valid), 1 (invalid), -1 (an error occurred)
*/
int alpm_db_check_pgp_signature(alpm_db_t *db, alpm_siglist_t *siglist);
@@ -600,10 +598,16 @@ typedef struct _alpm_depmissing_t {
/** A conflict that has occurred between two packages. */
typedef struct _alpm_conflict_t {
/** The first package */
alpm_pkg_t *package1;
/** The second package */
alpm_pkg_t *package2;
/** Hash of the first package name
* (used internally to speed up conflict checks) */
unsigned long package1_hash;
/** Hash of the second package name
* (used internally to speed up conflict checks) */
unsigned long package2_hash;
/** Name of the first package */
char *package1;
/** Name of the second package */
char *package2;
/** The conflict */
alpm_depend_t *reason;
} alpm_conflict_t;
@@ -969,7 +973,7 @@ typedef union _alpm_event_t {
* Called when an event occurs
* @param ctx user-provided context
* @param event the event that occurred */
typedef void (*alpm_cb_event)(void *ctx, alpm_event_t *event);
typedef void (*alpm_cb_event)(void *ctx, alpm_event_t *);
/**
* Type of question.
@@ -1076,10 +1080,8 @@ typedef struct _alpm_question_import_key_t {
alpm_question_type_t type;
/** Answer: whether or not to import key */
int import;
/** UID of the key to import */
const char *uid;
/** Fingerprint the key to import */
const char *fingerprint;
/** The key to import */
alpm_pgpkey_t *key;
} alpm_question_import_key_t;
/**
@@ -1116,7 +1118,7 @@ typedef union _alpm_question_t {
* @param ctx user-provided context
* @param question the question being asked.
*/
typedef void (*alpm_cb_question)(void *ctx, alpm_question_t *question);
typedef void (*alpm_cb_question)(void *ctx, alpm_question_t *);
/** An enum over different kinds of progress alerts. */
typedef enum _alpm_progress_t {
@@ -1283,12 +1285,6 @@ int alpm_unregister_all_syncdbs(alpm_handle_t *handle);
*/
int alpm_db_unregister(alpm_db_t *db);
/** Get the handle of a package database.
* @param db pointer to the package database
* @return the alpm handle that the package database belongs to
*/
alpm_handle_t *alpm_db_get_handle(alpm_db_t *db);
/** Get the name of a package database.
* @param db pointer to the package database
* @return the name of the package database, NULL on error
@@ -1343,34 +1339,6 @@ int alpm_db_add_server(alpm_db_t *db, const char *url);
*/
int alpm_db_remove_server(alpm_db_t *db, const char *url);
/** Get the list of cache servers assigned to this db.
* @param db pointer to the database to get the servers from
* @return a char* list of servers
*/
alpm_list_t *alpm_db_get_cache_servers(const alpm_db_t *db);
/** Sets the list of cache servers for the database to use.
* @param db the database to set the servers. The list will be duped and
* the original will still need to be freed by the caller.
* @param servers a char* list of servers.
*/
int alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *servers);
/** Add a download cache server to a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, -1 on error (pm_errno is set accordingly)
*/
int alpm_db_add_cache_server(alpm_db_t *db, const char *url);
/** Remove a download cache server from a database.
* @param db database pointer
* @param url url of the server
* @return 0 on success, 1 on server not present,
* -1 on error (pm_errno is set accordingly)
*/
int alpm_db_remove_cache_server(alpm_db_t *db, const char *url);
/* End of server accessors */
/** @} */
@@ -1866,29 +1834,7 @@ const char *alpm_option_get_gpgdir(alpm_handle_t *handle);
* @param gpgdir the gpgdir to set
*/
int alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir);
/* End of gpgdir accessors */
/** @} */
/** @name Accessors for use sandboxuser
*
* This controls the user that libalpm will use for sensitive operations like
* downloading files.
* @{
*/
/** Returns the user to switch to for sensitive operations.
* @return the user name
*/
const char *alpm_option_get_sandboxuser(alpm_handle_t *handle);
/** Sets the user to switch to for sensitive operations.
* @param handle the context handle
* @param sandboxuser the user to set
*/
int alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser);
/* End of sandboxuser accessors */
/* End of gpdir accessors */
/** @} */
@@ -2444,12 +2390,6 @@ int alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg);
* @{
*/
/** Gets the handle of a package
* @param pkg a pointer to package
* @return the alpm handle that the package belongs to
*/
alpm_handle_t *alpm_pkg_get_handle(alpm_pkg_t *pkg);
/** Gets the name of the file from which the package was loaded.
* @param pkg a pointer to package
* @return a reference to an internal string
@@ -2650,12 +2590,6 @@ int alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len);
*/
int alpm_pkg_get_validation(alpm_pkg_t *pkg);
/** Gets the extended data field of a package.
* @param pkg a pointer to package
* @return a reference to a list of alpm_pkg_xdata_t objects
*/
alpm_list_t *alpm_pkg_get_xdata(alpm_pkg_t *pkg);
/** Returns whether the package has an install scriptlet.
* @return 0 if FALSE, TRUE otherwise
*/
@@ -2785,8 +2719,7 @@ typedef enum _alpm_transflag_t {
ALPM_TRANS_FLAG_RECURSE = (1 << 5),
/** Modify database but do not commit changes to the filesystem. */
ALPM_TRANS_FLAG_DBONLY = (1 << 6),
/** Do not run hooks during a transaction */
ALPM_TRANS_FLAG_NOHOOKS = (1 << 7),
/* (1 << 7) flag can go here */
/** Use ALPM_PKG_REASON_DEPEND when installing packages. */
ALPM_TRANS_FLAG_ALLDEPS = (1 << 8),
/** Only download packages and do not actually install. */
@@ -2951,12 +2884,6 @@ const char *alpm_version(void);
* */
int alpm_capabilities(void);
/** Drop privileges by switching to a different user.
* @param sandboxuser the user to switch to
* @return 0 on success, -1 on failure
*/
int alpm_sandbox_setup_child(const char *sandboxuser);
/* End of libalpm_misc */
/** @} */

View File

@@ -1,7 +1,7 @@
/*
* alpm_list.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -417,7 +417,6 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
while(lp) {
if(alpm_list_append(&newlist, lp->data) == NULL) {
alpm_list_free(newlist);
list->prev = backup;
return NULL;
}
lp = lp->prev;

View File

@@ -1,7 +1,7 @@
/*
* alpm_list.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -48,13 +48,13 @@ extern "C" {
*/
/** A doubly linked list */
typedef struct _alpm_list_t {
typedef struct __alpm_list_t {
/** data held by the list node */
void *data;
/** pointer to the previous node */
struct _alpm_list_t *prev;
struct __alpm_list_t *prev;
/** pointer to the next node */
struct _alpm_list_t *next;
struct __alpm_list_t *next;
} alpm_list_t;
/** Frees a list and its contents */

View File

@@ -1,7 +1,7 @@
/*
* backup.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>

View File

@@ -1,7 +1,7 @@
/*
* backup.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* be_local.c : backend for the local database
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -195,12 +195,6 @@ static alpm_list_t *_cache_get_backup(alpm_pkg_t *pkg)
return pkg->backup;
}
static alpm_list_t *_cache_get_xdata(alpm_pkg_t *pkg)
{
LAZY_LOAD(INFRQ_DESC);
return pkg->xdata;
}
/**
* Open a package changelog for reading. Similar to fopen in functionality,
* except that the returned 'file stream' is from the database.
@@ -250,6 +244,7 @@ static int _cache_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
*/
static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
{
int r;
struct archive *mtree;
alpm_db_t *db = alpm_pkg_get_db(pkg);
@@ -267,7 +262,7 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
_alpm_archive_read_support_filter_all(mtree);
archive_read_support_format_mtree(mtree);
if(_alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE)) {
if((r = _alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE))) {
_alpm_log(pkg->handle, ALPM_LOG_ERROR, _("error while reading file %s: %s\n"),
mtfile, archive_error_string(mtree));
_alpm_archive_read_free(mtree);
@@ -354,7 +349,6 @@ static const struct pkg_operations local_pkg_ops = {
.get_replaces = _cache_get_replaces,
.get_files = _cache_get_files,
.get_backup = _cache_get_backup,
.get_xdata = _cache_get_xdata,
.changelog_open = _cache_changelog_open,
.changelog_read = _cache_changelog_read,
@@ -810,18 +804,6 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
READ_AND_SPLITDEP(info->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
READ_AND_SPLITDEP(info->provides);
} else if(strcmp(line, "%XDATA%") == 0) {
alpm_list_t *i, *lines = NULL;
READ_AND_STORE_ALL(lines);
for(i = lines; i; i = i->next) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
if(pd == NULL || !alpm_list_append(&info->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
FREELIST(lines);
goto error;
}
}
FREELIST(lines);
}
}
fclose(fp);
@@ -1058,15 +1040,6 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, int inforeq)
write_deps(fp, "%CONFLICTS%", info->conflicts);
write_deps(fp, "%PROVIDES%", info->provides);
if(info->xdata) {
fputs("%XDATA%\n", fp);
for(lp = info->xdata; lp; lp = lp->next) {
alpm_pkg_xdata_t *pd = lp->data;
fprintf(fp, "%s=%s\n", pd->name, pd->value);
}
fputc('\n', fp);
}
fclose(fp);
fp = NULL;
}

View File

@@ -1,7 +1,7 @@
/*
* be_package.c : backend for packages
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -244,12 +244,10 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
STRDUP(backup->name, ptr, FREE(backup); return -1);
newpkg->backup = alpm_list_add(newpkg->backup, backup);
} else if(strcmp(key, "xdata") == 0) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(ptr);
if(pd == NULL || !alpm_list_append(&newpkg->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
return -1;
}
} else if(strcmp(key, "force") == 0) {
/* deprecated, skip it */
} else if(strcmp(key, "makepkgopt") == 0) {
/* not used atm */
} else {
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
newpkg->name ? newpkg->name : "error", key, linenum);
@@ -653,6 +651,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
}
_alpm_archive_read_free(archive);
close(fd);
/* internal fields for package struct */
newpkg->origin = ALPM_PKG_FROM_FILE;
@@ -675,7 +674,6 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
newpkg->infolevel |= INFRQ_FILES;
}
close(fd);
return newpkg;
pkg_invalid:
@@ -683,7 +681,9 @@ pkg_invalid:
error:
_alpm_pkg_free(newpkg);
_alpm_archive_read_free(archive);
close(fd);
if(fd >= 0) {
close(fd);
}
return NULL;
}

View File

@@ -1,7 +1,7 @@
/*
* be_sync.c : backend for sync databases
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -189,18 +189,6 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
MALLOC(payload->filepath, len,
FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
STRDUP(payload->remote_name, payload->filepath,
_alpm_dload_payload_reset(payload); FREE(payload);
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
payload->destfile_name = _alpm_get_fullpath(syncpath, payload->remote_name, "");
payload->tempfile_name = _alpm_get_fullpath(syncpath, payload->remote_name, ".part");
if(!payload->destfile_name || !payload->tempfile_name) {
_alpm_dload_payload_reset(payload);
FREE(payload);
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup);
}
payload->handle = handle;
payload->force = dbforce;
payload->unlink_on_fail = 1;
@@ -678,18 +666,6 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
pkg->files.count = files_count;
pkg->files.files = files;
_alpm_filelist_sort(&pkg->files);
} else if(strcmp(line, "%DATA%") == 0) {
alpm_list_t *i, *lines = NULL;
READ_AND_STORE_ALL(lines);
for(i = lines; i; i = i->next) {
alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
if(pd == NULL || !alpm_list_append(&pkg->xdata, pd)) {
_alpm_pkg_xdata_free(pd);
FREELIST(lines);
goto error;
}
}
FREELIST(lines);
}
}
if(ret != ARCHIVE_EOF) {

View File

@@ -1,7 +1,7 @@
/*
* conflict.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
@@ -50,8 +50,10 @@ static alpm_conflict_t *conflict_new(alpm_pkg_t *pkg1, alpm_pkg_t *pkg2,
CALLOC(conflict, 1, sizeof(alpm_conflict_t), return NULL);
ASSERT(_alpm_pkg_dup(pkg1, &conflict->package1) == 0, goto error);
ASSERT(_alpm_pkg_dup(pkg2, &conflict->package2) == 0, goto error);
conflict->package1_hash = pkg1->name_hash;
conflict->package2_hash = pkg2->name_hash;
STRDUP(conflict->package1, pkg1->name, goto error);
STRDUP(conflict->package2, pkg2->name, goto error);
conflict->reason = reason;
return conflict;
@@ -64,9 +66,8 @@ error:
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
{
ASSERT(conflict != NULL, return);
_alpm_pkg_free(conflict->package1);
_alpm_pkg_free(conflict->package2);
FREE(conflict->package2);
FREE(conflict->package1);
FREE(conflict);
}
@@ -78,8 +79,10 @@ alpm_conflict_t *_alpm_conflict_dup(const alpm_conflict_t *conflict)
alpm_conflict_t *newconflict;
CALLOC(newconflict, 1, sizeof(alpm_conflict_t), return NULL);
ASSERT(_alpm_pkg_dup(conflict->package1, &newconflict->package1) == 0, goto error);
ASSERT(_alpm_pkg_dup(conflict->package2, &newconflict->package2) == 0, goto error);
newconflict->package1_hash = conflict->package1_hash;
newconflict->package2_hash = conflict->package2_hash;
STRDUP(newconflict->package1, conflict->package1, goto error);
STRDUP(newconflict->package2, conflict->package2, goto error);
newconflict->reason = conflict->reason;
return newconflict;
@@ -102,10 +105,10 @@ static int conflict_isin(alpm_conflict_t *needle, alpm_list_t *haystack)
alpm_list_t *i;
for(i = haystack; i; i = i->next) {
alpm_conflict_t *conflict = i->data;
if(needle->package1->name_hash == conflict->package1->name_hash
&& needle->package2->name_hash == conflict->package2->name_hash
&& strcmp(needle->package1->name, conflict->package1->name) == 0
&& strcmp(needle->package2->name, conflict->package2->name) == 0) {
if(needle->package1_hash == conflict->package1_hash
&& needle->package2_hash == conflict->package2_hash
&& strcmp(needle->package1, conflict->package1) == 0
&& strcmp(needle->package2, conflict->package2) == 0) {
return 1;
}
}

View File

@@ -1,7 +1,7 @@
/*
* conflict.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* db.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
@@ -131,26 +131,6 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
return 0;
}
alpm_list_t SYMEXPORT *alpm_db_get_cache_servers(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->cache_servers;
}
int SYMEXPORT alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *cache_servers)
{
alpm_list_t *i;
ASSERT(db != NULL, return -1);
FREELIST(db->cache_servers);
for(i = cache_servers; i; i = i->next) {
char *url = i->data;
if(alpm_db_add_cache_server(db, url) != 0) {
return -1;
}
}
return 0;
}
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@@ -184,25 +164,6 @@ static char *sanitize_url(const char *url)
return newurl;
}
int SYMEXPORT alpm_db_add_cache_server(alpm_db_t *db, const char *url)
{
char *newurl;
/* Sanity checks */
ASSERT(db != NULL, return -1);
db->handle->pm_errno = ALPM_ERR_OK;
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->cache_servers = alpm_list_add(db->cache_servers, newurl);
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new cache server URL to database '%s': %s\n",
db->treename, newurl);
return 0;
}
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
{
char *newurl;
@@ -213,8 +174,9 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
if(!newurl) {
return -1;
}
db->servers = alpm_list_add(db->servers, newurl);
_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
db->treename, newurl);
@@ -222,32 +184,6 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
return 0;
}
int SYMEXPORT alpm_db_remove_cache_server(alpm_db_t *db, const char *url)
{
char *newurl, *vdata = NULL;
int ret = 1;
/* Sanity checks */
ASSERT(db != NULL, return -1);
db->handle->pm_errno = ALPM_ERR_OK;
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
db->cache_servers = alpm_list_remove_str(db->cache_servers, newurl, &vdata);
if(vdata) {
_alpm_log(db->handle, ALPM_LOG_DEBUG, "removed cache server URL from database '%s': %s\n",
db->treename, newurl);
free(vdata);
ret = 0;
}
free(newurl);
return ret;
}
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
{
char *newurl, *vdata = NULL;
@@ -259,7 +195,9 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
newurl = sanitize_url(url);
ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
if(!newurl) {
return -1;
}
db->servers = alpm_list_remove_str(db->servers, newurl, &vdata);
@@ -274,12 +212,6 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
return ret;
}
alpm_handle_t SYMEXPORT *alpm_db_get_handle(alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
return db->handle;
}
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
{
ASSERT(db != NULL, return NULL);
@@ -390,7 +322,6 @@ void _alpm_db_free(alpm_db_t *db)
/* cleanup pkgcache */
_alpm_db_free_pkgcache(db);
/* cleanup server list */
FREELIST(db->cache_servers);
FREELIST(db->servers);
FREE(db->_path);
FREE(db->treename);

View File

@@ -1,7 +1,7 @@
/*
* db.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -62,14 +62,13 @@ struct db_operations {
};
/* Database */
struct _alpm_db_t {
struct __alpm_db_t {
alpm_handle_t *handle;
char *treename;
/* do not access directly, use _alpm_db_path(db) for lazy access */
char *_path;
alpm_pkghash_t *pkgcache;
alpm_list_t *grpcache;
alpm_list_t *cache_servers;
alpm_list_t *servers;
const struct db_operations *ops;

View File

@@ -1,7 +1,7 @@
/*
* deps.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>

View File

@@ -1,7 +1,7 @@
/*
* deps.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>

View File

@@ -1,7 +1,7 @@
/*
* diskspace.c
*
* Copyright (c) 2010-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2010-2021 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
@@ -111,10 +111,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
while((mnt = getmntent(fp))) {
if(mnt->mnt_dir == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, mnt->mnt_dir, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);
@@ -138,10 +134,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
while((ret = getmntent(fp, &mnt)) == 0) {
if(mnt->mnt_mountp == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, mnt->mnt_mountp, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);
@@ -169,10 +161,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
}
for(; entries-- > 0; fsp++) {
if(fsp->f_mntonname == NULL) {
continue;
}
CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
STRDUP(mp->mount_dir, fsp->f_mntonname, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
mp->mount_dir_len = strlen(mp->mount_dir);

View File

@@ -1,7 +1,7 @@
/*
* diskspace.h
*
* Copyright (c) 2010-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2010-2021 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
@@ -43,7 +43,7 @@ enum mount_fsinfo {
MOUNT_FSINFO_FAIL,
};
typedef struct _alpm_mountpoint_t {
typedef struct __alpm_mountpoint_t {
/* mount point information */
char *mount_dir;
size_t mount_dir_len;

View File

@@ -1,7 +1,7 @@
/*
* dload.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -28,9 +28,7 @@
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <signal.h>
#include <pwd.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h> /* IPPROTO_TCP */
@@ -50,145 +48,6 @@
#include "log.h"
#include "util.h"
#include "handle.h"
#include "sandbox.h"
static const char *get_filename(const char *url)
{
char *filename = strrchr(url, '/');
if(filename != NULL) {
return filename + 1;
}
/* no slash found, it's a filename */
return url;
}
/* prefix to avoid possible future clash with getumask(3) */
static mode_t _getumask(void)
{
mode_t mask = umask(0);
umask(mask);
return mask;
}
static int touch_and_own_file(const char *filename, const char *user)
{
int fd;
struct passwd const *pw = NULL;
ASSERT(filename != NULL, return -1);
ASSERT(user != NULL, return -1);
ASSERT((fd = open(filename, O_CREAT | O_WRONLY, 0644)) != -1, return -1);
close(fd);
ASSERT((pw = getpwnam(user)) != NULL, return -1);
ASSERT(chown(filename, pw->pw_uid, pw->pw_gid) != -1, return -1);
return 0;
}
static int intialize_download_file(struct dload_payload *p)
{
int ret = 0;
ret = touch_and_own_file(p->tempfile_name, p->handle->sandboxuser);
if(ret == 0 && p->download_signature) {
int len = strlen(p->destfile_name) + strlen(".sig") + strlen(".part") + 1;
char * sig;
MALLOC(sig, len, FREE(sig); RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
snprintf(sig, len, "%s.sig.part", p->destfile_name);
ret = touch_and_own_file(sig, p->handle->sandboxuser);
free(sig);
}
return ret;
}
static int unlink_or_move(const char *file, const char* dest) {
struct stat st;
ASSERT(stat(file, &st) == 0, return -1);
if(st.st_size == 0) {
unlink(file);
} else {
ASSERT(chown(file, 0, 0) != -1, return -1);
if(rename(file, dest)) {
return -1;
}
}
return 0;
}
static int finalize_download_file(struct dload_payload *p)
{
int ret = 0;
ret = unlink_or_move(p->tempfile_name, p->destfile_name);
if(ret == -1) {
_alpm_log(p->handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
p->tempfile_name, p->destfile_name, strerror(errno));
return -1;
}
if(p->download_signature) {
char *sig_temp, *sig_dest;
int len = strlen(p->destfile_name) + strlen(".sig") + 1;
MALLOC(sig_dest, len, RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
snprintf(sig_dest, len, "%s.sig", p->destfile_name);
len = len + 5;
MALLOC(sig_temp, len, FREE(sig_dest); RET_ERR(p->handle, ALPM_ERR_MEMORY, -1));
snprintf(sig_temp, len, "%s.sig.part", p->destfile_name);
ret = unlink_or_move(sig_temp, sig_dest);
if(ret == -1) {
_alpm_log(p->handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
sig_temp, sig_dest, strerror(errno));
}
free(sig_dest);
free(sig_temp);
}
return ret;
}
static FILE *create_tempfile(struct dload_payload *payload, const char *localpath)
{
int fd;
FILE *fp;
char *randpath;
size_t len;
/* create a random filename, which is opened with O_EXCL */
len = strlen(localpath) + 14 + 1;
MALLOC(randpath, len, RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
snprintf(randpath, len, "%salpmtmp.XXXXXX", localpath);
if((fd = mkstemp(randpath)) == -1 ||
fchmod(fd, ~(_getumask()) & 0666) ||
!(fp = fdopen(fd, payload->tempfile_openmode))) {
unlink(randpath);
close(fd);
_alpm_log(payload->handle, ALPM_LOG_ERROR,
_("failed to create temporary file for download\n"));
free(randpath);
return NULL;
}
/* fp now points to our alpmtmp.XXXXXX */
free(payload->tempfile_name);
payload->tempfile_name = randpath;
free(payload->remote_name);
STRDUP(payload->remote_name, strrchr(randpath, '/') + 1,
fclose(fp); RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
return fp;
}
#ifdef HAVE_LIBCURL
@@ -196,16 +55,16 @@ static FILE *create_tempfile(struct dload_payload *payload, const char *localpat
#define HOSTNAME_SIZE 256
static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
struct dload_payload *payload);
struct dload_payload *payload, const char *localpath);
static int curl_gethost(const char *url, char *buffer, size_t buf_len);
/* number of "soft" errors required to blacklist a server, set to 0 to disable
* server blacklisting */
const int server_error_limit = 3;
const unsigned int server_error_limit = 3;
struct server_error_count {
char server[HOSTNAME_SIZE];
int errors;
unsigned int errors;
};
static struct server_error_count *find_server_errors(alpm_handle_t *handle, const char *server)
@@ -235,34 +94,22 @@ static struct server_error_count *find_server_errors(alpm_handle_t *handle, cons
}
}
/* skip for hard errors or too many soft errors */
static int should_skip_server(alpm_handle_t *handle, const char *server)
{
struct server_error_count *h;
if(server_error_limit && (h = find_server_errors(handle, server)) ) {
return h->errors < 0 || h->errors >= server_error_limit;
return h->errors >= server_error_limit;
}
return 0;
}
/* only skip for hard errors */
static int should_skip_cache_server(alpm_handle_t *handle, const char *server)
{
struct server_error_count *h;
if(server_error_limit && (h = find_server_errors(handle, server)) ) {
return h->errors < 0;
}
return 0;
}
/* block normal servers after too many errors */
static void server_soft_error(alpm_handle_t *handle, const char *server)
static void server_increment_error(alpm_handle_t *handle, const char *server, int count)
{
struct server_error_count *h;
if(server_error_limit
&& (h = find_server_errors(handle, server))
&& !should_skip_server(handle, server) ) {
h->errors++;
h->errors += count;
if(should_skip_server(handle, server)) {
_alpm_log(handle, ALPM_LOG_WARNING,
@@ -272,50 +119,42 @@ static void server_soft_error(alpm_handle_t *handle, const char *server)
}
}
/* immediate block for both servers and cache servers */
static void server_hard_error(alpm_handle_t *handle, const char *server)
static void server_soft_error(alpm_handle_t *handle, const char *server)
{
struct server_error_count *h;
if(server_error_limit && (h = find_server_errors(handle, server))) {
if(h->errors != -1) {
/* always set even if already skipped for soft errors
* to disable cache servers too */
h->errors = -1;
_alpm_log(handle, ALPM_LOG_WARNING,
_("fatal error from %s, skipping for the remainder of this transaction\n"),
h->server);
}
}
server_increment_error(handle, server, 1);
}
static const char *payload_next_server(struct dload_payload *payload)
static void server_hard_error(alpm_handle_t *handle, const char *server)
{
while(payload->cache_servers
&& should_skip_cache_server(payload->handle, payload->cache_servers->data)) {
payload->cache_servers = payload->cache_servers->next;
server_increment_error(handle, server, server_error_limit);
}
static const char *get_filename(const char *url)
{
char *filename = strrchr(url, '/');
if(filename != NULL) {
return filename + 1;
}
if(payload->cache_servers) {
const char *server = payload->cache_servers->data;
payload->cache_servers = payload->cache_servers->next;
payload->request_errors_ok = 1;
return server;
}
while(payload->servers
&& should_skip_server(payload->handle, payload->servers->data)) {
payload->servers = payload->servers->next;
}
if(payload->servers) {
const char *server = payload->servers->data;
payload->servers = payload->servers->next;
payload->request_errors_ok = payload->errors_ok;
return server;
}
return NULL;
/* no slash found, it's a filename */
return url;
}
static char *get_fullpath(const char *path, const char *filename,
const char *suffix)
{
char *filepath;
/* len = localpath len + filename len + suffix len + null */
size_t len = strlen(path) + strlen(filename) + strlen(suffix) + 1;
MALLOC(filepath, len, return NULL);
snprintf(filepath, len, "%s%s%s", path, filename, suffix);
return filepath;
}
enum {
ABORT_OVER_MAXFILESIZE = 1,
ABORT_SIGINT = 1,
ABORT_OVER_MAXFILESIZE
};
static int dload_interrupted;
@@ -424,12 +263,45 @@ static int utimes_long(const char *path, long seconds)
return 0;
}
/* prefix to avoid possible future clash with getumask(3) */
static mode_t _getumask(void)
{
mode_t mask = umask(0);
umask(mask);
return mask;
}
static size_t dload_parseheader_cb(void *ptr, size_t size, size_t nmemb, void *user)
{
size_t realsize = size * nmemb;
const char *fptr, *endptr = NULL;
const char * const cd_header = "Content-Disposition:";
const char * const fn_key = "filename=";
struct dload_payload *payload = (struct dload_payload *)user;
long respcode;
(void) ptr;
if(_alpm_raw_ncmp(cd_header, ptr, strlen(cd_header)) == 0) {
if((fptr = strstr(ptr, fn_key))) {
fptr += strlen(fn_key);
/* find the end of the field, which is either a semi-colon, or the end of
* the data. As per curl_easy_setopt(3), we cannot count on headers being
* null terminated, so we look for the closing \r\n */
endptr = fptr + strcspn(fptr, ";\r\n") - 1;
/* remove quotes */
if(*fptr == '"' && *endptr == '"') {
fptr++;
endptr--;
}
/* avoid information leakage with badly formed headers */
if(endptr > fptr) {
STRNDUP(payload->content_disp_name, fptr, endptr - fptr + 1,
RET_ERR(payload->handle, ALPM_ERR_MEMORY, realsize));
}
}
}
curl_easy_getinfo(payload->curl, CURLINFO_RESPONSE_CODE, &respcode);
if(payload->respcode != respcode) {
@@ -503,28 +375,62 @@ static void curl_set_handle_opts(CURL *curl, struct dload_payload *payload)
}
}
static FILE *create_tempfile(struct dload_payload *payload, const char *localpath)
{
int fd;
FILE *fp;
char *randpath;
size_t len;
/* create a random filename, which is opened with O_EXCL */
len = strlen(localpath) + 14 + 1;
MALLOC(randpath, len, RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
snprintf(randpath, len, "%salpmtmp.XXXXXX", localpath);
if((fd = mkstemp(randpath)) == -1 ||
fchmod(fd, ~(_getumask()) & 0666) ||
!(fp = fdopen(fd, payload->tempfile_openmode))) {
unlink(randpath);
close(fd);
_alpm_log(payload->handle, ALPM_LOG_ERROR,
_("failed to create temporary file for download\n"));
free(randpath);
return NULL;
}
/* fp now points to our alpmtmp.XXXXXX */
free(payload->tempfile_name);
payload->tempfile_name = randpath;
free(payload->remote_name);
STRDUP(payload->remote_name, strrchr(randpath, '/') + 1,
fclose(fp); RET_ERR(payload->handle, ALPM_ERR_MEMORY, NULL));
return fp;
}
/* Return 0 if retry was successful, -1 otherwise */
static int curl_retry_next_server(CURLM *curlm, CURL *curl, struct dload_payload *payload)
{
const char *server = NULL;
const char *server;
size_t len;
struct stat st;
alpm_handle_t *handle = payload->handle;
if((server = payload_next_server(payload)) == NULL) {
while(payload->servers && should_skip_server(handle, payload->servers->data)) {
payload->servers = payload->servers->next;
}
if(!payload->servers) {
_alpm_log(payload->handle, ALPM_LOG_DEBUG,
"%s: no more servers to retry\n", payload->remote_name);
return -1;
}
server = payload->servers->data;
payload->servers = payload->servers->next;
/* regenerate a new fileurl */
FREE(payload->fileurl);
len = strlen(server) + strlen(payload->filepath) + 2;
MALLOC(payload->fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
snprintf(payload->fileurl, len, "%s/%s", server, payload->filepath);
_alpm_log(handle, ALPM_LOG_DEBUG,
"%s: retrying from %s\n",
payload->remote_name, payload->fileurl);
fflush(payload->localf);
@@ -565,9 +471,10 @@ static int curl_retry_next_server(CURLM *curlm, CURL *curl, struct dload_payload
* Returns -1 if an error happened for a required file
* Returns -2 if an error happened for an optional file
*/
static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CURLMsg *msg,
int *active_downloads_num)
static int curl_check_finished_download(CURLM *curlm, CURLMsg *msg,
const char *localpath, int *active_downloads_num)
{
alpm_handle_t *handle = NULL;
struct dload_payload *payload = NULL;
CURL *curl = msg->easy_handle;
CURLcode curlerr;
@@ -582,11 +489,12 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
curlerr = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &payload);
ASSERT(curlerr == CURLE_OK, RET_ERR(handle, ALPM_ERR_LIBCURL, -1));
handle = payload->handle;
curl_gethost(payload->fileurl, hostname, sizeof(hostname));
curlerr = msg->data.result;
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: %s returned result %d from transfer\n",
payload->remote_name, "curl", curlerr);
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: curl returned result %d from transfer\n",
payload->remote_name, curlerr);
/* was it a success? */
switch(curlerr) {
@@ -595,7 +503,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
_alpm_log(handle, ALPM_LOG_DEBUG, "%s: response code %ld\n",
payload->remote_name, payload->respcode);
if(payload->respcode >= 400) {
if(!payload->request_errors_ok) {
if(!payload->errors_ok) {
handle->pm_errno = ALPM_ERR_RETRIEVE;
/* non-translated message is same as libcurl */
snprintf(payload->error_buffer, sizeof(payload->error_buffer),
@@ -650,7 +558,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
goto cleanup;
}
default:
if(!payload->request_errors_ok) {
if(!payload->errors_ok) {
handle->pm_errno = ALPM_ERR_LIBCURL;
_alpm_log(handle, ALPM_LOG_ERROR,
_("failed retrieving file '%s' from %s : %s\n"),
@@ -680,6 +588,31 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &timecond);
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
if(payload->trust_remote_name) {
if(payload->content_disp_name) {
/* content-disposition header has a better name for our file */
free(payload->destfile_name);
payload->destfile_name = get_fullpath(localpath,
get_filename(payload->content_disp_name), "");
} else {
const char *effective_filename = strrchr(effective_url, '/');
if(effective_filename && strlen(effective_filename) > 2) {
effective_filename++;
/* if destfile was never set, we wrote to a tempfile. even if destfile is
* set, we may have followed some redirects and the effective url may
* have a better suggestion as to what to name our file. in either case,
* refactor destfile to this newly derived name. */
if(!payload->destfile_name || strcmp(effective_filename,
strrchr(payload->destfile_name, '/') + 1) != 0) {
free(payload->destfile_name);
payload->destfile_name = get_fullpath(localpath, effective_filename, "");
}
}
}
}
/* Let's check if client requested downloading accompanion *.sig file */
if(!payload->signature && payload->download_signature && curlerr == CURLE_OK && payload->respcode < 400) {
struct dload_payload *sig = NULL;
@@ -711,23 +644,22 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
MALLOC(sig->fileurl, len, FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(sig->fileurl, len, "%s.sig", url);
int remote_name_len = strlen(payload->remote_name) + 5;
MALLOC(sig->remote_name, remote_name_len, _alpm_dload_payload_reset(sig);
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(sig->remote_name, remote_name_len, "%s.sig", payload->remote_name);
if(payload->trust_remote_name) {
/* In this case server might provide a new name for the main payload.
* Choose *.sig filename based on this new name.
*/
const char *final_file = get_filename(realname);
int remote_name_len = strlen(final_file) + 5;
MALLOC(sig->remote_name, remote_name_len, FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(sig->remote_name, remote_name_len, "%s.sig", final_file);
}
/* force the filename to be realname + ".sig" */
int destfile_name_len = strlen(realname) + 5;
MALLOC(sig->destfile_name, destfile_name_len, _alpm_dload_payload_reset(sig);
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
MALLOC(sig->destfile_name, destfile_name_len, FREE(sig->remote_name);
FREE(sig->fileurl); FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(sig->destfile_name, destfile_name_len, "%s.sig", realname);
int tempfile_name_len = strlen(realname) + 10;
MALLOC(sig->tempfile_name, tempfile_name_len, _alpm_dload_payload_reset(sig);
FREE(sig); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(sig->tempfile_name, tempfile_name_len, "%s.sig.part", realname);
sig->signature = 1;
sig->handle = handle;
sig->force = payload->force;
@@ -736,7 +668,7 @@ static int curl_check_finished_download(alpm_handle_t *handle, CURLM *curlm, CUR
/* set hard upper limit of 16KiB */
sig->max_size = 16 * 1024;
curl_add_payload(handle, curlm, sig);
curl_add_payload(handle, curlm, sig, localpath);
(*active_downloads_num)++;
}
@@ -775,7 +707,7 @@ cleanup:
}
if(ret == 0) {
if(payload->destfile_name && handle->sandboxuser == NULL) {
if(payload->destfile_name) {
if(rename(payload->tempfile_name, payload->destfile_name)) {
_alpm_log(handle, ALPM_LOG_ERROR, _("could not rename %s to %s (%s)\n"),
payload->tempfile_name, payload->destfile_name, strerror(errno));
@@ -819,7 +751,7 @@ cleanup:
* Returns -1 if am error happened while starting a new download
*/
static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
struct dload_payload *payload)
struct dload_payload *payload, const char *localpath)
{
size_t len;
CURL *curl = NULL;
@@ -832,24 +764,53 @@ static int curl_add_payload(alpm_handle_t *handle, CURLM *curlm,
if(payload->fileurl) {
ASSERT(!payload->servers, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
ASSERT(!payload->filepath, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
payload->request_errors_ok = payload->errors_ok;
} else {
const char *server = payload_next_server(payload);
const char *server;
while(payload->servers && should_skip_server(handle, payload->servers->data)) {
payload->servers = payload->servers->next;
}
ASSERT(server, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
ASSERT(payload->servers, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
ASSERT(payload->filepath, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
server = payload->servers->data;
payload->servers = payload->servers->next;
len = strlen(server) + strlen(payload->filepath) + 2;
MALLOC(payload->fileurl, len, GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
snprintf(payload->fileurl, len, "%s/%s", server, payload->filepath);
}
payload->tempfile_openmode = "wb";
if(!payload->remote_name) {
STRDUP(payload->remote_name, get_filename(payload->fileurl),
GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
}
if(curl_gethost(payload->fileurl, hostname, sizeof(hostname)) != 0) {
_alpm_log(handle, ALPM_LOG_ERROR, _("url '%s' is invalid\n"), payload->fileurl);
GOTO_ERR(handle, ALPM_ERR_SERVER_BAD_URL, cleanup);
}
if(!payload->random_partfile && payload->remote_name && strlen(payload->remote_name) > 0) {
if(!payload->destfile_name) {
payload->destfile_name = get_fullpath(localpath, payload->remote_name, "");
}
payload->tempfile_name = get_fullpath(localpath, payload->remote_name, ".part");
if(!payload->destfile_name || !payload->tempfile_name) {
goto cleanup;
}
} else {
/* We want a random filename or the URL does not contain a filename, so download to a
* temporary location. We can not support resuming this kind of download; any partial
* transfers will be destroyed */
payload->unlink_on_fail = 1;
payload->localf = create_tempfile(payload, localpath);
if(payload->localf == NULL) {
goto cleanup;
}
}
curl_set_handle_opts(curl, payload);
if(payload->max_size == payload->initial_size && payload->max_size != 0) {
@@ -907,7 +868,8 @@ static int compare_dload_payload_sizes(const void *left_ptr, const void *right_p
* Returns 1 if no files were downloaded and all errors were non-fatal
*/
static int curl_download_internal(alpm_handle_t *handle,
alpm_list_t *payloads /* struct dload_payload */)
alpm_list_t *payloads /* struct dload_payload */,
const char *localpath)
{
int active_downloads_num = 0;
int err = 0;
@@ -925,7 +887,7 @@ static int curl_download_internal(alpm_handle_t *handle,
for(; active_downloads_num < max_streams && payloads; active_downloads_num++) {
struct dload_payload *payload = payloads->data;
if(curl_add_payload(handle, curlm, payload) == 0) {
if(curl_add_payload(handle, curlm, payload, localpath) == 0) {
payloads = payloads->next;
} else {
/* The payload failed to start. Do not start any new downloads.
@@ -955,8 +917,8 @@ static int curl_download_internal(alpm_handle_t *handle,
break;
}
if(msg->msg == CURLMSG_DONE) {
int ret = curl_check_finished_download(handle, curlm, msg,
&active_downloads_num);
int ret = curl_check_finished_download(curlm, msg,
localpath, &active_downloads_num);
if(ret == -1) {
/* if current payload failed to download then stop adding new payloads but wait for the
* current ones
@@ -976,177 +938,8 @@ static int curl_download_internal(alpm_handle_t *handle,
return err ? -1 : updated ? 0 : 1;
}
/* Download the requested files by launching a process inside a sandbox.
* Returns -1 if an error happened for a required file
* Returns 0 if a payload was actually downloaded
* Returns 1 if no files were downloaded and all errors were non-fatal
*/
static int curl_download_internal_sandboxed(alpm_handle_t *handle,
alpm_list_t *payloads /* struct dload_payload */,
const char *localpath)
{
int pid, err = 0, ret = -1, callbacks_fd[2];
sigset_t oldblock;
struct sigaction sa_ign, oldint, oldquit;
_alpm_sandbox_callback_context callbacks_ctx;
sigemptyset(&sa_ign.sa_mask);
sa_ign.sa_handler = SIG_IGN;
sa_ign.sa_flags=0;
if(pipe(callbacks_fd) != 0) {
return -1;
}
sigaction(SIGINT, &sa_ign, &oldint);
sigaction(SIGQUIT, &sa_ign, &oldquit);
sigaddset(&sa_ign.sa_mask, SIGCHLD);
sigprocmask(SIG_BLOCK, &sa_ign.sa_mask, &oldblock);
pid = fork();
if(pid == -1) {
/* fork failed, make sure errno is preserved after cleanup */
err = errno;
}
/* child */
if(pid == 0) {
close(callbacks_fd[0]);
fcntl(callbacks_fd[1], F_SETFD, FD_CLOEXEC);
callbacks_ctx.callback_pipe = callbacks_fd[1];
alpm_option_set_logcb(handle, _alpm_sandbox_cb_log, &callbacks_ctx);
alpm_option_set_dlcb(handle, _alpm_sandbox_cb_dl, &callbacks_ctx);
alpm_option_set_fetchcb(handle, NULL, NULL);
alpm_option_set_eventcb(handle, NULL, NULL);
alpm_option_set_questioncb(handle, NULL, NULL);
alpm_option_set_progresscb(handle, NULL, NULL);
/* restore default signal handling in the child */
_alpm_reset_signals();
/* cwd to the download directory */
ret = chdir(localpath);
if(ret != 0) {
handle->pm_errno = errno;
_alpm_log(handle, ALPM_LOG_ERROR, _("could not chdir to download directory %s\n"), localpath);
ret = -1;
} else {
ret = alpm_sandbox_setup_child(handle->sandboxuser);
if (ret != 0) {
_alpm_log(handle, ALPM_LOG_ERROR, _("switching to sandbox user '%s' failed!\n"), handle->sandboxuser);
_Exit(ret | 128);
}
ret = curl_download_internal(handle, payloads);
}
/* pass the result back to the parent */
if(ret == 0) {
/* a payload was actually downloaded */
_Exit(0);
}
else if(ret == 1) {
/* no files were downloaded and all errors were non-fatal */
_Exit(handle->pm_errno);
}
else {
/* an error happened for a required file */
_Exit(handle->pm_errno | 128);
}
}
/* parent */
close(callbacks_fd[1]);
if(pid != -1) {
bool had_error = false;
while(true) {
_alpm_sandbox_callback_t callback_type;
ssize_t got = read(callbacks_fd[0], &callback_type, sizeof(callback_type));
if(got < 0 || (size_t)got != sizeof(callback_type)) {
had_error = true;
break;
}
if(callback_type == ALPM_SANDBOX_CB_DOWNLOAD) {
if(!_alpm_sandbox_process_cb_download(handle, callbacks_fd[0])) {
had_error = true;
break;
}
}
else if(callback_type == ALPM_SANDBOX_CB_LOG) {
if(!_alpm_sandbox_process_cb_log(handle, callbacks_fd[0])) {
had_error = true;
break;
}
}
}
if(had_error) {
kill(pid, SIGTERM);
}
int wret;
while((wret = waitpid(pid, &ret, 0)) == -1 && errno == EINTR);
if(wret > 0) {
if(!WIFEXITED(ret)) {
/* the child did not terminate normally */
ret = -1;
}
else {
ret = WEXITSTATUS(ret);
if(ret != 0) {
if(ret & 128) {
/* an error happened for a required file, or unexpected exit status */
handle->pm_errno = ret & ~128;
ret = -1;
}
else {
handle->pm_errno = ret;
ret = 1;
}
}
}
}
else {
/* waitpid failed */
err = errno;
}
}
close(callbacks_fd[0]);
sigaction(SIGINT, &oldint, NULL);
sigaction(SIGQUIT, &oldquit, NULL);
sigprocmask(SIG_SETMASK, &oldblock, NULL);
if(err) {
errno = err;
ret = -1;
}
return ret;
}
#endif
static int payload_download_fetchcb(struct dload_payload *payload,
const char *server, const char *localpath)
{
int ret;
char *fileurl;
alpm_handle_t *handle = payload->handle;
size_t len = strlen(server) + strlen(payload->filepath) + 2;
MALLOC(fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
snprintf(fileurl, len, "%s/%s", server, payload->filepath);
ret = handle->fetchcb(handle->fetchcb_ctx, fileurl, localpath, payload->force);
free(fileurl);
return ret;
}
/* Returns -1 if an error happened for a required file
* Returns 0 if a payload was actually downloaded
* Returns 1 if no files were downloaded and all errors were non-fatal
@@ -1157,26 +950,7 @@ int _alpm_download(alpm_handle_t *handle,
{
if(handle->fetchcb == NULL) {
#ifdef HAVE_LIBCURL
if(handle->sandboxuser) {
int ret = 0;
alpm_list_t *i;
for(i = payloads; i; i = i->next) {
struct dload_payload *p = i->data;
intialize_download_file(p);
}
ret = curl_download_internal_sandboxed(handle, payloads, localpath);
for(i = payloads; i; i = i->next) {
struct dload_payload *p = i->data;
finalize_download_file(p);
}
return ret;
} else {
return curl_download_internal(handle, payloads);
}
return curl_download_internal(handle, payloads, localpath);
#else
RET_ERR(handle, ALPM_ERR_EXTERNAL_DOWNLOAD, -1);
#endif
@@ -1191,11 +965,16 @@ int _alpm_download(alpm_handle_t *handle,
if(payload->fileurl) {
ret = handle->fetchcb(handle->fetchcb_ctx, payload->fileurl, localpath, payload->force);
} else {
for(s = payload->cache_servers; s && ret == -1; s = s->next) {
ret = payload_download_fetchcb(payload, s->data, localpath);
}
for(s = payload->servers; s && ret == -1; s = s->next) {
ret = payload_download_fetchcb(payload, s->data, localpath);
const char *server = s->data;
char *fileurl;
size_t len = strlen(server) + strlen(payload->filepath) + 2;
MALLOC(fileurl, len, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
snprintf(fileurl, len, "%s/%s", server, payload->filepath);
ret = handle->fetchcb(handle->fetchcb_ctx, fileurl, localpath, payload->force);
free(fileurl);
}
}
@@ -1255,34 +1034,16 @@ int SYMEXPORT alpm_fetch_pkgurl(alpm_handle_t *handle, const alpm_list_t *urls,
CALLOC(payload, 1, sizeof(*payload), GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
STRDUP(payload->fileurl, url, FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
STRDUP(payload->remote_name, get_filename(payload->fileurl),
GOTO_ERR(handle, ALPM_ERR_MEMORY, err));
c = strrchr(url, '/');
if(payload->remote_name && strlen(payload->remote_name) > 0 && strstr(c, ".pkg")) {
if(strstr(c, ".pkg")) {
/* we probably have a usable package filename to download to */
payload->destfile_name = _alpm_get_fullpath(cachedir, payload->remote_name, "");
payload->tempfile_name = _alpm_get_fullpath(cachedir, payload->remote_name, ".part");
payload->allow_resume = 1;
if(!payload->destfile_name || !payload->tempfile_name) {
goto err;
}
} else {
/* The URL does not contain a filename, so download to a temporary location.
* We can not support resuming this kind of download; any partial transfers
* will be destroyed */
payload->unlink_on_fail = 1;
payload->tempfile_openmode = "wb";
payload->localf = create_tempfile(payload, cachedir);
if(payload->localf == NULL) {
goto err;
}
payload->random_partfile = 1;
}
payload->handle = handle;
payload->trust_remote_name = 1;
payload->download_signature = (handle->siglevel & ALPM_SIG_PACKAGE);
payload->signature_optional = (handle->siglevel & ALPM_SIG_PACKAGE_OPTIONAL);
payloads = alpm_list_add(payloads, payload);
@@ -1343,6 +1104,7 @@ void _alpm_dload_payload_reset(struct dload_payload *payload)
FREE(payload->remote_name);
FREE(payload->tempfile_name);
FREE(payload->destfile_name);
FREE(payload->content_disp_name);
FREE(payload->fileurl);
FREE(payload->filepath);
*payload = (struct dload_payload){0};

View File

@@ -1,7 +1,7 @@
/*
* dload.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -26,12 +26,10 @@
struct dload_payload {
alpm_handle_t *handle;
const char *tempfile_openmode;
/* name of the remote file */
char *remote_name;
/* temporary file name, to which the payload is downloaded */
char *tempfile_name;
/* name to which the downloaded file will be renamed */
char *destfile_name;
char *content_disp_name;
/* client has to provide either
* 1) fileurl - full URL to the file
* 2) pair of (servers, filepath), in this case ALPM iterates over the
@@ -39,7 +37,6 @@ struct dload_payload {
*/
char *fileurl;
char *filepath; /* download URL path */
alpm_list_t *cache_servers;
alpm_list_t *servers;
long respcode;
off_t initial_size;
@@ -47,17 +44,18 @@ struct dload_payload {
off_t prevprogress;
int force;
int allow_resume;
int random_partfile;
int errors_ok;
int unlink_on_fail;
int trust_remote_name;
int download_signature; /* specifies if an accompanion *.sig file need to be downloaded*/
int signature_optional; /* *.sig file is optional */
#ifdef HAVE_LIBCURL
CURL *curl;
char error_buffer[CURL_ERROR_SIZE];
int signature; /* specifies if this payload is for a signature file */
int request_errors_ok; /* per-request errors-ok */
#endif
FILE *localf; /* temp download file */
int signature; /* specifies if this payload is for a signature file */
#endif
};
void _alpm_dload_payload_reset(struct dload_payload *payload);

View File

@@ -1,7 +1,7 @@
/*
* error.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* filelist.c
*
* Copyright (c) 2012-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2012-2021 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
@@ -118,7 +118,7 @@ static int _alpm_files_cmp(const void *f1, const void *f2)
return strcmp(file1->name, file2->name);
}
alpm_file_t SYMEXPORT *alpm_filelist_contains(const alpm_filelist_t *filelist,
alpm_file_t SYMEXPORT *alpm_filelist_contains(alpm_filelist_t *filelist,
const char *path)
{
alpm_file_t key;

View File

@@ -1,7 +1,7 @@
/*
* filelist.h
*
* Copyright (c) 2012-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2012-2021 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

View File

@@ -1,7 +1,7 @@
/*
* graph.c - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2007-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2007-2021 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

View File

@@ -1,7 +1,7 @@
/*
* graph.h - helpful graph structure and setup/teardown methods
*
* Copyright (c) 2007-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2007-2021 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
@@ -23,19 +23,19 @@
#include "alpm_list.h"
enum _alpm_graph_vertex_state {
enum __alpm_graph_vertex_state {
ALPM_GRAPH_STATE_UNPROCESSED,
ALPM_GRAPH_STATE_PROCESSING,
ALPM_GRAPH_STATE_PROCESSED
};
typedef struct _alpm_graph_t {
typedef struct __alpm_graph_t {
void *data;
struct _alpm_graph_t *parent; /* where did we come from? */
struct __alpm_graph_t *parent; /* where did we come from? */
alpm_list_t *children;
alpm_list_t *iterator; /* used for DFS without recursion */
off_t weight; /* weight of the node */
enum _alpm_graph_vertex_state state;
enum __alpm_graph_vertex_state state;
} alpm_graph_t;
alpm_graph_t *_alpm_graph_new(void);

View File

@@ -1,7 +1,7 @@
/*
* group.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* group.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* handle.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
@@ -48,28 +48,12 @@ alpm_handle_t *_alpm_handle_new(void)
return handle;
}
/* free all in-memory resources */
void _alpm_handle_free(alpm_handle_t *handle)
{
alpm_list_t *i;
alpm_db_t *db;
if(handle == NULL) {
return;
}
/* close local database */
if((db = handle->db_local)) {
db->ops->unregister(db);
}
/* unregister all sync dbs */
for(i = handle->dbs_sync; i; i = i->next) {
db = i->data;
db->ops->unregister(db);
}
alpm_list_free(handle->dbs_sync);
/* close logfile */
if(handle->logstream) {
fclose(handle->logstream);
@@ -84,12 +68,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
FREELIST(handle->known_keys);
#endif
#ifdef HAVE_LIBCURL
curl_multi_cleanup(handle->curlm);
curl_global_cleanup();
FREELIST(handle->server_errors);
#endif
/* free memory */
_alpm_trans_free(handle->trans);
FREE(handle->root);
@@ -101,7 +79,6 @@ void _alpm_handle_free(alpm_handle_t *handle)
FREE(handle->lockfile);
FREELIST(handle->architectures);
FREE(handle->gpgdir);
FREE(handle->sandboxuser);
FREELIST(handle->noupgrade);
FREELIST(handle->noextract);
FREELIST(handle->ignorepkg);
@@ -293,12 +270,6 @@ const char SYMEXPORT *alpm_option_get_gpgdir(alpm_handle_t *handle)
return handle->gpgdir;
}
const char SYMEXPORT *alpm_option_get_sandboxuser(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return NULL);
return handle->sandboxuser;
}
int SYMEXPORT alpm_option_get_usesyslog(alpm_handle_t *handle)
{
CHECK_HANDLE(handle, return -1);
@@ -602,19 +573,6 @@ int SYMEXPORT alpm_option_set_gpgdir(alpm_handle_t *handle, const char *gpgdir)
return 0;
}
int SYMEXPORT alpm_option_set_sandboxuser(alpm_handle_t *handle, const char *sandboxuser)
{
CHECK_HANDLE(handle, return -1);
if(handle->sandboxuser) {
FREE(handle->sandboxuser);
}
STRDUP(handle->sandboxuser, sandboxuser, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
_alpm_log(handle, ALPM_LOG_DEBUG, "option 'sandboxuser' = %s\n", handle->sandboxuser);
return 0;
}
int SYMEXPORT alpm_option_set_usesyslog(alpm_handle_t *handle, int usesyslog)
{
CHECK_HANDLE(handle, return -1);

View File

@@ -1,7 +1,7 @@
/*
* handle.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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
@@ -26,7 +26,6 @@
#include "alpm_list.h"
#include "alpm.h"
#include "trans.h"
#ifdef HAVE_LIBCURL
#include <curl/curl.h>
@@ -51,7 +50,7 @@ do { \
} \
} while(0)
struct _alpm_handle_t {
struct __alpm_handle_t {
/* internal usage */
alpm_db_t *db_local; /* local db pointer */
alpm_list_t *dbs_sync; /* List of (alpm_db_t *) */
@@ -91,7 +90,6 @@ struct _alpm_handle_t {
char *logfile; /* Name of the log file */
char *lockfile; /* Name of the lock file */
char *gpgdir; /* Directory where GnuPG files are stored */
char *sandboxuser; /* User to switch to for sensitive operations */
alpm_list_t *cachedirs; /* Paths to pacman cache directories */
alpm_list_t *hookdirs; /* Paths to hook directories */
alpm_list_t *overwrite_files; /* Paths that may be overwritten */

View File

@@ -1,7 +1,7 @@
/*
* hook.c
*
* Copyright (c) 2015-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2015-2021 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

View File

@@ -1,7 +1,7 @@
/*
* hook.h
*
* Copyright (c) 2015-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2015-2021 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

13
lib/libalpm/libalpm.pc.in Normal file
View File

@@ -0,0 +1,13 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: libalpm
Description: Arch Linux package management library
URL: http://archlinux.org/pacman/
Version: @LIB_VERSION@
Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@
Cflags: -I${includedir} @LFS_CFLAGS@
Libs: -L${libdir} -lalpm
Libs.private: @LIBS@ @pc_gpgme_libs@ @LIBINTL@

View File

@@ -4,7 +4,7 @@
/*
* libarchive-compat.h
*
* Copyright (c) 2013-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2013-2021 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

View File

@@ -1,7 +1,7 @@
/*
* log.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -1,7 +1,7 @@
/*
* log.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 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

View File

@@ -24,7 +24,6 @@ libalpm_sources = files('''
pkghash.h pkghash.c
rawstr.c
remove.h remove.c
sandbox.h sandbox.c
signing.c signing.h
sync.h sync.c
trans.h trans.c

View File

@@ -1,7 +1,7 @@
/*
* package.c
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
@@ -98,7 +98,6 @@ static alpm_list_t *_pkg_get_provides(alpm_pkg_t *pkg) { return pkg->provides;
static alpm_list_t *_pkg_get_replaces(alpm_pkg_t *pkg) { return pkg->replaces; }
static alpm_filelist_t *_pkg_get_files(alpm_pkg_t *pkg) { return &(pkg->files); }
static alpm_list_t *_pkg_get_backup(alpm_pkg_t *pkg) { return pkg->backup; }
static alpm_list_t *_pkg_get_xdata(alpm_pkg_t *pkg) { return pkg->xdata; }
static void *_pkg_changelog_open(alpm_pkg_t UNUSED *pkg)
{
@@ -163,7 +162,6 @@ const struct pkg_operations default_pkg_ops = {
.get_replaces = _pkg_get_replaces,
.get_files = _pkg_get_files,
.get_backup = _pkg_get_backup,
.get_xdata = _pkg_get_xdata,
.changelog_open = _pkg_changelog_open,
.changelog_read = _pkg_changelog_read,
@@ -193,12 +191,6 @@ const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
return pkg->ops->get_base(pkg);
}
alpm_handle_t SYMEXPORT *alpm_pkg_get_handle(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
return pkg->handle;
}
const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
@@ -487,13 +479,6 @@ int SYMEXPORT alpm_pkg_has_scriptlet(alpm_pkg_t *pkg)
return pkg->ops->has_scriptlet(pkg);
}
alpm_list_t SYMEXPORT *alpm_pkg_get_xdata(alpm_pkg_t *pkg)
{
ASSERT(pkg != NULL, return NULL);
pkg->handle->pm_errno = ALPM_ERR_OK;
return pkg->ops->get_xdata(pkg);
}
static void find_requiredby(alpm_pkg_t *pkg, alpm_db_t *db, alpm_list_t **reqs,
int optional)
{
@@ -686,30 +671,6 @@ static void free_deplist(alpm_list_t *deps)
alpm_list_free(deps);
}
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string)
{
alpm_pkg_xdata_t *pd;
const char *sep;
if(string == NULL || (sep = strchr(string, '=')) == NULL) {
return NULL;
}
CALLOC(pd, 1, sizeof(alpm_pkg_xdata_t), return NULL);
STRNDUP(pd->name, string, sep - string, FREE(pd); return NULL);
STRDUP(pd->value, sep + 1, FREE(pd->name); FREE(pd); return NULL);
return pd;
}
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd)
{
if(pd) {
free(pd->name);
free(pd->value);
free(pd);
}
}
void _alpm_pkg_free(alpm_pkg_t *pkg)
{
if(pkg == NULL) {
@@ -740,8 +701,6 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
}
alpm_list_free_inner(pkg->backup, (alpm_list_fn_free)_alpm_backup_free);
alpm_list_free(pkg->backup);
alpm_list_free_inner(pkg->xdata, (alpm_list_fn_free)_alpm_pkg_xdata_free);
alpm_list_free(pkg->xdata);
free_deplist(pkg->depends);
free_deplist(pkg->optdepends);
free_deplist(pkg->checkdepends);

View File

@@ -1,7 +1,7 @@
/*
* package.h
*
* Copyright (c) 2006-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@archlinux.org>
* Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
* Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
* Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
@@ -67,8 +67,6 @@ struct pkg_operations {
alpm_filelist_t *(*get_files) (alpm_pkg_t *);
alpm_list_t *(*get_backup) (alpm_pkg_t *);
alpm_list_t *(*get_xdata) (alpm_pkg_t *);
void *(*changelog_open) (alpm_pkg_t *);
size_t (*changelog_read) (void *, size_t, const alpm_pkg_t *, void *);
int (*changelog_close) (const alpm_pkg_t *, void *);
@@ -87,7 +85,7 @@ struct pkg_operations {
*/
extern const struct pkg_operations default_pkg_ops;
struct _alpm_pkg_t {
struct __alpm_pkg_t {
unsigned long name_hash;
char *filename;
char *base;
@@ -138,8 +136,6 @@ struct _alpm_pkg_t {
alpm_pkgreason_t reason;
int scriptlet;
alpm_list_t *xdata;
/* Bitfield from alpm_dbinfrq_t */
int infolevel;
/* Bitfield from alpm_pkgvalidation_t */
@@ -162,7 +158,4 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
int _alpm_pkg_cmp(const void *p1, const void *p2);
int _alpm_pkg_compare_versions(alpm_pkg_t *local_pkg, alpm_pkg_t *pkg);
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string);
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd);
#endif /* ALPM_PACKAGE_H */

View File

@@ -1,7 +1,7 @@
/*
* pkghash.c
*
* Copyright (c) 2011-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2011-2021 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

View File

@@ -1,7 +1,7 @@
/*
* pkghash.h
*
* Copyright (c) 2011-2022 Pacman Development Team <pacman-dev@lists.archlinux.org>
* Copyright (c) 2011-2021 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
@@ -32,7 +32,7 @@
* A combination of a hash table and a list, allowing for fast look-up
* by package name but also iteration over the packages.
*/
struct _alpm_pkghash_t {
struct __alpm_pkghash_t {
/** data held by the hash table */
alpm_list_t **hash_table;
/** head node of the hash table data in normal list format */
@@ -45,7 +45,7 @@ struct _alpm_pkghash_t {
unsigned int limit;
};
typedef struct _alpm_pkghash_t alpm_pkghash_t;
typedef struct __alpm_pkghash_t alpm_pkghash_t;
alpm_pkghash_t *_alpm_pkghash_create(unsigned int size);

View File

@@ -15,7 +15,7 @@ XGETTEXT_OPTIONS = \
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package.
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@lists.archlinux.org>
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings.

View File

@@ -9,17 +9,17 @@
# kraim <biskraim@gmail.com>, 2013
# Mosaab Alzoubi <moceap@hotmail.com>, 2013
# Mosaab Alzoubi <moceap@hotmail.com>, 2013
# Mutaz ismail <mutaz@gmx.net>, 2015
# Mutaz ismail <mutaz@gmx.net>, 2015
# Mutaz ismail <egypsy79@gmail.com>, 2015
# Mutaz ismail <egypsy79@gmail.com>, 2015
# سند <0otibi0@gmail.com>, 2013
# صفا الفليج <safaalfulaij@hotmail.com>, 2016-2017
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: سند <0otibi0@gmail.com>, 2013\n"
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ar/)\n"
"Language: ar\n"

View File

@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Ḷḷumex03, 2014\n"
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ast/)\n"
"Language: ast\n"

View File

@@ -3,21 +3,22 @@
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# xxmn77 <xxmn77@gmail.com>, 2021
# xxmn77 <xxmn77@gmail.com>, 2021
# xxmn77 <xxmn77@gmail.com>, 2021
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021-2022
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021
# Xəyyam Qocayev <xxmn77@gmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-07-04 11:31+0000\n"
"Last-Translator: xxmn77 <xxmn77@gmail.com>\n"
"Language-Team: Azerbaijani (Azerbaijan) (http://www.transifex.com/toofishes/archlinux-pacman/language/az_AZ/)\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Xəyyam Qocayev <xxmn77@gmail.com>, 2021-2022\n"
"Language-Team: Azerbaijani (Azerbaijan) (http://www.transifex.com/toofishes/"
"archlinux-pacman/language/az_AZ/)\n"
"Language: az_AZ\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: az_AZ\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
@@ -58,7 +59,8 @@ msgstr "%s adı, %s kimi dəyişdirilə bilmədi (%s)\n"
#: lib/libalpm/add.c:210
#, c-format
msgid "file not found in file list for package %s. skipping extraction of %s\n"
msgstr "%s paketi üçün fayl siyahısında fayl tapılmadı. %s çıxarılması buraxılır\n"
msgstr ""
"%s paketi üçün fayl siyahısında fayl tapılmadı. %s çıxarılması buraxılır\n"
#: lib/libalpm/add.c:219
#, c-format
@@ -70,14 +72,18 @@ msgstr "%s %s çıxarıla bilmədi: yol çox uzundur"
msgid ""
"directory permissions differ on %s\n"
"filesystem: %o package: %o\n"
msgstr "%s-də kataloqa giriş icazələri fərqlidir \nfayl sistemi: %o paketi: %o\n"
msgstr ""
"%s-də kataloqa giriş icazələri fərqlidir \n"
"fayl sistemi: %o paketi: %o\n"
#: lib/libalpm/add.c:276
#, c-format
msgid ""
"directory ownership differs on %s\n"
"filesystem: %u:%u package: %u:%u\n"
msgstr "kataloqa sahiblik %s fayl sistemində\nfətqlənir: %u:%u paketi: %u:%u\n"
msgstr ""
"kataloqa sahiblik %s fayl sistemində\n"
"fətqlənir: %u:%u paketi: %u:%u\n"
#: lib/libalpm/add.c:292
#, c-format
@@ -153,7 +159,7 @@ msgstr "təkrarlanmış '%s' verilənlər bazası qeydi\n"
#: lib/libalpm/be_local.c:622
#, c-format
msgid "corrupted database entry '%s'\n"
msgstr "pozulmuş '%s' verilənlər bazası qeydi\n"
msgstr "'%s' verilənlər bazası qeydi korlanıb\n"
#: lib/libalpm/be_local.c:722 lib/libalpm/be_local.c:818
#: lib/libalpm/be_local.c:958 lib/libalpm/be_local.c:1055
@@ -166,12 +172,14 @@ msgstr "%s faylııla bilmədi: %s\n"
#: lib/libalpm/be_local.c:738 lib/libalpm/be_sync.c:582
#, c-format
msgid "%s database is inconsistent: name mismatch on package %s\n"
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketindəki ad ilə uyğun deyil\n"
msgstr ""
"%s verilənlər bazası ziddiyətlidir: %s paketindəki ad ilə uyğun deyil\n"
#: lib/libalpm/be_local.c:744 lib/libalpm/be_sync.c:588
#, c-format
msgid "%s database is inconsistent: version mismatch on package %s\n"
msgstr "%s verilənlər bazası ziddiyyətlidir: %s paketindəki versiya uyğun gəlmir\n"
msgstr ""
"%s verilənlər bazası ziddiyyətlidir: %s paketindəki versiya uyğun gəlmir\n"
#: lib/libalpm/be_local.c:785
#, c-format
@@ -242,12 +250,14 @@ msgstr "'%s' veri. bazası oxuna bilmədi (%s)\n"
#: lib/libalpm/be_sync.c:489 lib/libalpm/be_sync.c:494
#, c-format
msgid "%s database is inconsistent: filename of package %s is illegal\n"
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı yararsızdır\n"
msgstr ""
"%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı yararsızdır\n"
#: lib/libalpm/be_sync.c:499
#, c-format
msgid "%s database is inconsistent: filename of package %s is too long\n"
msgstr "%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı çox uzundur\n"
msgstr ""
"%s verilənlər bazası ziddiyətlidir: %s paketinin fayl_adı çox uzundur\n"
#: lib/libalpm/be_sync.c:564
#, c-format
@@ -358,7 +368,8 @@ msgstr "'%s' faylının '%s'dən/dan alınması uğursuz oldu: %s\n"
#: lib/libalpm/dload.c:539
#, c-format
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
msgstr "'%s' faylının '%s'dən/dan alınması uğursuz oldu: gözlənilən ölçünü aşdı\n"
msgstr ""
"'%s' faylının '%s'dən/dan alınması uğursuz oldu: gözlənilən ölçünü aşdı\n"
#: lib/libalpm/dload.c:687
#, c-format
@@ -473,12 +484,12 @@ msgstr "verilənlər bazası tapıla bilmədi"
#: lib/libalpm/error.c:72
#, c-format
msgid "invalid or corrupted database"
msgstr "verilənlər bazası səhvdir və ya pozulub"
msgstr "yararsız və ya korlanmış verilənlər bazası"
#: lib/libalpm/error.c:74
#, c-format
msgid "invalid or corrupted database (PGP signature)"
msgstr "verilənlər bazası səhvdir və ya pozulub (PGP imzası)"
msgstr "Yararsız və ya korlanmış verilənlər bazası (PGP imzası)"
#: lib/libalpm/error.c:76
#, c-format
@@ -503,7 +514,7 @@ msgstr "server üçün səhv url"
#: lib/libalpm/error.c:85
#, c-format
msgid "no servers configured for repository"
msgstr "saxlama yeri üçün serverlər tənzimlənməyib"
msgstr "repozitoriya üçün serverlər tənzimlənməyib"
#: lib/libalpm/error.c:88
#, c-format
@@ -563,17 +574,17 @@ msgstr "əməliyyat ignorepkg səbəbindən ləğv edildi"
#: lib/libalpm/error.c:113
#, c-format
msgid "invalid or corrupted package"
msgstr "paket səhvdir və ya pozulub"
msgstr "yararsız və ya korlanmış fayl"
#: lib/libalpm/error.c:115
#, c-format
msgid "invalid or corrupted package (checksum)"
msgstr "paket (yoxlama cəmi) səhvdir və ya pozulub"
msgstr "yararsız və ya korlanmış paket (yoxlama_cəmi)"
#: lib/libalpm/error.c:117
#, c-format
msgid "invalid or corrupted package (PGP signature)"
msgstr "paket (PGP imza) səhvdir və ya pozulub"
msgstr "yararsız və ya korlanmış paket (PGP imza)"
#: lib/libalpm/error.c:119
#, c-format

View File

@@ -3,15 +3,15 @@
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
# Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022
# Ivailo Monev <xakepa10@gmail.com>, 2014-2016
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022\n"
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/bg/)\n"
"Language: bg\n"
@@ -346,7 +346,7 @@ msgstr "Дялът %s е монтиран само за четене\n"
#, c-format
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
msgstr "твърде много грешки от %s, прескачане на останалото от транзакцията\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -383,17 +383,17 @@ msgstr "url '%s' е невалиден\n"
#: lib/libalpm/dload.c:893
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
msgstr "Неуспешно настройване на нужното за изтегляне %s\n"
#: lib/libalpm/dload.c:905
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
msgstr "curl върна грешка %d при трансфера\n"
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "curl трансферна грешка: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -403,7 +403,7 @@ msgstr "неуспех при извличане на файлове\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "изтеглянето завърши успешно, но няма файл в кеша\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -533,7 +533,7 @@ msgstr "дублирана цел"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "дублиране на файлово име"
#: lib/libalpm/error.c:98
#, c-format
@@ -937,7 +937,7 @@ msgstr "не може да се замести %s от %s\n"
#: lib/libalpm/sync.c:476
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
msgstr "пакети %s и %s имат еднакво име: %s\n"
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
#, c-format

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Gwenn M <tornoz@laposte.net>, 2015,2018-2019\n"
"Language-Team: Breton (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/br/)\n"
"Language: br\n"
@@ -19,10 +19,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !"
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n"
"%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > "
"19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 "
"&& n % 1000000 == 0) ? 3 : 4);\n"
"=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && "
"(n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 "
"> 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != "
"0 && n % 1000000 == 0) ? 3 : 4);\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format

View File

@@ -16,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 08:01+0000\n"
"Last-Translator: Davidmp <medipas@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Ramon Buldó <rbuldo@gmail.com>, 2014\n"
"Language-Team: Catalan (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ca/)\n"
"Language: ca\n"
@@ -969,8 +969,8 @@ msgstr "s'han detectat conflictes de paquets impossibles de resoldre.\n"
#, c-format
msgid "removing '%s' from target list because it conflicts with '%s'\n"
msgstr ""
"Se suprimeix \"%s\" de la llista d'objectius perquè té conflictes amb \"%s"
"\".\n"
"Se suprimeix \"%s\" de la llista d'objectius perquè té conflictes amb "
"\"%s\".\n"
#: lib/libalpm/sync.c:1036
#, c-format
@@ -1071,5 +1071,5 @@ msgstr "no existeix la memòria cau %s, es crea...\n"
#, c-format
msgid "couldn't find or create package cache, using %s instead\n"
msgstr ""
"No s'ha pogut trobar o crear el paquet de memòria cau; en lloc d'això, s'usa"
"%s.\n"
"No s'ha pogut trobar o crear el paquet de memòria cau; en lloc d'això, "
"s'usa%s.\n"

View File

@@ -8,7 +8,7 @@
# David Macek <david.macek.0@gmail.com>, 2018
# IAmNotImportant, 2017
# Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014-2015
# Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014
# Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014,2022
# Lukáš Kucharczyk <lukas@kucharczyk.xyz>, 2020
# mmm <markotahal@gmail.com>, 2013
# mmm <markotahal@gmail.com>, 2011
@@ -19,9 +19,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Jaroslav Lichtblau <jlichtblau@seznam.cz>, 2014,2022\n"
"Language-Team: Czech (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/cs/)\n"
"Language: cs\n"
@@ -541,7 +541,7 @@ msgstr "duplicitní cíl"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "duplicitní jméno souboru"
#: lib/libalpm/error.c:98
#, c-format

View File

@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: scootergrisen, 2017\n"
"Language-Team: Danish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/da/)\n"
"Language: da\n"

View File

@@ -8,13 +8,14 @@
# 21db53640bd6018c4a99700a4cf2ee28_f478df7 <98034cbca98620f1cf39d6ebdfa44311_785827>, 2019-2020
# Frank Theile, 2018
# Frank Theile, 2018
# Jakob Gahde <j5lx@fmail.co.uk>, 2014-2015
# J5lx <j5lx@fmail.co.uk>, 2014-2015
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
# Martin Kühne <mysatyre@gmail.com>, 2017
# Matthias Gorissen <matthias@archlinux.de>, 2011
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
# 65138391f015e4001c6ef9d675c96796_707a378 <99e420e9f3ea1b91cb2cbbb4cbc7cd27_2862>, 2013
# Roman Volak <romanvolak@web.de>, 2021
# Silvan Jegen <s.jegen@gmail.com>, 2015
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
# Wieland Hoffmann <themineo+transifex@googlemail.com>, 2013
@@ -22,9 +23,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Roman Volak <romanvolak@web.de>, 2021\n"
"Language-Team: German (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/de/)\n"
"Language: de\n"
@@ -368,7 +369,7 @@ msgstr "Die Partition %s ist so eingehängt, dass sie nur gelesen werden kann\n"
#, c-format
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
msgstr "zu viele Fehlermeldungen von %s, überspringe den Rest des Vorgangs\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -405,17 +406,17 @@ msgstr "URL '%s' ist ungültig\n"
#: lib/libalpm/dload.c:893
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
msgstr "gescheiterte Einstellung der Downloadmenge für %s\n"
#: lib/libalpm/dload.c:905
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
msgstr "curl(=Programm) meldet Fehler %d von der Übertragung\n"
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "curl(=Programm) Übertragungsfehler %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -425,7 +426,7 @@ msgstr "Konnte einige Dateien nicht übertragen\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "Download vollständig und keine Datei im Zwischenspeicher\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -555,7 +556,7 @@ msgstr "Doppelte Ziele"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "gleicher Dateiname"
#: lib/libalpm/error.c:98
#, c-format
@@ -843,7 +844,7 @@ msgstr ""
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:767
#, c-format
msgid "GPGME error: %s\n"
msgstr ""
msgstr "GPGME-Fehler: %s\n"
#: lib/libalpm/signing.c:274
#, c-format

View File

@@ -13,14 +13,16 @@
# ifaigios <ifaigios@gmail.com>, 2015
# ifaigios <ifaigios@gmail.com>, 2015
# Christos Nouskas <nous@artixlinux.org>, 2011
# 492d30ca33568c5819a4f95c90617de1_3730d98 <c1a4cca7e440358a87e394a300ed18e2_882277>, 2021
# th_ts <tsesmelistheodore@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: 492d30ca33568c5819a4f95c90617de1_3730d98 "
"<c1a4cca7e440358a87e394a300ed18e2_882277>, 2021\n"
"Language-Team: Greek (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/el/)\n"
"Language: el\n"
@@ -359,6 +361,8 @@ msgstr "Η κατάτμηση %s είναι προσαρτημένη μόνο γ
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
"υπερβολικά πολλά σφάλματα από %s, παράλειψη για το υπόλοιπο αυτής της "
"συναλλαγής\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -404,7 +408,7 @@ msgstr ""
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "σφάλμα μεταφοράς curl: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -414,7 +418,7 @@ msgstr "σφάλμα λήψης μερικών αρχείων\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "η λήψη ολοκληρώθηκε επιτυχώς αλλά δίχως αρχείο στην κρυφή μνήμη\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -544,7 +548,7 @@ msgstr "διπλότυπος στόχος"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "διπλότυπο όνομα αρχείου"
#: lib/libalpm/error.c:98
#, c-format
@@ -948,7 +952,7 @@ msgstr "αδυναμία αντικατάστασης του %s από το %s\n
#: lib/libalpm/sync.c:476
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
msgstr "τα πακέτα %s και %s έχουν το ίδιο όνομα αρχείου: %s\n"
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
#, c-format

View File

@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Dan McGee <dpmcgee@gmail.com>, 2011\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/toofishes/"
"archlinux-pacman/language/en_GB/)\n"
"Language: en_GB\n"

View File

@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Sebastien Zurfluh <sebastien.zurfluh@gmail.com>, 2017\n"
"Language-Team: Esperanto (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/eo/)\n"
"Language: eo\n"

View File

@@ -11,28 +11,29 @@
# Leonel <leonelmalon@gmail.com>, 2013
# Leonel <leonelmalon@gmail.com>, 2013
# neiko <neikokz+tsfx@gmail.com>, 2011
# prflr88 <prflr88@gmail.com>, 2017
# prflr88 <prflr88@gmail.com>, 2013-2016
# prflr88 <prflr88@gmail.com>, 2017
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2013-2016
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
# Pedro Román <roizheim@gmail.com>, 2013-2014,2016-2019
# picodotdev <pico.dev@gmail.com>, 2016,2019,2021
# prflr88 <prflr88@gmail.com>, 2017
# picodotdev <pico.dev@gmail.com>, 2016,2019,2021-2022
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2017
# Swyter <Swyterzone@gmail.com>, 2015,2017-2018,2021
# Swyter <Swyterzone@gmail.com>, 2021
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 04:57+0000\n"
"Last-Translator: Swyter <Swyterzone@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: picodotdev <pico.dev@gmail.com>, 2016,2019,2021-2022\n"
"Language-Team: Spanish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
"1 : 2;\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
@@ -295,7 +296,7 @@ msgstr "la ruta de la base de datos no está definida\n"
#: lib/libalpm/deps.c:184
#, c-format
msgid "dependency cycle detected:\n"
msgstr "se ha detectado un bucle de dependencias:\n"
msgstr "detectado bucle de dependencias:\n"
#: lib/libalpm/deps.c:187
#, c-format
@@ -305,7 +306,7 @@ msgstr "%s se quitará después de su dependencia %s\n"
#: lib/libalpm/deps.c:191
#, c-format
msgid "%s will be installed before its %s dependency\n"
msgstr "%s se instalará antes de su dependencia %s\n"
msgstr "%s se instalará antes que su dependencia %s\n"
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
#, c-format
@@ -429,7 +430,7 @@ msgstr "error de transferencia de curl: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
msgid "failed to retrieve some files\n"
msgstr "no se pudieron recibir algunos archivos\n"
msgstr "no se pudo recibir algunos archivos\n"
#: lib/libalpm/dload.c:1078
#, c-format
@@ -590,7 +591,7 @@ msgstr ""
#: lib/libalpm/error.c:106
#, c-format
msgid "failed to run transaction hooks"
msgstr "no se pudieron ejecutar los «hooks»"
msgstr "no se pudo ejecutar los «hooks»"
#: lib/libalpm/error.c:109
#, c-format
@@ -630,7 +631,7 @@ msgstr "no se pudo abrir el archivo del paquete"
#: lib/libalpm/error.c:123
#, c-format
msgid "cannot remove all files for package"
msgstr "no se pudieron quitar todos los archivos del paquete"
msgstr "no se pudo quitar todos los archivos del paquete"
#: lib/libalpm/error.c:125
#, c-format
@@ -655,7 +656,7 @@ msgstr "firma PGP no válida"
#: lib/libalpm/error.c:135 lib/libalpm/hook.c:514
#, c-format
msgid "could not satisfy dependencies"
msgstr "no se pudieron satisfacer las dependencias"
msgstr "no se pudo satisfacer las dependencias"
#: lib/libalpm/error.c:137
#, c-format
@@ -670,7 +671,7 @@ msgstr "archivos en conflicto"
#: lib/libalpm/error.c:142
#, c-format
msgid "failed to retrieve some files"
msgstr "no se pudieron descargar algunos archivos"
msgstr "no se pudo descargar algunos archivos"
#: lib/libalpm/error.c:144
#, c-format
@@ -807,8 +808,7 @@ msgstr "no se pudo crear la carpeta: %s: %s\n"
#: lib/libalpm/package.c:598
#, c-format
msgid "could not fully load metadata for package %s-%s\n"
msgstr ""
"no se pudieron cargar completamente los metadatos para el paquete %s-%s\n"
msgstr "no se pudo cargar completamente los metadatos para el paquete %s-%s\n"
#: lib/libalpm/remove.c:111
#, c-format

View File

@@ -12,24 +12,25 @@
# ice, 2016
# Leonel <leonelmalon@gmail.com>, 2013
# neiko <neikokz+tsfx@gmail.com>, 2011
# prflr88 <prflr88@gmail.com>, 2015,2017
# prflr88 <prflr88@gmail.com>, 2015
# prflr88 <prflr88@gmail.com>, 2015,2017
# prflr88 <prflr88@gmail.com>, 2015,2017
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017
# Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Pablo Lezaeta Reyes <prflr88@gmail.com>, 2015,2017\n"
"Language-Team: Spanish (Latin America) (http://www.transifex.com/toofishes/"
"archlinux-pacman/language/es_419/)\n"
"Language: es_419\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
"1 : 2;\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
"Language-Team: Basque (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/eu/)\n"
"Language: eu\n"

View File

@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>, 2013\n"
"Language-Team: Basque (Spain) (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/eu_ES/)\n"
"Language: eu_ES\n"

View File

@@ -18,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Sami Korkalainen, 2018\n"
"Language-Team: Finnish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/fi/)\n"
"Language: fi\n"

View File

@@ -20,16 +20,17 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-07-05 08:09+0000\n"
"Last-Translator: Charles Monzat <c.monzat@laposte.net>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Xavier Devlamynck <magicrhesus@ouranos.be>, 2011\n"
"Language-Team: French (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
"1000000 == 0 ? 1 : 2;\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format

View File

@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Alexandre Filgueira <faidoc@gmail.com>, 2013\n"
"Language-Team: Galician (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/gl/)\n"
"Language: gl\n"

View File

@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 14:03+0000\n"
"Last-Translator: Panwar108 <caspian7pena@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Panwar108 <caspian7pena@gmail.com>, 2018,2020-2021\n"
"Language-Team: Hindi (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/hi/)\n"
"Language: hi\n"

View File

@@ -9,17 +9,17 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Viktor Coric <viktor_coric94@hotmail.com>, 2016\n"
"Language-Team: Croatian (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format

View File

@@ -3,7 +3,7 @@
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# Ács Zoltán <acszoltan111@gmail.com>, 2021
# c2e331a438add123670fbf39846b5de3_8c31b08 <d7888a78469511cd116b0058dd23f760_811520>, 2021
# Balló György <ballogyor@gmail.com>, 2014
# Balló György <ballogyor@gmail.com>, 2011,2014,2016
# Gábor Nagy <ngaba@bibl.u-szeged.hu>, 2011,2013
@@ -20,9 +20,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-06-19 17:38+0000\n"
"Last-Translator: Ács Zoltán <acszoltan111@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: user14 <nleknh@gmail.com>, 2019\n"
"Language-Team: Hungarian (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/hu/)\n"
"Language: hu\n"

View File

@@ -16,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: se7entime <se7entime@disroot.org>, 2013,2015\n"
"Language-Team: Indonesian (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/id/)\n"
"Language: id\n"

View File

@@ -9,22 +9,24 @@
# d574d4bb40c84861791a694a999cce69_9aabecb <ec34fbc10d74f76d8160c2aae04a84b4_6702>, 2014
# d574d4bb40c84861791a694a999cce69_9aabecb <ec34fbc10d74f76d8160c2aae04a84b4_6702>, 2014
# Dan McGee <dpmcgee@gmail.com>, 2011
# Giovanni Scafora <giovanni@archlinux.org>, 2011-2013,2015
# Giovanni Scafora <scafora.giovanni@gmail.com>, 2011-2013,2015,2022
# ~Smlb <smlb@riseup.net>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Giovanni Scafora <scafora.giovanni@gmail.com>, "
"2011-2013,2015,2022\n"
"Language-Team: Italian (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? "
"1 : 2;\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
@@ -364,7 +366,7 @@ msgstr "La partizione %s è montata in sola lettura\n"
#, c-format
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
msgstr "troppi errori da %s, ignoro il resto dell'operazione\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -401,17 +403,17 @@ msgstr "l'url '%s' non è valido\n"
#: lib/libalpm/dload.c:893
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
msgstr "impossibile impostare un payload di download per %s\n"
#: lib/libalpm/dload.c:905
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
msgstr "curl ha restituito l'errore %d dal download\n"
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "errore di curl: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -421,7 +423,7 @@ msgstr "impossibile scaricare alcuni file\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "download completato con successo ma nessun file nella cache\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -551,7 +553,7 @@ msgstr "pacchetto duplicato"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "il nome del file è duplicato"
#: lib/libalpm/error.c:98
#, c-format
@@ -686,7 +688,7 @@ msgstr "si è verificato un errore lanciando il downloader esterno"
#: lib/libalpm/error.c:159
#, c-format
msgid "compiled without signature support"
msgstr "compilato senza supporto per le firme"
msgstr "compilato senza supporto delle firme"
#: lib/libalpm/error.c:162
#, c-format
@@ -741,29 +743,29 @@ msgstr "si è verificato un errore durante la lettura dell'hook %s: %s\n"
#: lib/libalpm/hook.c:162 lib/libalpm/hook.c:206 lib/libalpm/hook.c:248
#, c-format
msgid "hook %s line %d: invalid option %s\n"
msgstr "hook %s, riga %d: opzione non valida: %s\n"
msgstr "hook %s riga %d: l'opzione %s non è valida\n"
#: lib/libalpm/hook.c:172
#, c-format
msgid "hook %s line %d: invalid section %s\n"
msgstr "hook %s, riga %d: sezione non valida: %s\n"
msgstr "hook %s riga %d: la sezione %s non è valida\n"
#: lib/libalpm/hook.c:184 lib/libalpm/hook.c:199 lib/libalpm/hook.c:218
#: lib/libalpm/hook.c:241
#, c-format
msgid "hook %s line %d: invalid value %s\n"
msgstr "hook %s, riga %d: valore non valido: %s\n"
msgstr "hook %s riga %d: il valore %s non è valido\n"
#: lib/libalpm/hook.c:188 lib/libalpm/hook.c:211 lib/libalpm/hook.c:222
#: lib/libalpm/hook.c:236
#, c-format
msgid "hook %s line %d: overwriting previous definition of %s\n"
msgstr "hook %s, riga %d: sovrascrivo la definizione precedente di %s\n"
msgstr "hook %s riga %d: sovrascrivo la definizione precedente di %s\n"
#: lib/libalpm/hook.c:243
#, c-format
msgid "hook %s line %d: unable to set option (%s)\n"
msgstr "hook %s, riga %d: impossibile impostare l'opzione (%s)\n"
msgstr "hook %s riga %d: impossibile impostare l'opzione (%s)\n"
#: lib/libalpm/hook.c:513
#, c-format
@@ -813,7 +815,8 @@ msgstr "impossibile rimuovere il file '%s': %s\n"
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
#, c-format
msgid "could not backup %s due to PATH_MAX overflow\n"
msgstr "impossibile eseguire il backup %s a causa di un overflow di PATH_MAX\n"
msgstr ""
"impossibile eseguire il backup di %s a causa di un overflow di PATH_MAX\n"
#: lib/libalpm/remove.c:554
#, c-format
@@ -833,7 +836,7 @@ msgstr "impossibile rimuovere la voce '%s' dalla cache\n"
#: lib/libalpm/signing.c:163
#, c-format
msgid "Public keyring not found; have you run '%s'?\n"
msgstr "Portachiavi pubblico non trovato; hai eseguito '%s'?\n"
msgstr "Il portachiavi pubblico non è stato trovato; hai eseguito '%s'?\n"
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:767
#, c-format
@@ -848,7 +851,7 @@ msgstr "ricerca della chiave %s tramite WKD in corso\n"
#: lib/libalpm/signing.c:283
#, c-format
msgid "gpg error: %s\n"
msgstr "errore GPG: %s\n"
msgstr "errore gpg: %s\n"
#: lib/libalpm/signing.c:430 lib/libalpm/signing.c:503
#, c-format
@@ -894,12 +897,12 @@ msgstr ""
#: lib/libalpm/signing.c:968
#, c-format
msgid "%s: key \"%s\" is unknown\n"
msgstr "%s: chiave \"%s\" sconosciuta\n"
msgstr "%s: la chiave \"%s\" è sconosciuta\n"
#: lib/libalpm/signing.c:977
#, c-format
msgid "%s: key \"%s\" is disabled\n"
msgstr "%s: chiave \"%s\" disabilitata\n"
msgstr "%s: la chiave \"%s\" è disabilitata\n"
#: lib/libalpm/signing.c:981
#, c-format
@@ -915,13 +918,13 @@ msgstr "%s: la firma di \"%s\" non è valida\n"
#: lib/libalpm/signing.c:1183
#, c-format
msgid "%s: signature format error\n"
msgstr "%s: errore formato firma\n"
msgstr "%s: errore formato della firma\n"
#: lib/libalpm/signing.c:1136 lib/libalpm/signing.c:1169
#: lib/libalpm/signing.c:1177
#, c-format
msgid "%s: unsupported signature format\n"
msgstr "%s: formato firma non supportato\n"
msgstr "%s: il formato della firma non è supportato\n"
#: lib/libalpm/sync.c:96
#, c-format
@@ -957,7 +960,7 @@ msgstr "impossibile sostituire %s con %s\n"
#: lib/libalpm/sync.c:476
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
msgstr "i pacchetti %s e %s hanno lo stesso nome: %s\n"
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
#, c-format

View File

@@ -12,9 +12,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-25 05:28+0000\n"
"Last-Translator: kusakata\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Satoru Abe <s@polamjag.info>, 2015\n"
"Language-Team: Japanese (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ja/)\n"
"Language: ja\n"

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Dan McGee <dpmcgee@gmail.com>, 2011\n"
"Language-Team: Kazakh (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/kk/)\n"
"Language: kk\n"

View File

@@ -3,7 +3,7 @@
# This file is distributed under the same license as the libalpm package.
#
# Translators:
# 배태길 <esrevinu@gmail.com>, 2017-2019
# 배태길 <esrevinu@gmail.com>, 2017-2019,2021
# Ji-Hyeon Gim <potatogim@potatogim.net>, 2014,2018
# Thomas Sungjin Kang <potopro@gmail.com>, 2012-2013
# Thomas Sungjin Kang <potopro@gmail.com>, 2013
@@ -16,9 +16,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: 배태길 <esrevinu@gmail.com>, 2017-2019,2021\n"
"Language-Team: Korean (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/ko/)\n"
"Language: ko\n"
@@ -351,7 +351,7 @@ msgstr "파티션 %s가 읽기 전용으로 마운트되었습니다.\n"
#, c-format
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
msgstr "너무 많은 오류, 서버: %s, 이 처리의 나머지를 위해서 건너뜀\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -386,17 +386,17 @@ msgstr "url '%s'가 잘못되었습니다.\n"
#: lib/libalpm/dload.c:893
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
msgstr "다운로드 페이로드를 구성하지 못함, 대상: %s\n"
#: lib/libalpm/dload.c:905
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
msgstr "curl이 전송 중 오류 %d을 돌려 줌\n"
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "curl 전송 오류: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -406,7 +406,7 @@ msgstr "일부 파일을 가져오지 못했습니다.\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "다운로드를 성공적으로 완료하였지만 캐시에 파일이 없음\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -536,7 +536,7 @@ msgstr "대상이 중복되었습니다."
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "중복 파일이름"
#: lib/libalpm/error.c:98
#, c-format
@@ -940,7 +940,7 @@ msgstr "%s를 %s로 대체할 수 없습니다.\n"
#: lib/libalpm/sync.c:476
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
msgstr "꾸러미 %s와 %s는 같은 파일이름을 가지고 있습니다: %s\n"
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
#, c-format

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: libalpm\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@@ -9,14 +9,15 @@
# Dan McGee <dpmcgee@gmail.com>, 2011
# Kiprianas Spiridonovas <k.spiridonovas@gmail.com>, 2013
# Moo, 2015-2019
# Tautvydas Ž., 2021
# Dan McGee <dpmcgee@gmail.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Tautvydas Ž., 2021\n"
"Language-Team: Lithuanian (http://www.transifex.com/toofishes/archlinux-"
"pacman/language/lt/)\n"
"Language: lt\n"
@@ -355,7 +356,7 @@ msgstr "Skirsnis %s prijungtas tik skaitymui\n"
#, c-format
msgid ""
"too many errors from %s, skipping for the remainder of this transaction\n"
msgstr ""
msgstr "per daug klaidų iš %s, praleidžiama likusi šios operacijos dalis\n"
#: lib/libalpm/dload.c:220
#, c-format
@@ -391,17 +392,17 @@ msgstr "neteisingas url „%s“\n"
#: lib/libalpm/dload.c:893
#, c-format
msgid "failed to setup a download payload for %s\n"
msgstr ""
msgstr "nepavyko nustatyti %s atsisiuntimo naudingojo krovinio\n"
#: lib/libalpm/dload.c:905
#, c-format
msgid "curl returned error %d from transfer\n"
msgstr ""
msgstr "curl grąžino %d perkėlimo klaidą\n"
#: lib/libalpm/dload.c:929
#, c-format
msgid "curl transfer error: %d\n"
msgstr ""
msgstr "cur perkėlimo klaida: %d\n"
#: lib/libalpm/dload.c:1055 lib/libalpm/sync.c:840
#, c-format
@@ -411,7 +412,7 @@ msgstr "nepavyko gauti kai kurių failų\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "atsisiuntimas sėkmingai baigtas, bet talpykloje nėra failo\n"
#: lib/libalpm/error.c:40
#, c-format
@@ -541,7 +542,7 @@ msgstr "objektas jau yra"
#: lib/libalpm/error.c:94
#, c-format
msgid "duplicate filename"
msgstr ""
msgstr "pasikartojantis failo vardas"
#: lib/libalpm/error.c:98
#, c-format
@@ -945,7 +946,7 @@ msgstr "negalima pakeisti %s failu %s\n"
#: lib/libalpm/sync.c:476
#, c-format
msgid "packages %s and %s have the same filename: %s\n"
msgstr ""
msgstr "%s ir %s paketai turi vienodus vardus: %s\n"
#: lib/libalpm/sync.c:542 lib/libalpm/sync.c:612
#, c-format

View File

@@ -13,9 +13,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-24 19:49+0000\n"
"Last-Translator: Alexander F. Rødseth <rodseth@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Thor K. H. <nitrolinken@gmail.com>, 2019\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/toofishes/"
"archlinux-pacman/language/nb/)\n"
"Language: nb\n"

View File

@@ -18,9 +18,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-08-03 21:32+0000\n"
"Last-Translator: Philip Goto <philip.goto@gmail.com>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: zenlord <zenlord@gmail.com>, 2013,2015,2019\n"
"Language-Team: Dutch (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/nl/)\n"
"Language: nl\n"

View File

@@ -13,7 +13,7 @@
# megamann, 2014
# megamann, 2014-2015
# megamann, 2015
# Piotr Strębski <strebski@gmail.com>, 2013,2017-2018
# Piotr Strębski <strebski@gmail.com>, 2013,2017-2018,2022
# Piotr Strębski <strebski@gmail.com>, 2013
# Sebastian Jakubiak, 2019
# Sebastian Jakubiak, 2019
@@ -21,18 +21,18 @@ msgid ""
msgstr ""
"Project-Id-Version: Arch Linux Pacman package manager\n"
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
"POT-Creation-Date: 2021-09-04 16:15+1000\n"
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
"POT-Creation-Date: 2022-09-26 21:09+1000\n"
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2013,2017-2018,2022\n"
"Language-Team: Polish (http://www.transifex.com/toofishes/archlinux-pacman/"
"language/pl/)\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
"n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
#, c-format
@@ -416,7 +416,7 @@ msgstr "nie udało się pobrać niektórych plików\n"
#: lib/libalpm/dload.c:1078
#, c-format
msgid "download completed successfully but no file in the cache\n"
msgstr ""
msgstr "pobieranie zakończone pomyślnie, ale brak pliku w pamięci podręcznej\n"
#: lib/libalpm/error.c:40
#, c-format

Some files were not shown because too many files have changed in this diff Show More