+#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#define SvPVbyte SvPV
#endif
+#ifndef dTHX
+ #define pTHX_
+ #define aTHX_
+#endif
+
#ifndef PerlIO
#define PerlIO FILE
#define PerlIO_read(f, buf, count) fread(buf, 1, count, f)
#include "src/sha.c"
-static int ix2alg[] =
+static const int ix2alg[] =
{1,1,1,224,224,224,256,256,256,384,384,384,512,512,512,
512224,512224,512224,512256,512256,512256};
#define MAX_WRITE_SIZE 16384
#define IO_BUFFER_SIZE 4096
-static SHA *getSHA(SV *self)
+static SHA *getSHA(pTHX_ SV *self)
{
if (!sv_isobject(self) || !sv_derived_from(self, "Digest::SHA"))
return(NULL);
SHA *state;
SHA *clone;
CODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
Newx(clone, 1, SHA);
RETVAL = newSV(0);
PREINIT:
SHA *state;
CODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
- RETVAL = ix ? state->alg : state->digestlen << 3;
+ RETVAL = ix ? state->alg : (int) (state->digestlen << 3);
OUTPUT:
RETVAL
STRLEN len;
SHA *state;
PPCODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
for (i = 1; i < items; i++) {
data = (UCHR *) (SvPVbyte(ST(i), len));
SHA *state;
char *result;
CODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
shafinish(state);
len = 0;
UCHR buf[256];
UCHR *ptr = buf;
CODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
Copy(digcpy(state), ptr, state->alg <= SHA256 ? 32 : 64, UCHR);
ptr += state->alg <= SHA256 ? 32 : 64;
ptr = w32mem(ptr, state->lenhl);
ptr = w32mem(ptr, state->lenlh);
ptr = w32mem(ptr, state->lenll);
- RETVAL = newSVpv((char *) buf, ptr - buf);
+ RETVAL = newSVpv((char *) buf, (STRLEN) (ptr - buf));
OUTPUT:
RETVAL
SHA *state;
UCHR *data;
PPCODE:
- if ((state = getSHA(self)) == NULL)
+ if ((state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
data = (UCHR *) SvPV(packed_state, len);
- if (len != (state->alg <= SHA256 ? 116 : 212))
+ if (len != (state->alg <= SHA256 ? 116U : 212U))
XSRETURN_UNDEF;
data = statecpy(state, data);
Copy(data, state->block, state->blocksize >> 3, UCHR);
int n;
UCHR in[IO_BUFFER_SIZE];
PPCODE:
- if (!f || (state = getSHA(self)) == NULL)
+ if (!f || (state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
while ((n = PerlIO_read(f, in, sizeof(in))) > 0)
- shawrite(in, n << 3, state);
+ shawrite(in, (ULNG) n << 3, state);
XSRETURN(1);
void
SV * self
PerlIO * f
PREINIT:
- char c;
+ UCHR c;
int n;
int cr = 0;
UCHR *src, *dst;
UCHR in[IO_BUFFER_SIZE+1];
SHA *state;
PPCODE:
- if (!f || (state = getSHA(self)) == NULL)
+ if (!f || (state = getSHA(aTHX_ self)) == NULL)
XSRETURN_UNDEF;
while ((n = PerlIO_read(f, in+1, IO_BUFFER_SIZE)) > 0) {
for (dst = in, src = in + 1; n; n--) {
}
}
}
- shawrite(in, (dst - in) << 3, state);
+ shawrite(in, (ULNG) (dst - in) << 3, state);
}
if (cr) {
in[0] = '\012';