Fix bug related to internal NVRA parsing: implicit removal of package "foo" during installing of package "foo-bar". Index: lib/rpmte.c --- lib/rpmte.c 14 Apr 2008 11:29:30 -0000 2.79.2.1 +++ lib/rpmte.c 16 Apr 2008 07:04:48 -0000 2.79.2.2 @@ -57,6 +57,8 @@ p->arch = _free(p->arch); p->epoch = _free(p->epoch); p->name = _free(p->name); + p->version = _free(p->version); + p->release = _free(p->release); p->NEVR = _free(p->NEVR); p->NEVRA = _free(p->NEVRA); p->pkgid = _free(p->pkgid); @@ -102,15 +104,17 @@ xx = headerGet(h, he, 0); assert(he->p.str != NULL); p->NEVR = (xx ? he->p.str : xstrdup("?N-?V-?R.?A")); - p->name = xstrdup(p->NEVR); - /* XXX discard ".arch" from NVRA */ - if ((p->release = strrchr(p->name, '.')) != NULL) - *p->release++ = '\0'; - if ((p->release = strrchr(p->name, '-')) != NULL) - *p->release++ = '\0'; - if ((p->version = strrchr(p->name, '-')) != NULL) - *p->version++ = '\0'; + he->tag = RPMTAG_NAME; + xx = headerGet(h, he, 0); + p->name = (xx ? he->p.str : xstrdup("?RPMTAG_NAME?")); + he->tag = RPMTAG_VERSION; + xx = headerGet(h, he, 0); + p->version = (xx ? he->p.str : xstrdup("?RPMTAG_VERSION?")); + he->tag = RPMTAG_RELEASE; + xx = headerGet(h, he, 0); + p->release = (xx ? he->p.str : xstrdup("?RPMTAG_RELEASE?")); + p->db_instance = 0; he->tag = RPMTAG_HDRID; .