mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-07 10:33:30 +00:00
* Apply patchsets from Glyn Kennington (Thanks!)
- Added new method r_io_shift (start, end, move) - Added 'r' command (like in r1) - Fix parallel builds with -j>1
This commit is contained in:
parent
7e22c00602
commit
ad027ba004
11
AUTHORS
11
AUTHORS
@ -1,12 +1,15 @@
|
||||
Main developers aka /dev/radare
|
||||
|
||||
Main developers:
|
||||
================
|
||||
- pancake <nopcode.org>
|
||||
- nibble.ds <gmail.com>
|
||||
- earada @earada
|
||||
|
||||
Contributors
|
||||
- earada
|
||||
Contributors: (sorted by length)
|
||||
================================
|
||||
- esteve <estlack.org>
|
||||
- Glyn Kennington
|
||||
- elektranox
|
||||
- neuroflip
|
||||
- rvalles
|
||||
- graz
|
||||
- pof
|
||||
|
@ -1393,6 +1393,7 @@ static int cmd_help(void *data, const char *input) {
|
||||
" w[mode] [arg] ; multiple write operations\n"
|
||||
" x [len] ; alias for 'px' (print hexadecimal)\n"
|
||||
" y [len] [off] ; yank/paste bytes from/to memory\n"
|
||||
" r[+- ][len] ; resize file\n"
|
||||
" ? [expr] ; help or evaluate math expression\n"
|
||||
" /[xmp/] ; search for bytes, regexps, patterns, ..\n"
|
||||
" ![cmd] ; run given command as in system(3)\n"
|
||||
@ -2749,6 +2750,55 @@ static int cmd_write(void *data, const char *input) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_resize(void *data, const char *input) {
|
||||
RCore *core = (RCore *)data;
|
||||
st64 delta=0;
|
||||
int grow;
|
||||
ut64 oldsize,newsize;
|
||||
|
||||
oldsize = core->file->size;
|
||||
|
||||
switch (input[0]) {
|
||||
case ' ':
|
||||
newsize = r_num_math(core->num, input+1);
|
||||
break;
|
||||
case '+':
|
||||
case '-':
|
||||
delta = (st64)r_num_math(NULL, input);
|
||||
newsize = oldsize + delta;
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
r_cons_printf (
|
||||
"Usage: r[ size|+insert|-remove]\n"
|
||||
" r size set filesize to size, extending or truncating\n"
|
||||
" r-num remove num bytes, move following data down\n"
|
||||
" r+num insert num bytes, move following data up\n");
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
grow = (newsize > oldsize);
|
||||
|
||||
if (grow) {
|
||||
r_io_resize (core->io, newsize);
|
||||
core->file->size = newsize;
|
||||
}
|
||||
|
||||
if (delta && core->offset < newsize)
|
||||
r_io_shift (core->io, core->offset, grow?newsize:oldsize, delta);
|
||||
|
||||
if (!grow) {
|
||||
r_io_resize (core->io, newsize);
|
||||
core->file->size = newsize;
|
||||
}
|
||||
|
||||
if (newsize < core->offset+core->blocksize ||
|
||||
oldsize < core->offset+core->blocksize)
|
||||
r_core_block_read (core, 0);
|
||||
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
static const char *cmdhit = NULL;
|
||||
static const char *searchprefix = NULL;
|
||||
static int __cb_hit(RSearchKeyword *kw, void *user, ut64 addr) {
|
||||
@ -4316,6 +4366,7 @@ void r_core_cmd_init(RCore *core) {
|
||||
r_cmd_add (core->cmd, "Project", "project", &cmd_project);
|
||||
r_cmd_add (core->cmd, "open", "open or map file", &cmd_open);
|
||||
r_cmd_add (core->cmd, "yank", "yank bytes", &cmd_yank);
|
||||
r_cmd_add (core->cmd, "resize", "change file size", &cmd_resize);
|
||||
r_cmd_add (core->cmd, "Visual", "enter visual mode", &cmd_visual);
|
||||
r_cmd_add (core->cmd, "!", "run system command", &cmd_system);
|
||||
r_cmd_add (core->cmd, "=", "io pipe", &cmd_rap);
|
||||
|
@ -86,6 +86,7 @@ static const char *radare_argv[] = {
|
||||
"f", "fr", "f-", "f*", "fs", "fS", "fr", "f?",
|
||||
"m", "m*", "ml", "m-", "my", "mg", "md", "mp", "m?",
|
||||
"x",
|
||||
"r", "r+", "r-",
|
||||
"b", "bf", "b?",
|
||||
"/", "//", "/a", "/c", "/m", "/x", "/v",
|
||||
"y", "yy", "y?",
|
||||
|
@ -36,9 +36,9 @@ CFLAGS+=-I../../../include
|
||||
#CFLAGS+=-fnested-functions
|
||||
BIN=test${EXT_EXE}
|
||||
|
||||
all: ${KERNOBJS} main.o ${BIN}
|
||||
all: ${BIN}
|
||||
|
||||
${BIN}:
|
||||
${BIN}: ${KERNOBJS} main.o
|
||||
${CC} -o ${BIN} main.o ${CFLAGS} ${KERNOBJS}
|
||||
|
||||
lib: all libgrubfs.a
|
||||
|
@ -201,6 +201,7 @@ R_API int r_io_close(RIO *io, RIODesc *fd);
|
||||
R_API ut64 r_io_size(RIO *io); //, int fd);
|
||||
R_API int r_io_resize(struct r_io_t *io, ut64 newsize);
|
||||
R_API int r_io_accept(RIO *io, int fd);
|
||||
R_API int r_io_shift(RIO *io, ut64 start, ut64 end, st64 move);
|
||||
|
||||
/* io/cache.c */
|
||||
R_API void r_io_cache_commit(RIO *io);
|
||||
|
33
libr/io/io.c
33
libr/io/io.c
@ -362,9 +362,34 @@ R_API int r_io_bind(RIO *io, RIOBind *bnd) {
|
||||
}
|
||||
|
||||
R_API int r_io_accept(RIO *io, int fd) {
|
||||
if (r_io_is_listener (io)) {
|
||||
if (io->plugin->accept)
|
||||
return io->plugin->accept (io, io->fd, fd);
|
||||
}
|
||||
if (r_io_is_listener (io) && (io->plugin->accept))
|
||||
return io->plugin->accept (io, io->fd, fd);
|
||||
return R_FALSE;
|
||||
}
|
||||
|
||||
/* moves bytes up (+) or down (-) within the specified range */
|
||||
R_API int r_io_shift(RIO *io, ut64 start, ut64 end, st64 move) {
|
||||
ut8 *buf;
|
||||
ut64 chunksize=0x10000;
|
||||
ut64 rest, src, shiftsize = r_num_abs (move);
|
||||
if (!shiftsize || (end-start) <= shiftsize) return R_FALSE;
|
||||
rest = (end-start) - shiftsize;
|
||||
|
||||
if (!(buf = malloc (chunksize))) return R_FALSE;
|
||||
|
||||
if (move>0) src = end-shiftsize;
|
||||
else src = start+shiftsize;
|
||||
|
||||
while (rest>0) {
|
||||
if (chunksize>rest) chunksize=rest;
|
||||
if (move>0) src -= chunksize;
|
||||
|
||||
r_io_read_at (io, src, buf, chunksize);
|
||||
r_io_write_at (io, src+move, buf, chunksize);
|
||||
|
||||
if (move<0) src += chunksize;
|
||||
rest -= chunksize;
|
||||
}
|
||||
free (buf);
|
||||
return R_TRUE;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user