summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/be_sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm/be_sync.c')
-rw-r--r--lib/libalpm/be_sync.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 069e39dd..66808a7f 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -460,6 +460,12 @@ static int sync_db_populate(alpm_db_t *db)
f = alpm_list_add(f, linedup); \
} while(1) /* note the while(1) and not (0) */
+#define READ_AND_SPLITDEP(f) do { \
+ if(_alpm_archive_fgets(archive, &buf) != ARCHIVE_OK) goto error; \
+ if(_alpm_strip_newline(buf.line) == 0) break; \
+ f = alpm_list_add(f, _alpm_splitdep(line)); \
+} while(1) /* note the while(1) and not (0) */
+
static int sync_db_read(alpm_db_t *db, struct archive *archive,
struct archive_entry *entry, alpm_pkg_t **likely_pkg)
{
@@ -547,20 +553,15 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
} else if(strcmp(line, "%PGPSIG%") == 0) {
READ_AND_STORE(pkg->base64_sig);
} else if(strcmp(line, "%REPLACES%") == 0) {
- READ_AND_STORE_ALL(pkg->replaces);
+ READ_AND_SPLITDEP(pkg->replaces);
} else if(strcmp(line, "%DEPENDS%") == 0) {
- /* Different than the rest because of the _alpm_splitdep call. */
- while(1) {
- READ_NEXT();
- if(strlen(line) == 0) break;
- pkg->depends = alpm_list_add(pkg->depends, _alpm_splitdep(line));
- }
+ READ_AND_SPLITDEP(pkg->depends);
} else if(strcmp(line, "%OPTDEPENDS%") == 0) {
READ_AND_STORE_ALL(pkg->optdepends);
} else if(strcmp(line, "%CONFLICTS%") == 0) {
- READ_AND_STORE_ALL(pkg->conflicts);
+ READ_AND_SPLITDEP(pkg->conflicts);
} else if(strcmp(line, "%PROVIDES%") == 0) {
- READ_AND_STORE_ALL(pkg->provides);
+ READ_AND_SPLITDEP(pkg->provides);
} else if(strcmp(line, "%DELTAS%") == 0) {
/* Different than the rest because of the _alpm_delta_parse call. */
while(1) {