diff options
author | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2006-08-05 12:04:27 +0000 |
---|---|---|
committer | Jose Antonio Ortega Ruiz <jao@gnu.org> | 2006-08-05 12:04:27 +0000 |
commit | 0fc982e4a8e2ef78bd46122a08fb630bc684a56d (patch) | |
tree | b5fc54a6fe6b3b084b286f367118a458c9aecbde | |
parent | 78e6fdc61d1fdba84fd47611414cd2dd5b76a298 (diff) | |
download | mdk-0fc982e4a8e2ef78bd46122a08fb630bc684a56d.tar.gz mdk-0fc982e4a8e2ef78bd46122a08fb630bc684a56d.tar.bz2 |
Bug fix: mixvm's smem correctly handles negative zero
git-archimport-id: mdk@sv.gnu.org/mdk--devel--1--patch-11
-rw-r--r-- | mixlib/xmix_vm_handlers.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/mixlib/xmix_vm_handlers.c b/mixlib/xmix_vm_handlers.c index 5fcd209..4ebfc77 100644 --- a/mixlib/xmix_vm_handlers.c +++ b/mixlib/xmix_vm_handlers.c @@ -663,6 +663,7 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg) glong value = 0; int k = 0; gchar *arg = NULL; + mix_word_t wval; if (ok) { @@ -679,6 +680,12 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg) { while (isspace (arg[k])) k++; value = atol (arg + k); + + if ((value == 0) && (arg[k] == '-')) + wval = MIX_WORD_MINUS_ZERO; + else + wval = mix_word_new (value); + if ( arg[k] == '+' || arg[k] == '-' ) k++; while (isdigit (arg[k])) k++; ok = arg[k] == '\0'; @@ -686,12 +693,14 @@ cmd_smem_ (mix_vm_cmd_dispatcher_t *dis, const gchar *carg) } if (ok) - mix_vm_set_addr_contents (dis->vm, mix_short_new (addr), - mix_word_new (value)); + { + mix_vm_set_addr_contents (dis->vm, mix_short_new (addr), wval); + } else { log_error_ (dis, _("Invalid argument: %s"), arg); } + if (arg) g_free (arg); return ok; |