mirror of
https://github.com/pevans/erc-c.git
synced 2025-02-17 07:32:05 +00:00
Add function to copy a buffer into a segment
This commit is contained in:
parent
4f35826791
commit
90d6c637c5
@ -54,6 +54,7 @@ struct vm_segment {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern int vm_segment_copy(vm_segment *, vm_segment *, size_t, size_t, size_t);
|
extern int vm_segment_copy(vm_segment *, vm_segment *, size_t, size_t, size_t);
|
||||||
|
extern int vm_segment_copy_buf(vm_segment *, const vm_8bit *, size_t, size_t, size_t);
|
||||||
extern int vm_segment_fread(vm_segment *, FILE *, size_t, size_t);
|
extern int vm_segment_fread(vm_segment *, FILE *, size_t, size_t);
|
||||||
extern int vm_segment_read_map(vm_segment *, size_t, vm_segment_read_fn);
|
extern int vm_segment_read_map(vm_segment *, size_t, vm_segment_read_fn);
|
||||||
extern int vm_segment_set(vm_segment *, size_t, vm_8bit);
|
extern int vm_segment_set(vm_segment *, size_t, vm_8bit);
|
||||||
|
@ -186,6 +186,33 @@ vm_segment_copy(vm_segment *dest,
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy the contents of buf into the given dest segment. This is mostly
|
||||||
|
* governed by the same restrictions that copy() has, except that we
|
||||||
|
* can't do all of the bounds-checking we do there. This is just saying,
|
||||||
|
* hey, I have a bunch of bytes and I just need this copied into a
|
||||||
|
* segment, if you don't mind.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vm_segment_copy_buf(vm_segment *dest, const vm_8bit *src,
|
||||||
|
size_t destoff, size_t srcoff, size_t len)
|
||||||
|
{
|
||||||
|
if (destoff + len > dest->size) {
|
||||||
|
log_critical("Attempt to copy buffer out of bounds (%d + %d >= %d)",
|
||||||
|
destoff, len, dest->size);
|
||||||
|
return ERR_OOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Heh heh...there's no way of knowing if srcoff + len is out of
|
||||||
|
// bounds at any point of src, since it's just a dumb buffer. Here's
|
||||||
|
// hopin' it's not! Also, it'll be a fun day when sizeof(vm_8bit) is
|
||||||
|
// not 1, BUT HEY. Let's do it right.
|
||||||
|
memcpy(dest->memory + destoff, src + srcoff,
|
||||||
|
len * sizeof(vm_8bit));
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the read mapper for a given address. We'll use this function
|
* Set the read mapper for a given address. We'll use this function
|
||||||
* instead of the normal logic on a get for that address.
|
* instead of the normal logic on a get for that address.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user