diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-26 07:12:47 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-06-26 07:12:47 -0700 |
| commit | 42e1f0cdb73fc5277375349e1149a1e8083e1bf8 (patch) | |
| tree | a588eaa7b378ccdbbef0832959776e49f0de78b3 | |
| parent | 8f5017e768b6cdc9b7ef824018561b9d300dfa5e (diff) | |
| parent | 568af5518710916ba5e71deefbae0abdd518a766 (diff) | |
| download | mruby-42e1f0cdb73fc5277375349e1149a1e8083e1bf8.tar.gz mruby-42e1f0cdb73fc5277375349e1149a1e8083e1bf8.zip | |
Merge pull request #325 from monaka/pr-refactor-hex_to_str
Refactor hex_to_str().
| -rw-r--r-- | src/load.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/load.c b/src/load.c index d3766da9d..eb9cd119c 100644 --- a/src/load.c +++ b/src/load.c @@ -608,13 +608,11 @@ static char* hex_to_str(char *hex, char *str, uint16_t *str_len) { char *src, *dst; - uint16_t hex_len = strlen(hex); + int escape = 0; *str_len = 0; - - for (src = hex, dst = str; hex_len > 0; (*str_len)++, hex_len--) { - if (*src == '\\' && hex_len > 1) { - src++; hex_len--; + for (src = hex, dst = str; *src != '\0'; src++) { + if (escape) { switch(*src) { case 'a': *dst++ = '\a'/* BEL */; break; case 'b': *dst++ = '\b'/* BS */; break; @@ -629,12 +627,18 @@ hex_to_str(char *hex, char *str, uint16_t *str_len) case '\\': *dst++ = *src; break; default:break; } - src++; + escape = 0; } else { - *dst++ = *src++; + if (*src == '\\') { + escape = 1; + } else { + escape = 0; + *dst++ = *src; + } + } + if (!escape) { + (*str_len)++; } } - return str; } - |
