Esempio n. 1
0
/*@null@*/
static PyObject *
rpmfi_Digest(rpmfiObject * s)
	/*@*/
{
    int dalgo = 0;
    size_t dlen = 0;
    const unsigned char * digest;
    const char * fdigest;
    char * t;
    size_t i;

    digest = rpmfiDigest(s->fi, &dalgo, &dlen);
    if (digest == NULL || dlen == 0) {
	Py_RETURN_NONE;
    }
    fdigest = t = memset(alloca(dlen), 0, dlen);
    for (i = 0; i < dlen; i++, t += 2)
	sprintf(t, "%02x", digest[i]);
    *t = '\0';
    return Py_BuildValue("s", xstrdup(fdigest));
}
Esempio n. 2
0
static VALUE
rpmfi_FDigest_get(VALUE self)
{
    rpmfi fi = rpmfi_ptr(self);
    int dalgo = 0;
    size_t dlen = 0;
    const unsigned char * digest = rpmfiDigest(fi, &dalgo, &dlen);
    const unsigned char * s = digest;
    size_t nb = 2 * dlen;
    char * fdigest = memset(alloca(nb+1), 0, nb+1);
    char *t = fdigest;
    int i;

if (_debug)
fprintf(stderr, "==> %s(0x%lx) ptr %p\n", __FUNCTION__, self, fi);
    for (i = 0, s = digest, t = fdigest; i < (int)dlen; i++, s++, t+= 2) {
	static const char hex[] = "0123456789abcdef";
	t[0] = hex[(s[0] >> 4) & 0xf];
	t[1] = hex[(s[0]     ) & 0xf];
    }
    *t = '\0';

    return rb_str_new2(fdigest);
}