aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cli/commands.c10
-rw-r--r--src/cli/updater.c59
-rw-r--r--src/qt/workers.cpp56
-rw-r--r--src/toast.c6
4 files changed, 67 insertions, 64 deletions
diff --git a/src/cli/commands.c b/src/cli/commands.c
index 30d3bca..9ff4791 100644
--- a/src/cli/commands.c
+++ b/src/cli/commands.c
@@ -104,13 +104,13 @@ static int install(int c, char** v)
static int update(int c, char** v)
{
int exit_val = EXIT_SUCCESS;
- int force = 0;
+ int verify = 0;
char* of_dir = NULL;
char* remote = NULL;
for (int i = 1; i < c; ++i)
{
- if (!strcmp(v[i], "--force"))
- force = 1;
+ if (!strcmp(v[i], "--verify"))
+ verify = 1;
else if (!strcmp(v[i], "--dir"))
{
if (!v[++i])
@@ -138,7 +138,7 @@ static int update(int c, char** v)
puts(
"OFCL update\n"
- "\t--force\t\tforce update\n"
+ "\t--verify\t\tverify game files\n"
"\t--dir\t\tspecify where to download OpenFortress to\n"
"\t--remote\tspecify the server to use\n"
"\t--help\t\tshows this text"
@@ -151,7 +151,7 @@ static int update(int c, char** v)
of_dir = getOpenFortressDir();
int local_rev = getLocalRevision(of_dir);
- if (force)
+ if (verify)
{
local_rev = 0;
}
diff --git a/src/cli/updater.c b/src/cli/updater.c
index 519da29..f6120c7 100644
--- a/src/cli/updater.c
+++ b/src/cli/updater.c
@@ -56,7 +56,7 @@ void update_setup(char* of_dir, char* remote, int local_rev, int remote_rev)
if (leavesRelativePath(file->path))
{
- printf("Revision contains invalid path '%s'\n", file->path);
+ fprintf(stderr, "Revision contains invalid path '%s'\n", file->path);
freeRevision(rev);
return;
}
@@ -82,53 +82,48 @@ void update_setup(char* of_dir, char* remote, int local_rev, int remote_rev)
pool_free(pool);
free(thread_info);
+ puts("");
for (size_t i = 0; i < rev->file_count; ++i)
{
struct file_info* file = &rev->files[i];
- if (file->type != TYPE_MKDIR)
- continue;
+ if (file->type != TYPE_DELETE) continue;
+ fprintf(stderr, "\rDeleting %zu/%zu", i+1, rev->file_count);
size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
char* buf = malloc(len);
snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
- makeDir(buf);
+ if (isFile(buf) && remove(buf))
+ {
+ fprintf(stderr, "\rFailed to delete %s\n", file->path);
+ }
+ free(buf);
+ }
+
+ for (size_t i = 0; i < rev->file_count; ++i)
+ {
+ struct file_info* file = &rev->files[i];
+
+ if (file->type != TYPE_MKDIR) continue;
+ size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
+ char* buf = malloc(len);
+ fprintf(stderr, "\rCreating %zu/%zu", i+1, rev->file_count);
+ snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
+ if (!isDir(buf) && !makeDir(buf))
+ {
+ fprintf(stderr, "\nFailed to create %s\n", file->path);
+ }
free(buf);
}
- puts("");
for (size_t i = 0; i < rev->file_count; ++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);
- switch (file->type)
+ if (applyObject(of_dir, file))
{
- case TYPE_WRITE:
- case TYPE_MKDIR:
- {
- if (applyObject(of_dir, file))
- {
- printf("\rFailed to write %s\n", file->path);
- }
- }
- break;
-
- case TYPE_DELETE:
- {
- size_t len = strlen(of_dir) + strlen(OS_PATH_SEP) + strlen(file->path) + 1;
- char* buf = malloc(len);
- snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
- if (isFile(buf) && remove(buf))
- {
- printf("\rFailed to delete %s\n", file->path);
- }
- free(buf);
- }
- break;
-
- default:
- assert(0);
- break;
+ fprintf(stderr, "\nFailed to write %s\n", file->path);
}
}
diff --git a/src/qt/workers.cpp b/src/qt/workers.cpp
index a54509f..1642813 100644
--- a/src/qt/workers.cpp
+++ b/src/qt/workers.cpp
@@ -201,32 +201,40 @@ int Worker::update_setup(int local_rev, int remote_rev)
{
struct file_info* file = &rev->files[i];
- progress = (int)(((i * 100) + 1) / rev->file_count);
- emit resultReady(RESULT_UPDATE_TEXT);
+ 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);
+ snprintf(buf, len, "%s%s%s", of_dir, OS_PATH_SEP, file->path);
+ if (isFile(buf) && remove(buf))
+ {
+ printf("\nFailed to delete %s\n", file->path);
+ }
+ free(buf);
+ }
+
+ 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;
+ 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);
+ }
+
+ for (size_t i = 0; i < rev->file_count; ++i)
+ {
+ struct file_info* file = &rev->files[i];
- switch (file->type)
+ if (file->type != TYPE_WRITE) continue;
+ fprintf(stderr, "\rInstalling %zu/%zu (%s)", i+1, rev->file_count, file->object);
+ if (applyObject(of_dir, file))
{
- case TYPE_WRITE:
- case TYPE_MKDIR:
- {
- retval += applyObject(of_dir, file);
- }
- break;
-
- case TYPE_DELETE:
- {
- 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);
- if (isFile(buf))
- retval += remove(buf);
- free(buf);
- }
- break;
-
- default:
- assert(0);
- break;
+ printf("\nFailed to write %s\n", file->path);
}
}
diff --git a/src/toast.c b/src/toast.c
index c054e2f..0d3ac3a 100644
--- a/src/toast.c
+++ b/src/toast.c
@@ -149,7 +149,7 @@ void setLocalRevision(char* dir, int rev)
return;
// cleanup legacy behavior
- {
+ {
char* old_revision_path = malloc(strlen(revision_path) + strlen(OLD_TOAST_LOCAL_REVISION_PATH));
strcpy(old_revision_path, revision_path);
@@ -542,12 +542,12 @@ int applyObject(char* path, struct file_info* info)
char* buf_file = malloc(len);
snprintf(buf_file, len, "%s%s%s", path, OS_PATH_SEP, file);
- rename(buf_obj, buf_file);
+ int retval = rename(buf_obj, buf_file);
free(buf_obj);
free(buf_file);
- return 0;
+ return retval;
}
/**