Skip to content

Commit ba5fc1f

Browse files
committed
better but not yet
1 parent b00fd63 commit ba5fc1f

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

libr/core/cbin.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,9 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
202202
r_strbuf_appendf (s0, "f %s @ %s\n", k, v);
203203
} else if (IS_MODE_SET (mode)) {
204204
ut64 nv = r_num_math (core->num, v);
205-
r_flag_set (core->flags, k, nv, 0);
205+
if (!r_flag_get (core->flags, k)) {
206+
r_flag_set (core->flags, k, nv, 0);
207+
}
206208
}
207209
#endif
208210
free (offset);
@@ -283,14 +285,30 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
283285
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
284286
#else
285287
if (IS_MODE_RAD (mode)) {
286-
r_strbuf_appendf (s2, "fl %s %s\n", flagname, v);
288+
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
287289
} else if (IS_MODE_SET (mode)) {
288-
RFlagItem *fi = r_flag_get (core->flags, flagname);
290+
#if 0
291+
char *s = r_core_cmd_str ("k bin/cur/pe_overlay.size");
292+
free (s);
293+
#else
294+
RFlagItem *fi = r_flag_get (core->flags, k);
289295
if (fi) {
290296
fi->size = r_num_math (core->num, v);
291297
} else {
292-
R_LOG_ERROR ("Cannot find flag named '%s'", flagname);
298+
char *s = strdup (k);
299+
char *kk = r_str_replace (s, ".size", ".offset", 0);
300+
const char *addr = sdb_const_get (db, kk, 0);
301+
if (R_STR_ISEMPTY (addr)) {
302+
R_LOG_ERROR ("Cannot find flag named '%s'", k);
303+
} else {
304+
ut64 naddr = r_num_math (NULL, addr);
305+
ut64 size = r_num_math (NULL, v);
306+
r_flag_set (core->flags, k, naddr, size);
307+
// r_core_cmdf (core, "fl %s %s@%s", k, v, addr);
308+
}
309+
free (kk);
293310
}
311+
#endif
294312
}
295313
#endif
296314
}

libr/core/cmd_flag.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,10 +1141,14 @@ static int cmd_flag(void *data, const char *input) {
11411141
p = strchr (arg, ' ');
11421142
if (p) {
11431143
*p++ = 0;
1144-
item = r_flag_get_i (core->flags,
1145-
r_num_math (core->num, arg));
1146-
if (item)
1147-
item->size = r_num_math (core->num, p);
1144+
ut64 narg = r_num_math (core->num, arg);
1145+
item = r_flag_get_i (core->flags, narg);
1146+
ut64 nsize = r_num_math (core->num, p);
1147+
if (item) {
1148+
item->size = nsize;
1149+
} else {
1150+
r_flag_set (core->flags, arg, core->offset, nsize);
1151+
}
11481152
} else {
11491153
if (*arg) {
11501154
item = r_flag_get_i (core->flags, core->offset);

0 commit comments

Comments
 (0)