Revert "WASM: move save file encoding from JS into C."

Now that save files are (even more) officially ASCII, it's perfectly
safe to pass them to JavaScript as UTF-8 strings.

This means that the form in which save files are shipped from C to
JavaScript is the same is the form in which they're shipped from
JavaScript to C.  That allows for doing new things with them, like
writing them to local storage.

This reverts commit f729f51e475ff98d0caf529f0723ef810b1c88ef.
This commit is contained in:
Ben Harris
2022-10-21 00:25:34 +01:00
parent 12491021d0
commit 47905e9547
2 changed files with 6 additions and 46 deletions

49
emcc.c
View File

@ -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)

View File

@ -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("."));