Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/library_fetch.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@ var LibraryFetch = {
$Fetch__postset: 'Fetch.staticInit();',
#endif
$Fetch: Fetch,
_emscripten_fetch_get_response_headers_length__sig: 'pi',
_emscripten_fetch_get_response_headers_length: fetchGetResponseHeadersLength,
_emscripten_fetch_get_response_headers__sig: 'pipp',
_emscripten_fetch_get_response_headers: fetchGetResponseHeaders,
_emscripten_fetch_free: fetchFree,

Expand All @@ -26,7 +24,6 @@ var LibraryFetch = {
#endif
$fetchXHR: fetchXHR,

emscripten_start_fetch__sig: 'vp',
emscripten_start_fetch: startFetch,
emscripten_start_fetch__deps: [
'$Fetch',
Expand Down
4 changes: 4 additions & 0 deletions src/library_sigs.js
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ sigs = {
_emscripten_dbg__sig: 'vp',
_emscripten_dlopen_js__sig: 'vpppp',
_emscripten_err__sig: 'vp',
_emscripten_fetch_free__sig: 'vi',
_emscripten_fetch_get_response_headers__sig: 'pipp',
_emscripten_fetch_get_response_headers_length__sig: 'pi',
_emscripten_fs_load_embedded_files__sig: 'vp',
_emscripten_get_now_is_monotonic__sig: 'i',
_emscripten_get_progname__sig: 'vpi',
Expand Down Expand Up @@ -601,6 +604,7 @@ sigs = {
emscripten_sleep__sig: 'vi',
emscripten_stack_snapshot__sig: 'p',
emscripten_stack_unwind_buffer__sig: 'ippi',
emscripten_start_fetch__sig: 'vp',
emscripten_supports_offscreencanvas__sig: 'i',
emscripten_throw_number__sig: 'vd',
emscripten_throw_string__sig: 'vp',
Expand Down
6 changes: 4 additions & 2 deletions src/utility.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,10 @@ function mergeInto(obj, other, options = null) {
if (obj.hasOwnProperty(key)) {
const oldsig = obj[key];
const newsig = other[key];
if (oldsig != newsig) {
error(`Signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
if (oldsig == newsig) {
warn(`signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
} else {
error(`signature redefinition for: ${key}. (old=${oldsig} vs new=${newsig})`);
}
}
}
Expand Down
8 changes: 2 additions & 6 deletions system/lib/fetch/emscripten_fetch.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include <emscripten/threading.h>
#include <emscripten/console.h>

#include "emscripten_internal.h"

// From https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState
#define STATE_UNSENT 0 // Client has been created. open() not called yet.
#define STATE_OPENED 1 // open() has been called.
Expand All @@ -31,12 +33,6 @@

static void fetch_free(emscripten_fetch_t* fetch);

// APIs defined in JS
void emscripten_start_fetch(emscripten_fetch_t* fetch);
size_t _emscripten_fetch_get_response_headers_length(int32_t fetchID);
size_t _emscripten_fetch_get_response_headers(int32_t fetchID, char *dst, size_t dstSizeBytes);
void _emscripten_fetch_free(unsigned int);

typedef struct emscripten_fetch_queue {
emscripten_fetch_t** queuedOperations;
int numQueuedItems;
Expand Down
7 changes: 7 additions & 0 deletions system/lib/libc/emscripten_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,13 @@ void _emscripten_throw_longjmp(void);

void __handle_stack_overflow(void* addr);

// Internal fetch API
struct emscripten_fetch_t;
void emscripten_start_fetch(struct emscripten_fetch_t* fetch);
size_t _emscripten_fetch_get_response_headers_length(int32_t fetchID);
size_t _emscripten_fetch_get_response_headers(int32_t fetchID, char *dst, size_t dstSizeBytes);
void _emscripten_fetch_free(unsigned int);

#ifdef __cplusplus
}
#endif
19 changes: 14 additions & 5 deletions test/test_other.py
Original file line number Diff line number Diff line change
Expand Up @@ -3849,18 +3849,17 @@ def test_js_internal_deps(self):
err = self.run_process([EMCC, 'src.c', '--js-library', 'lib.js'], stderr=PIPE).stderr
self.assertContained("warning: user library symbol 'jslibfunc' depends on internal symbol '$callRuntimeCallbacks'", err)

def test_js_lib_sig_mismatch(self):
def test_js_lib_sig_redefinition(self):
create_file('lib.js', r'''
mergeInto(LibraryManager.library, {
jslibfunc__sig: 'ii',
jslibfunc: function(x) {},
});

mergeInto(LibraryManager.library, {
jslibfunc__sig: 'dd',
jslibfunc__sig: 'ii',
jslibfunc: function(x) {},
});

''')
create_file('src.c', r'''
#include <stdio.h>
Expand All @@ -3869,8 +3868,18 @@ def test_js_lib_sig_mismatch(self):
printf("c calling: %d\n", jslibfunc());
}
''')
err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js'])
self.assertContained('lib.js: Signature redefinition for: jslibfunc__sig. (old=ii vs new=dd)', err)
err = self.run_process([EMCC, 'src.c', '--js-library', 'lib.js'], stderr=PIPE).stderr
self.assertContained('lib.js: signature redefinition for: jslibfunc__sig. (old=ii vs new=ii)', err)

# Add another redefinition, this time not matching
create_file('lib2.js', r'''
mergeInto(LibraryManager.library, {
jslibfunc__sig: 'pp',
jslibfunc: function(x) {},
});
''')
err = self.expect_fail([EMCC, 'src.c', '--js-library', 'lib.js', '--js-library', 'lib2.js'])
self.assertContained('lib2.js: signature redefinition for: jslibfunc__sig. (old=ii vs new=pp)', err)

def test_js_lib_invalid_deps(self):
create_file('lib.js', r'''
Expand Down
9 changes: 7 additions & 2 deletions tools/gen_sig_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <emscripten/html5.h>
#include <emscripten/fiber.h>
#include <emscripten/websocket.h>
#include <emscripten/fetch.h>
#include <emscripten/webaudio.h>
#include <wasi/api.h>

Expand Down Expand Up @@ -228,12 +229,16 @@ def extract_sig_info(sig_info, extra_settings=None, extra_cflags=None):
'STACK_OVERFLOW_CHECK': 1,
'FULL_ES3': 1,
'USE_SDL': 1,
'FETCH': 1,
# Currently GLFW symbols have different sigs for the same symbol because the
# signatures changed between v2 and v3, so for now we continue to maintain
# them by hand.
'USE_GLFW': 0,
'JS_LIBRARIES': ['src/library_websocket.js',
'src/library_webaudio.js'],
'JS_LIBRARIES': [
'src/library_websocket.js',
'src/library_webaudio.js',
'src/library_fetch.js'
],
'SUPPORT_LONGJMP': 'emscripten'
}
if extra_settings:
Expand Down
1 change: 1 addition & 0 deletions tools/system_libs.py
Original file line number Diff line number Diff line change
Expand Up @@ -1743,6 +1743,7 @@ def get_default_variation(cls, **kwargs):
class libfetch(MTLibrary):
name = 'libfetch'
never_force = True
includes = ['system/lib/libc']

def get_files(self):
return [utils.path_from_root('system/lib/fetch/emscripten_fetch.c')]
Expand Down