Subversion Repositories spk

Rev

Rev 1 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "version.h"

//---------------------------------------------------------------------------------
char * getVersion(const char *lpFileName)
{
        VS_FIXEDFILEINFO *pInfo;
        DWORD handle;
        BYTE *data;
        char *version=0;

        DWORD size=GetFileVersionInfoSizeA(lpFileName, &handle);
        if(size > 0){
                data=new BYTE[size];
                if(GetFileVersionInfoA(lpFileName, handle, size, data)){

                        UINT len;
                        VerQueryValueA(data, "\\", (LPVOID*)&pInfo, &len);

                        int numbers[4];
                        numbers[0]=HIWORD(pInfo->dwFileVersionMS);
                        numbers[1]=LOWORD(pInfo->dwFileVersionMS);
                        numbers[2]=HIWORD(pInfo->dwFileVersionLS);
                        numbers[3]=LOWORD(pInfo->dwFileVersionLS);

                        char tmp[6];
                        version=new char[5 * 4 + 3 + 1]; // max 5 characters for 1 number, 3 dots, null terminator
                        char *p=version;
                        for(int i=0; i < 4; i++){
                                _itoa(numbers[i], tmp, 10);
                                size_t len=strlen(tmp);
                                memcpy(p, tmp, len);
                                p+=len;
                                if(i!=3)
                                        *p++='.';
                        }
                        *p=0;
                }
                delete[] data;
        }
        if(version==NULL){
                version=new char[1];
                version[0]=0;
        }
        return version;
}
//---------------------------------------------------------------------------------
char * getMyVersion(HMODULE hModule)
{
        char name[MAX_PATH];
        GetModuleFileNameA(hModule, name, sizeof(name));
        return getVersion(name);
}
//---------------------------------------------------------------------------------