/*@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)); }
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); }