aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emcc.c49
-rw-r--r--emccpre.js3
2 files changed, 6 insertions, 46 deletions
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("."));