aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2022-09-11 23:14:54 +0200
committerJan200101 <sentrycraft123@gmail.com>2022-09-11 23:14:54 +0200
commiteadeb9f2a13577d6cd532b2a1bd306710136322a (patch)
treec8317cc0eb0ca7a9e017d92d9f7472e0966f92c0
parent37de0cc7b0eeeefcc25173913faaefa2a7673d2c (diff)
downloadOFQT-eadeb9f2a13577d6cd532b2a1bd306710136322a.tar.gz
OFQT-eadeb9f2a13577d6cd532b2a1bd306710136322a.zip
move over to official cmake packages, fix data race in qt frontend
-rw-r--r--cmake/FindJsonC.cmake63
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/mirror/main.c5
-rw-r--r--src/net.c2
-rw-r--r--src/net.h2
-rw-r--r--src/qt/mainwindow.cpp2
-rw-r--r--src/qt/workers.cpp75
-rw-r--r--src/qt/workers.hpp1
-rw-r--r--src/toast.c6
9 files changed, 38 insertions, 125 deletions
diff --git a/cmake/FindJsonC.cmake b/cmake/FindJsonC.cmake
deleted file mode 100644
index 1d4386b..0000000
--- a/cmake/FindJsonC.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# JSONC_INCLUDE_DIRS
-# JSONC_LIBRARIES
-# JSONC_CFLAGS
-
-find_package(PkgConfig QUIET)
-if (PKG_CONFIG_FOUND)
- pkg_check_modules(_JSONC json-c)
-
- if (BUILD_STATIC AND NOT _JSONC_FOUND)
- message(FATAL_ERROR "Cannot find static build information")
- endif()
-endif()
-
-if (_JSONC_FOUND) # we can rely on pkg-config
- if (NOT BUILD_STATIC)
- set(JSONC_LIBRARIES ${_JSONC_LIBRARIES})
- set(JSONC_INCLUDE_DIRS ${_JSONC_INCLUDE_DIRS})
- set(JSONC_CFLAGS ${_JSONC_CFLAGS_OTHER})
- else()
- set(JSONC_LIBRARIES ${_JSONC_STATIC_LIBRARIES})
- set(JSONC_INCLUDE_DIRS ${_JSONC_STATIC_INCLUDE_DIRS})
- set(JSONC_CFLAGS ${_JSONC_STATIC_CFLAGS_OTHER})
- endif()
-else()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(_lib_suffix 64)
- else()
- set(_lib_suffix 32)
- endif()
-
- find_path(JSONC_INC
- NAMES json.h
- HINTS
- ENV jsoncPath${_lib_suffix}
- ENV jsoncPath
- ${_JSONC_INCLUDE_DIRS}
- PATHS
- /usr/include/json-c /usr/local/include/json-c)
-
- find_library(JSONC_LIB
- NAMES ${_JSONC_LIBRARIES} jsonc json-c
- HINTS
- ENV jsoncPath${_lib_suffix}
- ENV jsoncPath
- ${_JSONC_LIBRARY_DIRS}
- ${_JSONC_STATIC_LIBRARY_DIRS}
- PATHS
- /usr/lib{_lib_suffix} /usr/local/lib{_lib_suffix}
- /usr/lib /usr/local/lib)
-
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(JsonC DEFAULT_MSG JSONC_LIB JSONC_INC)
- mark_as_advanced(JSONC_INC JSONC_LIB)
-
- if(JSONC_FOUND)
- set(JSONC_INCLUDE_DIRS ${JSONC_INC})
- set(JSONC_LIBRARIES ${JSONC_LIB})
- if (BUILD_STATIC)
- set(JSONC_LIBRARIES ${JSONC_LIBRARIES} ${_JSONC_STATIC_LIBRARIES})
- endif()
- endif()
-endif() \ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d993dba..0fdcce5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,6 @@
+find_package(json-c REQUIRED)
find_package(Libcurl REQUIRED)
-find_package(JsonC REQUIRED)
add_subdirectory(hash)
add_subdirectory(vdf)
add_subdirectory(threading)
@@ -14,7 +14,6 @@ set(CFLAGS
-Wmissing-declarations -Wmissing-include-dirs
-Wno-unused-parameter -Wuninitialized
${LIBCURL_CFLAGS}
- ${JSONC_CFLAGS}
)
list(APPEND
@@ -33,12 +32,12 @@ add_library(tvn STATIC ${CORE_SOURCES})
target_compile_options(tvn PUBLIC ${CFLAGS})
target_include_directories(tvn PUBLIC ${LIBCURL_INCLUDE_DIRS})
-target_include_directories(tvn PUBLIC ${JSONC_INCLUDE_DIRS})
target_include_directories(tvn PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(tvn LINK_PUBLIC ${LIBCURL_LIBRARIES})
-target_link_libraries(tvn LINK_PUBLIC ${JSONC_LIBRARIES})
+target_link_libraries(tvn LINK_PUBLIC json-c::json-c)
target_link_libraries(tvn LINK_PUBLIC md5)
target_link_libraries(tvn LINK_PUBLIC vdf)
+
if (WIN32)
target_link_libraries(tvn LINK_PUBLIC shlwapi)
endif()
diff --git a/src/mirror/main.c b/src/mirror/main.c
index 51ce98a..89a085d 100644
--- a/src/mirror/main.c
+++ b/src/mirror/main.c
@@ -152,14 +152,9 @@ int main(int argc, char** argv)
free(thread_info);
}
- char* buf = malloc(rev_len+1);
- sprintf(buf, "%i", latest_rev);
sprintf(revisions_dir_end, "%slatest", OS_PATH_SEP);
-
setLocalRevision(output_dir, latest_rev);
symlink(".." OS_PATH_SEP TOAST_LOCAL_REVISION_PATH, revisions_dir);
-
- free(buf);
free(revisions_dir);
cleanup:
diff --git a/src/net.c b/src/net.c
index 03b3990..ef661e2 100644
--- a/src/net.c
+++ b/src/net.c
@@ -4,7 +4,7 @@
#include <stdint.h>
#include <unistd.h>
#include <curl/curl.h>
-#include <json.h>
+#include <json-c/json.h>
#include "net.h"
#include "fs.h"
diff --git a/src/net.h b/src/net.h
index 098a8d7..5ad71f8 100644
--- a/src/net.h
+++ b/src/net.h
@@ -6,7 +6,7 @@ extern "C" {
#endif
#include <curl/curl.h>
-#include <json.h>
+#include <json-c/json.h>
struct MemoryStruct {
uint8_t* memory;
diff --git a/src/qt/mainwindow.cpp b/src/qt/mainwindow.cpp
index 12ddf3e..49cc09f 100644
--- a/src/qt/mainwindow.cpp
+++ b/src/qt/mainwindow.cpp
@@ -91,9 +91,11 @@ void MainWindow::workerResult(const enum Worker::Results_t& result)
break;
case Worker::RESULT_UPDATE_TEXT:
+ pthread_mutex_lock(&worker->textMutex);
ui->progressBar->setValue(worker->progress);
ui->infoLabel->setText(worker->infoText);
worker->infoText.clear();
+ pthread_mutex_unlock(&worker->textMutex);
break;
case Worker::RESULT_IS_INSTALLED:
diff --git a/src/qt/workers.cpp b/src/qt/workers.cpp
index 1642813..b0e18e8 100644
--- a/src/qt/workers.cpp
+++ b/src/qt/workers.cpp
@@ -47,15 +47,11 @@ static void* thread_download(void* pinfo)
QString* threadString = &info->infoText;
if (!threadString->isEmpty() && *do_work)
{
- pthread_mutex_lock(&worker->textMutex);
- // allow the main thread to clear the string before we continue
- while (!worker->infoText.isEmpty() && *do_work) {};
+ int progress = (int)(((info->index * 100) + 1) / rev->file_count);
+ if (progress > worker->progress)
+ worker->progress = progress;
- worker->progress = (int)(((info->index * 100) + 1) / rev->file_count);
-
- worker->infoText = *threadString;
- emit worker->resultReady(Worker::RESULT_UPDATE_TEXT);
- pthread_mutex_unlock(&worker->textMutex);
+ worker->setInfoText(*threadString);
}
}
return NULL;
@@ -104,6 +100,14 @@ QString Worker::getArguments()
return settings.value("launchArguments", QString()).toString();
}
+void Worker::setInfoText(QString infoTextArg)
+{
+ pthread_mutex_lock(&this->textMutex);
+ this->infoText = infoTextArg;
+ emit this->resultReady(Worker::RESULT_UPDATE_TEXT);
+ pthread_mutex_unlock(&this->textMutex);
+}
+
void Worker::setArguments(QString argumentstr)
{
settings.setValue("launchArguments", argumentstr);
@@ -141,7 +145,7 @@ int Worker::update_setup(int local_rev, int remote_rev)
if (rev)
{
- for (size_t i = 0; i < rev->file_count; ++i)
+ for (size_t i = 0; i < rev->file_count && do_work; ++i)
{
struct file_info* file = &rev->files[i];
@@ -160,7 +164,7 @@ int Worker::update_setup(int local_rev, int remote_rev)
struct pool_t* pool = pool_init();
pool->condition = &do_work;
- for (size_t i = 0; i < rev->file_count; ++i)
+ for (size_t i = 0; i < rev->file_count && do_work; ++i)
{
struct thread_object_info* info = &thread_info[i];
@@ -178,24 +182,7 @@ int Worker::update_setup(int local_rev, int remote_rev)
delete[] thread_info;
progress = 0;
- infoText = QString("Processing");
- emit resultReady(RESULT_UPDATE_TEXT);
-
- for (size_t i = 0; i < rev->file_count && do_work; ++i)
- {
- struct file_info* file = &rev->files[i];
- if (file->type != TYPE_MKDIR)
- continue;
-
- progress = (int)(((i * 100) + 1) / rev->file_count);
- emit resultReady(RESULT_UPDATE_TEXT);
-
- size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
- char* buf = (char*)malloc(len);
- snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
- makeDir(buf);
- free(buf);
- }
+ this->setInfoText("Processing");
for (size_t i = 0; i < rev->file_count && do_work; ++i)
{
@@ -203,13 +190,14 @@ int Worker::update_setup(int local_rev, int remote_rev)
if (file->type != TYPE_DELETE) continue;
size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
- char* buf = (char*)malloc(len);
+ char* buf = new char[len];
snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
- if (isFile(buf) && remove(buf))
+ if (isFile(buf))
{
- printf("\nFailed to delete %s\n", file->path);
+ remove(buf);
}
- free(buf);
+ delete[] buf;
+
}
for (size_t i = 0; i < rev->file_count && do_work; ++i)
@@ -218,24 +206,18 @@ int Worker::update_setup(int local_rev, int remote_rev)
if (file->type != TYPE_MKDIR) continue;
size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
- char* buf = (char*)malloc(len);
- if (!isDir(buf) && makeDir(buf))
- {
- printf("\nFailed to create %s\n", file->path);
- }
- free(buf);
+ char* buf = new char[len];
+ snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
+ makeDir(buf);
+ delete[] buf;
}
- for (size_t i = 0; i < rev->file_count; ++i)
+ for (size_t i = 0; i < rev->file_count && do_work; ++i)
{
struct file_info* file = &rev->files[i];
if (file->type != TYPE_WRITE) continue;
- fprintf(stderr, "\rInstalling %zu/%zu (%s)", i+1, rev->file_count, file->object);
- if (applyObject(of_dir, file))
- {
- printf("\nFailed to write %s\n", file->path);
- }
+ applyObject(of_dir, file);
}
if (do_work)
@@ -245,13 +227,10 @@ int Worker::update_setup(int local_rev, int remote_rev)
setLocalRevision(of_dir, remote_rev);
}
- progress = 0;
- infoText = QString("");
- emit resultReady(RESULT_UPDATE_TEXT);
-
freeRevision(rev);
}
+ this->setInfoText("");
update_in_progress = false;
return retval;
diff --git a/src/qt/workers.hpp b/src/qt/workers.hpp
index 19d83f5..dbc2c7e 100644
--- a/src/qt/workers.hpp
+++ b/src/qt/workers.hpp
@@ -39,6 +39,7 @@ public:
void setRemote(QString);
QString getArguments();
void setArguments(QString);
+ void setInfoText(QString);
int getRevision();
int getRemoteRevision();
diff --git a/src/toast.c b/src/toast.c
index 0d3ac3a..9d184e5 100644
--- a/src/toast.c
+++ b/src/toast.c
@@ -3,7 +3,7 @@
#include <string.h>
#include <stdio.h>
#include <assert.h>
-#include <json.h>
+#include <json-c/json.h>
#include <md5.h>
#if defined(_WIN32)
@@ -17,8 +17,8 @@
#include "net.h"
#include "toast.h"
-#ifdef TOAST_DEFAULT_REMOTE
-#define TOAST_DEFAULT_REMOTE "http://toast.openfortress.fun/toast"
+#ifndef TOAST_DEFAULT_REMOTE
+#define TOAST_DEFAULT_REMOTE "https://toast.openfortress.fun/toast"
#endif
const char* TYPE_STRINGS[] = {