2. We have pmconflict_t. Nice. So we don't need pmdeptype_t (in pmdepmissing_t). As we discussed with Xavier, pmconflict_t should be a symmetric structure: {target,ctarget} set [<=> alpm_strcmp ordered (target, ctarget) pair] instead of (target,ctarget) ordered pair) <- this is a pmconflict_t-helper-function problem only. Future plans: Well, I overlooked something. pmconflict_t is reserved for file-conflicts only, and pmdepmissing_t is used for conflicts?! (UGLY) So here is a little patch which renames pmconflict_t to pmfileconflict_t and alpm_conflict_* to alpm_fileconflict_*. pmconflicttype_t was removed from pmfileconflict_t structure, because type can be determined with (ctarget == ""). Bye, ngaba
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h index 880bbeb..a40075a 100644 --- a/lib/libalpm/alpm.h +++ b/lib/libalpm/alpm.h @@ -52,7 +52,7 @@ typedef struct __pmtrans_t pmtrans_t; typedef struct __pmsyncpkg_t pmsyncpkg_t; typedef struct __pmdepend_t pmdepend_t; typedef struct __pmdepmissing_t pmdepmissing_t; -typedef struct __pmconflict_t pmconflict_t; +typedef struct __pmfileconflict_t pmfileconflict_t; typedef struct __pmgraph_t pmgraph_t; /* @@ -389,10 +389,10 @@ typedef enum _pmconflicttype_t { PM_CONFLICT_TYPE_FILE } pmconflicttype_t; -const char *alpm_conflict_get_target(pmconflict_t *conflict); -pmconflicttype_t alpm_conflict_get_type(pmconflict_t *conflict); -const char *alpm_conflict_get_file(pmconflict_t *conflict); -const char *alpm_conflict_get_ctarget(pmconflict_t *conflict); +const char *alpm_fileconflict_get_target(pmfileconflict_t *conflict); +pmconflicttype_t alpm_fileconflict_get_type(pmfileconflict_t *conflict); +const char *alpm_fileconflict_get_file(pmfileconflict_t *conflict); +const char *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict); /* * Helpers diff --git a/lib/libalpm/conflict.c b/lib/libalpm/conflict.c index d09c996..2aea8ff 100644 --- a/lib/libalpm/conflict.c +++ b/lib/libalpm/conflict.c @@ -230,22 +230,20 @@ static alpm_list_t *chk_filedifference(alpm_list_t *filesA, alpm_list_t *filesB) return(ret); } -/* Adds pmconflict_t to a conflicts list. Pass the conflicts list, type (either +/* Adds pmfileconflict_t to a conflicts list. Pass the conflicts list, type (either * PM_CONFLICT_TYPE_TARGET or PM_CONFLICT_TYPE_FILE), a file string, and either * two package names or one package name and NULL. This is a wrapper for former * functionality that was done inline. */ -static alpm_list_t *add_fileconflict(alpm_list_t *conflicts, - pmconflicttype_t type, const char *filestr, +static alpm_list_t *add_fileconflict(alpm_list_t *conflicts, const char *filestr, const char* name1, const char* name2) { - pmconflict_t *conflict = malloc(sizeof(pmconflict_t)); + pmfileconflict_t *conflict = malloc(sizeof(pmfileconflict_t)); if(conflict == NULL) { _alpm_log(PM_LOG_ERROR, _("malloc failure: could not allocate %d bytes\n"), - sizeof(pmconflict_t)); + sizeof(pmfileconflict_t)); return(conflicts); } - conflict->type = type; strncpy(conflict->target, name1, PKG_NAME_LEN); strncpy(conflict->file, filestr, CONFLICT_FILE_LEN); if(name2) { @@ -303,8 +301,7 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root) if(tmpfiles) { for(k = tmpfiles; k; k = k->next) { snprintf(path, PATH_MAX, "%s%s", root, (char *)k->data); - conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_TARGET, path, - alpm_pkg_get_name(p1), alpm_pkg_get_name(p2)); + conflicts = add_fileconflict(conflicts, path, alpm_pkg_get_name(p1), alpm_pkg_get_name(p2)); } alpm_list_free_inner(tmpfiles, &free); alpm_list_free(tmpfiles); @@ -402,8 +399,7 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root) } if(!resolved_conflict) { _alpm_log(PM_LOG_DEBUG, "file found in conflict: %s\n", path); - conflicts = add_fileconflict(conflicts, PM_CONFLICT_TYPE_FILE, - path, p1->name, NULL); + conflicts = add_fileconflict(conflicts, path, p1->name, NULL); } } } @@ -414,7 +410,7 @@ alpm_list_t *_alpm_db_find_conflicts(pmdb_t *db, pmtrans_t *trans, char *root) return(conflicts); } -const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict) +const char SYMEXPORT *alpm_fileconflict_get_target(pmfileconflict_t *conflict) { ALPM_LOG_FUNC; @@ -425,7 +421,7 @@ const char SYMEXPORT *alpm_conflict_get_target(pmconflict_t *conflict) return conflict->target; } -pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict) +pmconflicttype_t SYMEXPORT alpm_fileconflict_get_type(pmfileconflict_t *conflict) { ALPM_LOG_FUNC; @@ -433,10 +429,10 @@ pmconflicttype_t SYMEXPORT alpm_conflict_get_type(pmconflict_t *conflict) ASSERT(handle != NULL, return(-1)); ASSERT(conflict != NULL, return(-1)); - return conflict->type; + if(conflict->ctarget[0] == '\0') return (PM_CONFLICT_TYPE_FILE); else return(PM_CONFLICT_TYPE_TARGET); } -const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict) +const char SYMEXPORT *alpm_fileconflict_get_file(pmfileconflict_t *conflict) { ALPM_LOG_FUNC; @@ -447,7 +443,7 @@ const char SYMEXPORT *alpm_conflict_get_file(pmconflict_t *conflict) return conflict->file; } -const char SYMEXPORT *alpm_conflict_get_ctarget(pmconflict_t *conflict) +const char SYMEXPORT *alpm_fileconflict_get_ctarget(pmfileconflict_t *conflict) { ALPM_LOG_FUNC; diff --git a/lib/libalpm/conflict.h b/lib/libalpm/conflict.h index 8928de8..955fc38 100644 --- a/lib/libalpm/conflict.h +++ b/lib/libalpm/conflict.h @@ -27,9 +27,8 @@ #define CONFLICT_FILE_LEN 512 -struct __pmconflict_t { +struct __pmfileconflict_t { char target[PKG_NAME_LEN]; - pmconflicttype_t type; char file[CONFLICT_FILE_LEN]; char ctarget[PKG_NAME_LEN]; }; diff --git a/src/pacman/add.c b/src/pacman/add.c index 0b59a23..d430bf6 100644 --- a/src/pacman/add.c +++ b/src/pacman/add.c @@ -169,18 +169,18 @@ int pacman_add(alpm_list_t *targets) break; case PM_ERR_FILE_CONFLICTS: for(i = data; i; i = alpm_list_next(i)) { - pmconflict_t *conflict = alpm_list_getdata(i); - switch(alpm_conflict_get_type(conflict)) { + pmfileconflict_t *conflict = alpm_list_getdata(i); + switch(alpm_fileconflict_get_type(conflict)) { case PM_CONFLICT_TYPE_TARGET: printf(_("%s exists in both '%s' and '%s'\n"), - alpm_conflict_get_file(conflict), - alpm_conflict_get_target(conflict), - alpm_conflict_get_ctarget(conflict)); + alpm_fileconflict_get_file(conflict), + alpm_fileconflict_get_target(conflict), + alpm_fileconflict_get_ctarget(conflict)); break; case PM_CONFLICT_TYPE_FILE: printf(_("%s: %s exists in filesystem\n"), - alpm_conflict_get_target(conflict), - alpm_conflict_get_file(conflict)); + alpm_fileconflict_get_target(conflict), + alpm_fileconflict_get_file(conflict)); break; } } diff --git a/src/pacman/sync.c b/src/pacman/sync.c index bf6eed1..0feff97 100644 --- a/src/pacman/sync.c +++ b/src/pacman/sync.c @@ -632,18 +632,18 @@ int sync_trans(alpm_list_t *targets, int sync_only) alpm_list_t *i; case PM_ERR_FILE_CONFLICTS: for(i = data; i; i = alpm_list_next(i)) { - pmconflict_t *conflict = alpm_list_getdata(i); - switch(alpm_conflict_get_type(conflict)) { + pmfileconflict_t *conflict = alpm_list_getdata(i); + switch(alpm_fileconflict_get_type(conflict)) { case PM_CONFLICT_TYPE_TARGET: printf(_("%s exists in both '%s' and '%s'\n"), - alpm_conflict_get_file(conflict), - alpm_conflict_get_target(conflict), - alpm_conflict_get_ctarget(conflict)); + alpm_fileconflict_get_file(conflict), + alpm_fileconflict_get_target(conflict), + alpm_fileconflict_get_ctarget(conflict)); break; case PM_CONFLICT_TYPE_FILE: printf(_("%s: %s exists in filesystem\n"), - alpm_conflict_get_target(conflict), - alpm_conflict_get_file(conflict)); + alpm_fileconflict_get_target(conflict), + alpm_fileconflict_get_file(conflict)); break; } }