Thread: Updater String Comparing Issue

  1. #1
    Registered User
    Join Date
    Mar 2011
    Posts
    216

    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;
    }

  2. #2
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    strcmp (as all the string-handling functions) require your strings to end with a \0 character -- and fread isn't going to put one in for you. (This also means that if your version strings are 8 characters long, then your arrays are necessarily one character short.)

  3. #3
    Registered User
    Join Date
    Mar 2011
    Posts
    216
    Does fscanf?

    I added this before the strcmp, but it didn't work.

    version[8] == '\0';
    update[8] == '\0';

  4. #4
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    I think you're looking for the "assignment operator" ( '=' not '==')

  5. #5
    Registered User
    Join Date
    Mar 2011
    Posts
    216
    Didn't work, it still just launches download.exe, even when both version infos are the same (1.3.5 and 1.3.5)

  6. #6
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    Quote Originally Posted by binks View Post
    Does fscanf?

    I added this before the strcmp, but it didn't work.

    version[8] == '\0';
    update[8] == '\0';
    fscanf does add \0 when you use %s.

    It would be a shame to type version[8] in your program at all, what with it not existing. And if you only read five bytes in, that means you have three garbage bytes in your arrays still, which are unlikely to be the same from one to the other (but hey, it's 16 million to 1 odds, it'll happen eventually if you keep running it).

  7. #7
    'Allo, 'Allo, Allo
    Join Date
    Apr 2008
    Posts
    639
    Do zip files generally start with a version number?
    Oh I see, it's a renamed txt file. What confusing naming
    Last edited by adeyblue; 07-19-2011 at 01:23 PM.

  8. #8
    Registered User
    Join Date
    Mar 2011
    Posts
    216
    Thanks for the information. Scanf has done the job well!

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. String comparing in C
    By petrock6 in forum C Programming
    Replies: 10
    Last Post: 12-05-2008, 06:08 PM
  2. string comparing
    By pode in forum C++ Programming
    Replies: 5
    Last Post: 11-18-2002, 06:07 PM
  3. Problem comparing string from text file with string constant
    By XenoCodex Admin in forum C++ Programming
    Replies: 3
    Last Post: 07-25-2002, 10:17 AM
  4. string comparing
    By Strut in forum Linux Programming
    Replies: 0
    Last Post: 01-31-2002, 09:29 PM
  5. string comparing
    By TED22_8 in forum C Programming
    Replies: 13
    Last Post: 01-21-2002, 11:05 AM

Tags for this Thread