static int __read(RIO *io, RIODesc *fd, ut8 *buf, int count) { RIOBfdbg *riom; int sz; if (!fd || !fd->data) { return -1; } riom = fd->data; /* data base buffer */ if (is_in_base (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->base; if (n > count) { count = n; } memcpy (buf, riom->bfvm->mem+n, count); return count; } /* screen buffer */ if (is_in_screen (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->screen; if (n > count) { count = riom->bfvm->screen_size - n; } memcpy (buf, riom->bfvm->screen_buf+n, count); return count; } /* input buffer */ if (is_in_input (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->input; if (n > count) { count = riom->bfvm->input_size - n; } memcpy (buf, riom->bfvm->input_buf+n, count); return count; } /* read from file */ sz = RIOBFDBG_SZ (fd); if (io->off + count >= sz) { count = sz - io->off; } if (io->off >= sz) { return -1; } memcpy (buf, RIOBFDBG_BUF (fd)+io->off, count); return count; }
static int __write(RIO *io, RIODesc *fd, const ut8 *buf, int count) { RIOBfdbg *riom; int sz; if (fd == NULL || fd->data == NULL) return -1; riom = fd->data; /* data base buffer */ if (is_in_base (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->base; if (n>count) count = n; memcpy (riom->bfvm->mem+n, buf, count); return count; } /* screen buffer */ if (is_in_screen (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->screen; if (n>count) count = riom->bfvm->screen_size-n; memcpy (riom->bfvm->screen_buf+n, buf, count); return count; } /* input buffer */ if (is_in_input (io->off, riom->bfvm)) { int n = io->off-riom->bfvm->input; if (n>count) count = riom->bfvm->input_size-n; memcpy (riom->bfvm->input_buf+n, buf, count); return count; } /* read from file */ sz = RIOBFDBG_SZ (fd); if (io->off+count >= sz) count = sz-io->off; if (io->off >= sz) return -1; memcpy (RIOBFDBG_BUF (fd)+io->off, buf, count); return count; }