int cnt;
int dcnt;
unsigned char *dp;
+ int forcebinary; /* sigh */
unsigned char data[1];
} RpmHead;
return 0;
}
sourcerpm = headstring(rpmhead, TAG_SOURCERPM);
- if (sourcerpm)
+ if (sourcerpm || rpmhead->forcebinary)
s->arch = pool_str2id(pool, headstring(rpmhead, TAG_ARCH), 1);
else
{
rpmhead = solv_realloc(rpmhead, sizeof(*rpmhead) + rpmheadsize);
}
memcpy(buf, dbdata.data, 8);
+ rpmhead->forcebinary = 1;
rpmhead->cnt = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
rpmhead->dcnt = buf[4] << 24 | buf[5] << 16 | buf[6] << 8 | buf[7];
if (8 + rpmhead->cnt * 16 + rpmhead->dcnt > dbdata.size)
rpmhead = solv_realloc(rpmhead, sizeof(*rpmhead) + rpmheadsize);
}
memcpy(buf, dbdata.data, 8);
+ rpmhead->forcebinary = 1;
rpmhead->cnt = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
rpmhead->dcnt = buf[4] << 24 | buf[5] << 16 | buf[6] << 8 | buf[7];
if (8 + rpmhead->cnt * 16 + rpmhead->dcnt > dbdata.size)
Id chksumtype = 0;
void *chksumh = 0;
void *leadsigchksumh = 0;
+ int forcebinary = 0;
data = repo_add_repodata(repo, flags);
fclose(fp);
return 0;
}
+ forcebinary = lead[6] != 0 || lead[7] != 1;
if (chksumh)
solv_chksum_add(chksumh, lead, 96 + 16);
if (leadsigchksumh)
solv_chksum_add(chksumh, rpmhead->data, sigdsize);
if (leadsigchksumh)
solv_chksum_add(leadsigchksumh, rpmhead->data, sigdsize);
+ rpmhead->forcebinary = 0;
rpmhead->cnt = sigcnt;
rpmhead->dcnt = sigdsize - sigcnt * 16;
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
}
if (chksumh)
solv_chksum_add(chksumh, rpmhead->data, l);
+ rpmhead->forcebinary = forcebinary;
rpmhead->cnt = sigcnt;
rpmhead->dcnt = sigdsize;
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
if (!name)
name = "";
sourcerpm = headstring(rpmhead, TAG_SOURCERPM);
- if (sourcerpm)
+ if (sourcerpm || rpmhead->forcebinary)
arch = headstring(rpmhead, TAG_ARCH);
else
{
}
rpmhead = state->rpmhead;
memcpy(buf, dbdata.data, 8);
+ rpmhead->forcebinary = 1;
rpmhead->cnt = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
rpmhead->dcnt = buf[4] << 24 | buf[5] << 16 | buf[6] << 8 | buf[7];
if (8 + rpmhead->cnt * 16 + rpmhead->dcnt > dbdata.size)
RpmHead *rpmhead;
int sigdsize, sigcnt, l;
unsigned char lead[4096];
+ int forcebinary = 0;
if (!fp)
return rpm_byrpmdbid(0, 0, statep);
fprintf(stderr, "%s: not a rpm\n", name);
return 0;
}
+ forcebinary = lead[6] != 0 || lead[7] != 1;
if (lead[78] != 0 || lead[79] != 5)
{
fprintf(stderr, "%s: not a V5 header\n", name);
fclose(fp);
return 0;
}
+ rpmhead->forcebinary = forcebinary;
rpmhead->cnt = sigcnt;
rpmhead->dcnt = sigdsize;
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;
rpmhead = state->rpmhead;
memcpy(rpmhead->data, uh + 8, l - 8);
free((void *)uh);
+ rpmhead->forcebinary = 0;
rpmhead->cnt = sigcnt;
rpmhead->dcnt = sigdsize;
rpmhead->dp = rpmhead->data + rpmhead->cnt * 16;