Buckets:
| /** | |
| * @license | |
| * Copyright 2013 The Emscripten Authors | |
| * SPDX-License-Identifier: MIT | |
| * | |
| * This file gets implicitly injected as a `--post-js` file when | |
| * emcc is run with `--emrun` | |
| */ | |
| // POSTs the given binary data represented as a (typed) array data back to the | |
| // emrun-based web server. | |
| // To use from C code, call e.g: | |
| // EM_ASM({emrun_file_dump("file.dat", HEAPU8.subarray($0, $0 + $1));}, my_data_pointer, my_data_pointer_byte_length); | |
| // Note: this functions does nothing by default but gets redefined below | |
| // in `emrun_register_handlers` when emrun is active, along with `out` and | |
| // `err`. | |
| var emrun_file_dump = (filename, data) => {}; | |
| if (globalThis.window && globalThis.document && (typeof ENVIRONMENT_IS_PTHREAD == 'undefined' || !ENVIRONMENT_IS_PTHREAD)) { | |
| var emrun_register_handlers = () => { | |
| // When C code exit()s, we may still have remaining stdout and stderr | |
| // messages in flight. In that case, we can't close the browser until all | |
| // those XHRs have finished, so the following state variables track that all | |
| // communication is done, after which we can close. | |
| var emrun_num_post_messages_in_flight = 0; | |
| var emrun_should_close_itself = false; | |
| var postExit = (msg) => { | |
| var http = new XMLHttpRequest(); | |
| // Don't do this immediately, this may race with the notification about | |
| // the return code reaching the server. Send a *sync* xhr so that we know | |
| // for sure that the server has gotten the return code before we continue. | |
| http.open("POST", "stdio.html", false); | |
| http.send(msg); | |
| try { | |
| // Try closing the current browser window, since it exit()ed itself. | |
| // This can shut down the browser process and then emrun does not need | |
| // to kill the whole browser process. | |
| window.close(); | |
| } catch(e) {} | |
| }; | |
| var post = (url, msg) => { | |
| var http = new XMLHttpRequest(); | |
| ++emrun_num_post_messages_in_flight; | |
| http.onreadystatechange = () => { | |
| if (http.readyState == 4 /*DONE*/) { | |
| if (--emrun_num_post_messages_in_flight == 0 && emrun_should_close_itself) { | |
| postExit('^exit^'+EXITSTATUS); | |
| } | |
| } | |
| } | |
| http.open("POST", url, true); | |
| http.send(msg); | |
| }; | |
| // If the address contains localhost, or we are running the page from port | |
| // 6931, we can assume we're running the test runner and should post stdout | |
| // logs. | |
| if (document.URL.search("localhost") != -1 || document.URL.search(":6931/") != -1) { | |
| var emrun_http_sequence_number = 1; | |
| var prevPrint = out; | |
| var prevErr = err; | |
| addOnExit(() => { | |
| if (emrun_num_post_messages_in_flight == 0) { | |
| postExit('^exit^'+EXITSTATUS); | |
| } else { | |
| emrun_should_close_itself = true; | |
| } | |
| }); | |
| out = (text) => { | |
| post('stdio.html', '^out^'+(emrun_http_sequence_number++)+'^'+encodeURIComponent(text)); | |
| prevPrint(text); | |
| }; | |
| err = (text) => { | |
| post('stdio.html', '^err^'+(emrun_http_sequence_number++)+'^'+encodeURIComponent(text)); | |
| prevErr(text); | |
| }; | |
| emrun_file_dump = (filename, data) => { | |
| out(`Dumping out file "${filename}" with ${data.length} bytes of data.`); | |
| if (ArrayBuffer.isView(data) && typeof SharedArrayBuffer !== "undefined" && data.buffer instanceof SharedArrayBuffer) { | |
| data = new data.constructor(data); // Make a clone of the typed array of the same type, since http.send() does not allow SharedArrayBuffer backing. | |
| } | |
| post("stdio.html?file=" + filename, data); | |
| }; | |
| // Notify emrun web server that this browser has successfully launched the | |
| // page. Note that we may need to wait for the server to be ready. | |
| var tryToSendPageload = () => { | |
| try { | |
| post('stdio.html', '^pageload^'); | |
| } catch (e) { | |
| setTimeout(tryToSendPageload, 50); | |
| } | |
| }; | |
| tryToSendPageload(); | |
| } | |
| }; | |
| emrun_register_handlers(); | |
| } | |
Xet Storage Details
- Size:
- 4.02 kB
- Xet hash:
- 000ef2ee64258b82cf8b6dee83cfe7f928c677d25014d7bc633f42ff70478178
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.