Compare commits

...

7 Commits

8 changed files with 65 additions and 35 deletions

View File

@ -4,7 +4,7 @@ MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules MAKEFLAGS += --no-builtin-rules
VERSION_CODE := 17 VERSION_CODE := 17
VERSION_NUMBER := 0.0.17-wip VERSION_NUMBER := 0.0.17
VERSION_NAME := Please enjoy responsibly. VERSION_NAME := Please enjoy responsibly.
SQLITE_URL := https://www.sqlite.org/2024/sqlite-amalgamation-3450200.zip SQLITE_URL := https://www.sqlite.org/2024/sqlite-amalgamation-3450200.zip
@ -17,18 +17,6 @@ UNAME_M := $(shell uname -m)
ANDROID_SDK ?= ~/Android/Sdk ANDROID_SDK ?= ~/Android/Sdk
ifeq ($(UNAME_M),x86_64)
ifneq ($(UNAME_S),Haiku)
debug: CFLAGS += -fsanitize=address -fsanitize=undefined -fno-common
debug: LDFLAGS += -fsanitize=address -fsanitize=undefined
endif
endif
ifeq ($(UNAME_M),aarch64)
debug: CFLAGS += -fsanitize=address -fsanitize=undefined -fno-common
debug: LDFLAGS += -fsanitize=address -fsanitize=undefined
endif
ifeq ($(UNAME_S),Darwin) ifeq ($(UNAME_S),Darwin)
BUILD_TYPES := macosdebug macosrelease iosdebug iosrelease iossimdebug iossimrelease BUILD_TYPES := macosdebug macosrelease iosdebug iosrelease iossimdebug iossimrelease
else ifeq ($(UNAME_S),Linux) else ifeq ($(UNAME_S),Linux)
@ -222,6 +210,18 @@ $(IOS_TARGETS): LDFLAGS += -Ldeps/openssl/ios/ios64-xcrun/usr/local/lib
$(IOSSIM_TARGETS): CFLAGS += -Ideps/openssl/ios/iossimulator-xcrun/usr/local/include $(IOSSIM_TARGETS): CFLAGS += -Ideps/openssl/ios/iossimulator-xcrun/usr/local/include
$(IOSSIM_TARGETS): LDFLAGS += -Ldeps/openssl/ios/iossimulator-xcrun/usr/local/lib $(IOSSIM_TARGETS): LDFLAGS += -Ldeps/openssl/ios/iossimulator-xcrun/usr/local/lib
ifeq ($(UNAME_M),x86_64)
ifneq ($(UNAME_S),Haiku)
out/debug/tildefriends: CFLAGS += -fsanitize=address -fsanitize=undefined -fno-common
out/debug/tildefriends: LDFLAGS += -fsanitize=address -fsanitize=undefined
endif
endif
ifeq ($(UNAME_M),aarch64)
out/debug/tildefriends: CFLAGS += -fsanitize=address -fsanitize=undefined -fno-common
out/debug/tildefriends: LDFLAGS += -fsanitize=address -fsanitize=undefined
endif
get_objs = \ get_objs = \
$(foreach build_type,$(BUILD_TYPES),$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)))))) \ $(foreach build_type,$(BUILD_TYPES),$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)))))) \
$(foreach build_type,debug release,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_unix))))) \ $(foreach build_type,debug release,$(addprefix $(BUILD_DIR)/$(build_type)/,$(addsuffix .o,$(basename $(value $(1)_unix))))) \
@ -578,7 +578,7 @@ $(MINIUNZIP_OBJS): CFLAGS += \
LDFLAGS += \ LDFLAGS += \
-pthread \ -pthread \
-lm -lm
debug release $(MACOS_TARGETS) $(IOS_TARGETS) $(IOSSIM_TARGETS): LDFLAGS += \ $(LINUX_TARGETS) $(MACOS_TARGETS) $(IOS_TARGETS) $(IOSSIM_TARGETS): LDFLAGS += \
-lssl \ -lssl \
-lcrypto -lcrypto
ifneq ($(UNAME_S),Haiku) ifneq ($(UNAME_S),Haiku)
@ -728,7 +728,7 @@ out/apk/TildeFriends-arm-%.unsigned.apk:
@cp out/apk/res.apk $@.zip @cp out/apk/res.apk $@.zip
@cp out/apk/classes.dex out/apk-arm-$(BUILD_TYPE)/ @cp out/apk/classes.dex out/apk-arm-$(BUILD_TYPE)/
@cd out/apk-arm-$(BUILD_TYPE) && zip -u ../../$@.zip -q -9 -r . && cd ../../ @cd out/apk-arm-$(BUILD_TYPE) && zip -u ../../$@.zip -q -9 -r . && cd ../../
@zip -u $@.zip -q $(RAW_FILES) @zip -u $@.zip -q -9 $(RAW_FILES)
@$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $@.zip $@ @$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $@.zip $@
out/apk/TildeFriends-x86-%.unsigned.apk: out/apk/TildeFriends-x86-%.unsigned.apk:
@ -741,7 +741,7 @@ out/apk/TildeFriends-x86-%.unsigned.apk:
@cp out/apk/res.apk $@.zip @cp out/apk/res.apk $@.zip
@cp out/apk/classes.dex out/apk-x86-$(BUILD_TYPE)/ @cp out/apk/classes.dex out/apk-x86-$(BUILD_TYPE)/
@cd out/apk-x86-$(BUILD_TYPE) && zip -u ../../$@.zip -q -9 -r . && cd ../../ @cd out/apk-x86-$(BUILD_TYPE) && zip -u ../../$@.zip -q -9 -r . && cd ../../
@zip -u $@.zip -q $(RAW_FILES) @zip -u $@.zip -q -9 $(RAW_FILES)
@$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $@.zip $@ @$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $@.zip $@
out/%.apk: out/apk/%.unsigned.apk out/%.apk: out/apk/%.unsigned.apk
@ -769,10 +769,10 @@ out/%.app/tildefriends.png: src/ios/tildefriends.png
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
@cp -v $< $@ @cp -v $< $@
out/%/data.zip: $(RAW_FILES) out/data.zip: $(RAW_FILES)
@zip -u $@ -q -9 $(RAW_FILES) @zip -u $@ -q -9 $(RAW_FILES)
out/tildefriends-%.app/tildefriends: out/%/tildefriends out/tildefriends-%.app/Info.plist out/tildefriends-%.app/tildefriends.png out/tildefriends-%.app/data.zip out/tildefriends-%.app/tildefriends: out/%/tildefriends out/tildefriends-%.app/Info.plist out/tildefriends-%.app/tildefriends.png out/data.zip
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
@cp -v $< $@ @cp -v $< $@
ifeq ($(HAVE_LINUX_IOS),1) ifeq ($(HAVE_LINUX_IOS),1)
@ -787,6 +787,12 @@ out/tildefriends-%.ipa: out/tildefriends-ios%.app/tildefriends
@cd $@.tmp/ && zip -u ../../$@ -q -9 -r ./ @cd $@.tmp/ && zip -u ../../$@ -q -9 -r ./
@rm -rf $@.tmp/ @rm -rf $@.tmp/
out/%/tildefriends.standalone: out/%/tildefriends out/data.zip
@echo "[standalone] $@"
@cat $< out/data.zip > $@
@chmod +x $@
iossimdebug-app: out/tildefriends-iossimdebug.app/tildefriends iossimdebug-app: out/tildefriends-iossimdebug.app/tildefriends
iossimrelease-app: out/tildefriends-iossimrelease.app/tildefriends iossimrelease-app: out/tildefriends-iossimrelease.app/tildefriends
iosdebug-app: out/tildefriends-iosdebug.app/tildefriends iosdebug-app: out/tildefriends-iosdebug.app/tildefriends
@ -851,7 +857,7 @@ dist: release-apk iosrelease-ipa
@echo [archive] dist/tildefriends-$(VERSION_NUMBER).tar.xz @echo [archive] dist/tildefriends-$(VERSION_NUMBER).tar.xz
@rm -rf out/tildefriends-$(VERSION_NUMBER) @rm -rf out/tildefriends-$(VERSION_NUMBER)
@mkdir -p dist/ out/tildefriends-$(VERSION_NUMBER) @mkdir -p dist/ out/tildefriends-$(VERSION_NUMBER)
@git archive main | tar -x -C out/tildefriends-$(VERSION_NUMBER) @git archive HEAD | tar -x -C out/tildefriends-$(VERSION_NUMBER)
@tar \ @tar \
--exclude=apps/welcome* \ --exclude=apps/welcome* \
--exclude=deps/libbacktrace/Isaac.Newton-Opticks.txt \ --exclude=deps/libbacktrace/Isaac.Newton-Opticks.txt \

Binary file not shown.

View File

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unprompted.tildefriends" package="com.unprompted.tildefriends"
android:versionCode="17" android:versionCode="17"
android:versionName="0.0.17-wip"> android:versionName="0.0.17">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="34"/> <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="34"/>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<application <application

View File

@ -316,7 +316,9 @@ static void _file_read_file_zip_after_work(uv_work_t* work, int status)
tf_trace_begin(trace, "file_read_zip_after_work"); tf_trace_begin(trace, "file_read_zip_after_work");
if (data->result >= 0) if (data->result >= 0)
{ {
tf_task_resolve_promise(data->task, data->promise, tf_util_new_uint8_array(data->context, data->buffer, data->result)); JSValue array = tf_util_new_uint8_array(data->context, data->buffer, data->result);
tf_task_resolve_promise(data->task, data->promise, array);
JS_FreeValue(data->context, array);
} }
else else
{ {

View File

@ -161,10 +161,11 @@ static void _http_request_destroy(tf_http_request_t* request)
tf_http_close_callback* on_close = request->on_close; tf_http_close_callback* on_close = request->on_close;
if (on_close) if (on_close)
{ {
tf_trace_t* trace = request->http->trace;
request->on_close = NULL; request->on_close = NULL;
tf_trace_begin(request->http->trace, request->connection && request->connection->trace_name ? request->connection->trace_name : "websocket"); tf_trace_begin(trace, request->connection && request->connection->trace_name ? request->connection->trace_name : "websocket");
on_close(request); on_close(request);
tf_trace_end(request->http->trace); tf_trace_end(trace);
} }
} }
@ -174,12 +175,9 @@ static void _http_connection_destroy(tf_http_connection_t* connection, const cha
if (connection->request) if (connection->request)
{ {
_http_request_destroy(connection->request); tf_http_request_t* request = connection->request;
if (connection->request && connection->request->ref_count == 0)
{
tf_free(connection->request);
}
connection->request = NULL; connection->request = NULL;
_http_request_destroy(request);
} }
if (connection->tcp.data && !uv_is_closing((uv_handle_t*)&connection->tcp)) if (connection->tcp.data && !uv_is_closing((uv_handle_t*)&connection->tcp))
@ -383,11 +381,19 @@ static void _http_add_body_bytes(tf_http_connection_t* connection, const void* d
}; };
connection->request = request; connection->request = request;
tf_http_request_ref(request); if (!connection->http->is_shutting_down)
tf_trace_begin(connection->http->trace, connection->trace_name ? connection->trace_name : "http"); {
connection->callback(request); tf_http_request_ref(request);
tf_trace_end(connection->http->trace); tf_trace_begin(connection->http->trace, connection->trace_name ? connection->trace_name : "http");
tf_http_request_unref(request); connection->callback(request);
tf_trace_end(connection->http->trace);
tf_http_request_unref(request);
}
else
{
const char* k_payload = tf_http_status_text(503);
tf_http_respond(request, 503, NULL, 0, k_payload, strlen(k_payload));
}
} }
} }
} }
@ -786,6 +792,8 @@ const char* tf_http_status_text(int status)
return "File not found"; return "File not found";
case 500: case 500:
return "Internal server error"; return "Internal server error";
case 503:
return "Service Unavailable";
default: default:
return "Unknown"; return "Unknown";
} }
@ -965,11 +973,11 @@ void tf_http_request_unref(tf_http_request_t* request)
tf_http_connection_t* connection = request->connection; tf_http_connection_t* connection = request->connection;
if (--request->ref_count == 0) if (--request->ref_count == 0)
{ {
_http_request_destroy(request);
if (connection) if (connection)
{ {
connection->request = NULL; connection->request = NULL;
} }
_http_request_destroy(request);
tf_free(request); tf_free(request);
} }

View File

@ -11,6 +11,7 @@
#include "backtrace.h" #include "backtrace.h"
#include "sqlite3.h" #include "sqlite3.h"
#include "unzip.h"
#include <getopt.h> #include <getopt.h>
#include <stdlib.h> #include <stdlib.h>
@ -416,6 +417,14 @@ static int _tf_command_run(const char* file, int argc, char* argv[])
}; };
bool show_usage = false; bool show_usage = false;
/* Check if the executable has data attached. */
unzFile zip = unzOpen(file);
if (zip)
{
args.zip = file;
unzClose(zip);
}
while (!show_usage) while (!show_usage)
{ {
static const struct option k_options[] = { static const struct option k_options[] = {

View File

@ -1939,6 +1939,11 @@ void tf_task_destroy(tf_task_t* task)
tf_free(task->_promise_stacks); tf_free(task->_promise_stacks);
tf_free((void*)task->_path); tf_free((void*)task->_path);
bool was_trusted = task->_trusted; bool was_trusted = task->_trusted;
if (task->_zip)
{
unzClose(task->_zip);
task->_zip = NULL;
}
tf_free(task); tf_free(task);
if (was_trusted) if (was_trusted)
{ {

View File

@ -1,2 +1,2 @@
#define VERSION_NUMBER "0.0.17-wip" #define VERSION_NUMBER "0.0.17"
#define VERSION_NAME "Please enjoy responsibly." #define VERSION_NAME "Please enjoy responsibly."