diff --git a/emcc.c b/emcc.c index 5f21476..9f46c33 100644 --- a/emcc.c +++ b/emcc.c @@ -773,53 +773,12 @@ struct savefile_write_ctx { size_t pos; }; -static void savefile_write(void *vctx, const void *vbuf, int len) +static void savefile_write(void *vctx, const void *buf, int len) { - static const unsigned char length[256] = { - /* - * Assign a length of 1 to any printable ASCII character that - * can be written literally in URI-encoding, i.e. - * - * A-Z a-z 0-9 - _ . ! ~ * ' ( ) - * - * Assign length 3 (for % and two hex digits) to all other - * byte values. - */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 3, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - }; - static const char hexdigits[] = "0123456789ABCDEF"; - struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)vctx; - const unsigned char *buf = (const unsigned char *)vbuf; - for (int i = 0; i < len; i++) { - unsigned char c = buf[i]; - int clen = length[c]; - if (ctx->buffer) { - if (clen == 1) { - ctx->buffer[ctx->pos] = c; - } else { - ctx->buffer[ctx->pos] = '%'; - ctx->buffer[ctx->pos+1] = hexdigits[c >> 4]; - ctx->buffer[ctx->pos+2] = hexdigits[c & 0xF]; - } - } - ctx->pos += clen; - } + if (ctx->buffer) + memcpy(ctx->buffer + ctx->pos, buf, len); + ctx->pos += len; } char *get_save_file(void) diff --git a/emccpre.js b/emccpre.js index b4ab82d..aa2803e 100644 --- a/emccpre.js +++ b/emccpre.js @@ -363,7 +363,8 @@ function initPuzzle() { "Click to download the ")); var a = document.createElement("a"); a.download = "puzzle.sav"; - a.href = "data:application/octet-stream," + savefile_text; + a.href = "data:application/octet-stream," + + encodeURIComponent(savefile_text); a.appendChild(document.createTextNode("saved-game file")); dlg_form.appendChild(a); dlg_form.appendChild(document.createTextNode("."));