}
if (ll != 0) {
atom->off += ll;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
l = yacFromBE(buf + 1, ll);
}
}
atom->off += l;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
atom->len = l;
YACItemUint;
const size_t l = (atom->tag & 0x0F) + 1;
atom->off += l;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
if (buf[1] == 0) {
case YACAtomUUID:
atom->typ = YACItemUUID;
atom->off += 16;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
atom->len = 16;
}
atom->typ = YACItemFloat;
atom->off += l;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
atom->typ = YACItemRaw;
}
atom->typ = YACItemTAI64;
atom->off += l;
- if (len < atom->off) {
+ if ((ptrdiff_t)len < atom->off) {
return YACErrNotEnough;
}
atom->len = l;
};
struct YACAtom {
- size_t off; // length of the whole atom
- size_t len; // length of the strings, TAI64, raw values
+ ptrdiff_t off; // length of the whole atom
+ size_t len; // length of the strings, TAI64, raw values
union {
uint64_t uint; // unsigned integer's value
int64_t sint; // signed integer's value
const size_t idx,
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len)
{
}
struct YACAtom atom;
memset(&atom, 0, sizeof(struct YACAtom));
- size_t off = 0;
+ ptrdiff_t off = 0;
enum YACErr err = YACAtomDecode(&atom, buf, len);
if (err != YACErrNo) {
fprintf(stderr, "map err: %d\n", err);
YACIterList(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb)
enum YACErr err = YACErrInvalid;
bool eoc = false;
for (size_t n = 0;; n++) {
- err = YACAtomDecode(atom, buf + *off, len - *off);
+ err = YACAtomDecode(atom, buf + *off, (size_t)((ptrdiff_t)len - *off));
if (err != YACErrNo) {
return err;
}
YACIterMap(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb)
size_t keyLen = 0;
enum YACErr err = YACErrInvalid;
for (;;) {
- err = YACAtomDecode(atom, buf + *off, len - *off);
+ err = YACAtomDecode(atom, buf + *off, (size_t)((ptrdiff_t)len - *off));
if (err != YACErrNo) {
return err;
}
}
keyLen = atom->len;
key = atom->val.buf;
- err = YACAtomDecode(atom, buf + *off, len - *off);
+ err = YACAtomDecode(atom, buf + *off, (size_t)((ptrdiff_t)len - *off));
if (err != YACErrNo) {
return err;
}
YACIterBlob(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb)
{
- enum YACErr err = YACAtomDecode(atom, buf + *off, len - *off);
+ enum YACErr err = YACAtomDecode(atom, buf + *off, (size_t)((ptrdiff_t)len - *off));
if (err != YACErrNo) {
return err;
}
}
bool eoc = false;
for (size_t n = 0; !eoc; n++) {
- err = YACAtomDecode(atom, buf + *off, len - *off);
+ err = YACAtomDecode(atom, buf + *off, (size_t)((ptrdiff_t)len - *off));
if (err != YACErrNo) {
return err;
}
(*off) += atom->off;
switch (atom->typ) {
case YACItemNIL:
- if ((len - *off) <= chunkLen) {
+ if (((ptrdiff_t)len - *off) <= (ptrdiff_t)chunkLen) {
return YACErrBlobShortChunk;
}
atom->val.buf = buf + *off;
const size_t idx,
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len);
YACIterList(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb);
YACIterMap(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb);
YACIterBlob(
void *cbState,
struct YACAtom *atom,
- size_t *off,
+ ptrdiff_t *off,
const unsigned char *buf,
const size_t len,
YACIterCb cb);