summaryrefslogblamecommitdiffstats
path: root/scan_asn1rawint.c
blob: 6f6f6764d4872dfbce927fe90b5af70a0b2da6cc (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
















                                                                            
#include "asn1.h"

size_t scan_asn1rawint(const char* src,const char* max,size_t len,long* l) {
  size_t i,j;
  long m;
  if (src>=max) return 0;
  if (*src<0) m=-1; else m=0;
  for (i=j=0; i<len; ++i,++j) {
    if ((m==0 && *src==0) || (m==-1 && *src==-1)) --j;
    m=(m<<8)|(unsigned char)*src;
    ++src;
    if (src>max) return 0;
  }
  if (j>sizeof(long)) return 0;
  *l=m;
  return len;
}