#include <linux/fs.h>
#include <dirent.h>
#include <time.h>
+#include <semaphore.h>
#include <ventoy_define.h>
#include <ventoy_util.h>
return 0;
}
-
+static sem_t g_writeback_sem;
static volatile int g_thread_stop = 0;
static pthread_t g_writeback_thread;
-static pthread_mutex_t g_writeback_mutex;
-static pthread_cond_t g_writeback_cond;
+
static void * ventoy_local_thread_run(void* data)
{
ventoy_http_writeback_pf callback = (ventoy_http_writeback_pf)data;
- while (1)
+ while (0 == g_thread_stop)
{
- pthread_mutex_lock(&g_writeback_mutex);
- pthread_cond_wait(&g_writeback_cond, &g_writeback_mutex);
-
- if (g_thread_stop)
- {
- pthread_mutex_unlock(&g_writeback_mutex);
- break;
- }
- else
- {
- callback();
- pthread_mutex_unlock(&g_writeback_mutex);
- }
+ sem_wait(&g_writeback_sem);
+ callback();
}
return NULL;
void ventoy_set_writeback_event(void)
{
- pthread_cond_signal(&g_writeback_cond);
+ sem_post(&g_writeback_sem);
}
int ventoy_start_writeback_thread(ventoy_http_writeback_pf callback)
{
g_thread_stop = 0;
- pthread_mutex_init(&g_writeback_mutex, NULL);
- pthread_cond_init(&g_writeback_cond, NULL);
+ sem_init(&g_writeback_sem, 0, 0);
pthread_create(&g_writeback_thread, NULL, ventoy_local_thread_run, callback);
return 0;
void ventoy_stop_writeback_thread(void)
{
g_thread_stop = 1;
- pthread_cond_signal(&g_writeback_cond);
-
+
+ sem_post(&g_writeback_sem);
pthread_join(g_writeback_thread, NULL);
+ sem_destroy(&g_writeback_sem);
+}
- pthread_cond_destroy(&g_writeback_cond);
- pthread_mutex_destroy(&g_writeback_mutex);
-}
+int ventoy_read_file_to_buf(const char *FileName, int ExtLen, void **Bufer, int *BufLen)
+{
+ int FileSize;
+ FILE *fp = NULL;
+ void *Data = NULL;
+
+ fp = fopen(FileName, "rb");
+ if (fp == NULL)
+ {
+ vlog("Failed to open file %s", FileName);
+ return 1;
+ }
+
+ fseek(fp, 0, SEEK_END);
+ FileSize = (int)ftell(fp);
+
+ Data = malloc(FileSize + ExtLen);
+ if (!Data)
+ {
+ fclose(fp);
+ return 1;
+ }
+
+ fseek(fp, 0, SEEK_SET);
+ fread(Data, 1, FileSize, fp);
+
+ fclose(fp);
+
+ *Bufer = Data;
+ *BufLen = FileSize;
+
+ return 0;
+}
int ventoy_copy_file(const char *a, const char *b)
{