Updater String Comparing Issue
Hello, fellow programmings!
I'm having a problem with my updater program. What it does is it will search for updates for the program, and will return a value. If the update version equals the program version, then no updates are available, otherwise, it will execute the download.exe program to download the update.
The problem is that, regardless of the download version and the program version, it will always execute download.exe, even when the versions are the same, and strcmp returns 0.
Downloading works fine, so no problem there. Thanks for the help!
Code:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
const char g_szClassName[] = "myWindowClass";
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
CreateWindow(TEXT("button"), TEXT("Search for Updates"), WS_VISIBLE | WS_CHILD, 25, 15, 170, 50, hwnd, (HMENU) 1,NULL,NULL);
break;
}
case WM_COMMAND:
{
if(LOWORD(wParam) == 1)
{
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://censored-domain/projects/jotter/updates/update.zip";
char outfilename[FILENAME_MAX] = "update.txt";
char version[8];
char update[8];
int result;
curl = curl_easy_init();
if (curl)
{
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
fp = fopen("version.txt","r");
fread(version, 8, 1, fp);
fclose(fp);
fp = fopen("update.txt","r");
fread(update, 8, 1, fp);
fclose(fp);
result = strcmp(version, update);
if(result == 0)
MessageBox(hwnd, "No updates available!", "Notice", MB_OK | MB_ICONINFORMATION);
else
ShellExecute(NULL,"open","download.exe",NULL,NULL,SW_SHOWNORMAL);
PostMessage(hwnd, WM_DESTROY, 0, 0);
break;
}
}
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
//Step 1: Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Step 2: Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"Jotter Updater",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Step 3: The Message Loop
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}