{
fileconflict *fc;
if (!path)
- return rpmrc;
+ return rpmrc;
+
rpmlog(RPMLOG_DEBUG, "FILE_CONFLICT_FUNC hook path %s\n",path);
- const char *name = headerGetString(oldHeader, RPMTAG_SECSWSOURCE);
- if (!name || !root) {
- return rpmrc; /* no sw source(s) - abnormal state */
- }
+ const char *name = headerGetString(oldHeader, RPMTAG_SECSWSOURCE);
const char *pkg_name = headerGetString(oldHeader, RPMTAG_NAME);
+ if (!name || !root || !pkg_name) {
+ return rpmrc; /* no sw source(s) or package name - abnormal state */
+ }
sw_source_x *sw_source = msmSWSourceTreeTraversal(root->sw_sources, findSWSourceByName, (void *)name, NULL);
if (!sw_source)
if (!fc) return RPMRC_FAIL;
fc->path = path;
fc->sw_source = sw_source;
- fc->pkg_name = pkg_name;
+ fc->pkg_name = strdup(pkg_name);
+ if (!fc->pkg_name) return RPMRC_FAIL;
HASH_ADD_KEYPTR(hh, allfileconflicts, path, strlen(path), fc);
} else {
/* Many packages have installed the same file */
HASH_ITER(hh, allfileconflicts, fc, temp) {
HASH_DELETE(hh, allfileconflicts, fc);
msmFreePointer((void**)&fc->path);
+ msmFreePointer((void**)&fc->pkg_name);
msmFreePointer((void**)&fc);
}
}