summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-18 11:44:07 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-18 11:44:07 (GMT)
commit97a819c79c5d89eca3a3227c88efe6b2c9e99b77 (patch)
tree8aa9772a5ef60afc12ee36192590e4d9da97acd2 /src
parent5b51e670447ea175fb9b0b7035403b274e16972e (diff)
downloadpowder-97a819c79c5d89eca3a3227c88efe6b2c9e99b77.zip
powder-97a819c79c5d89eca3a3227c88efe6b2c9e99b77.tar.gz
Fix autoupdate issue where temp file is not deleted, fixes #128
Diffstat (limited to 'src')
-rw-r--r--src/Update.cpp15
-rw-r--r--src/client/Client.cpp15
-rw-r--r--src/client/Client.h3
-rw-r--r--src/update/UpdateActivity.cpp5
4 files changed, 31 insertions, 7 deletions
diff --git a/src/Update.cpp b/src/Update.cpp
index 290b5df..4ba2362 100644
--- a/src/Update.cpp
+++ b/src/Update.cpp
@@ -150,6 +150,10 @@ int update_finish(void)
char *temp, *self=exe_name(), *p;
int timeout = 60, err;
+#ifdef DEBUG
+ printf("Update: Current EXE name: %s\n", self);
+#endif
+
temp = (char*)malloc(strlen(self)+12);
strcpy(temp, self);
p = temp + strlen(temp) - 4;
@@ -157,12 +161,18 @@ int update_finish(void)
p += 4;
strcpy(p, "_update.exe");
+#ifdef DEBUG
+ printf("Update: Temp EXE name: %s\n", temp);
+#endif
+
while (!DeleteFile(temp))
{
err = GetLastError();
if (err == ERROR_FILE_NOT_FOUND)
{
- // just as well, then
+#ifdef DEBUG
+ printf("Update: Temp file deleted\n");
+#endif
free(temp);
return 0;
}
@@ -170,6 +180,9 @@ int update_finish(void)
timeout--;
if (timeout <= 0)
{
+#ifdef DEBUG
+ printf("Update: Delete timeout\n");
+#endif
free(temp);
return 1;
}
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index ea9c639..0f6273c 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -676,12 +676,8 @@ void Client::RemoveListener(ClientListener * listener)
}
}
-void Client::Shutdown()
+void Client::WritePrefs()
{
- ClearThumbnailRequests();
- http_done();
-
- //Save config
std::ofstream configFile;
configFile.open("powder.pref", std::ios::trunc);
if(configFile)
@@ -708,6 +704,15 @@ void Client::Shutdown()
}
}
+void Client::Shutdown()
+{
+ ClearThumbnailRequests();
+ http_done();
+
+ //Save config
+ WritePrefs();
+}
+
Client::~Client()
{
}
diff --git a/src/client/Client.h b/src/client/Client.h
index d9fedd5..95ae952 100644
--- a/src/client/Client.h
+++ b/src/client/Client.h
@@ -141,6 +141,9 @@ public:
void Tick();
void Shutdown();
+ //Force flushing preferences to file on disk.
+ void WritePrefs();
+
std::string GetPrefString(std::string property, std::string defaultValue);
double GetPrefNumber(std::string property, double defaultValue);
int GetPrefInteger(std::string property, int defaultValue);
diff --git a/src/update/UpdateActivity.cpp b/src/update/UpdateActivity.cpp
index 1f07373..0f22df7 100644
--- a/src/update/UpdateActivity.cpp
+++ b/src/update/UpdateActivity.cpp
@@ -105,13 +105,16 @@ private:
notifyStatus("Applying update");
notifyProgress(-1);
+ Client::Ref().SetPref("version.update", true);
+ Client::Ref().WritePrefs();
if (update_start(res, uncompressedLength))
{
+ Client::Ref().SetPref("version.update", false);
update_cleanup();
notifyError("Update failed - try downloading a new version.");
+ return false;
}
- Client::Ref().SetPref("version.update", true);
return true;
corrupt: