/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Communicator. * * The Initial Developer of the Original Code is * Netscape Communications Corp. * Portions created by the Initial Developer are Copyright (C) 2003 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Sean Su * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "setup.h" #include "windows.h" #include "extern.h" #include "extra.h" #include "version.h" BOOL GetFileVersion(LPSTR szFile, verBlock *vbVersion) { UINT uLen; UINT dwLen; BOOL bRv; DWORD dwHandle; LPVOID lpData; LPVOID lpBuffer; VS_FIXEDFILEINFO *lpBuffer2; vbVersion->ullMajor = 0; vbVersion->ullMinor = 0; vbVersion->ullRelease = 0; vbVersion->ullBuild = 0; if(FileExists(szFile)) { bRv = TRUE; dwLen = GetFileVersionInfoSize(szFile, &dwHandle); lpData = (LPVOID)malloc(sizeof(long)*dwLen); uLen = 0; if(GetFileVersionInfo(szFile, dwHandle, dwLen, lpData) != 0) { if(VerQueryValue(lpData, "\\", &lpBuffer, &uLen) != 0) { lpBuffer2 = (VS_FIXEDFILEINFO *)lpBuffer; vbVersion->ullMajor = HIWORD(lpBuffer2->dwFileVersionMS); vbVersion->ullMinor = LOWORD(lpBuffer2->dwFileVersionMS); vbVersion->ullRelease = HIWORD(lpBuffer2->dwFileVersionLS); vbVersion->ullBuild = LOWORD(lpBuffer2->dwFileVersionLS); } } free(lpData); } else /* File does not exist */ bRv = FALSE; return(bRv); } void TranslateVersionStr(LPSTR szVersion, verBlock *vbVersion) { LPSTR szNum1 = NULL; LPSTR szNum2 = NULL; LPSTR szNum3 = NULL; LPSTR szNum4 = NULL; szNum1 = strtok(szVersion, "."); szNum2 = strtok(NULL, "."); szNum3 = strtok(NULL, "."); szNum4 = strtok(NULL, "."); vbVersion->ullMajor = _atoi64(szNum1); vbVersion->ullMinor = _atoi64(szNum2); vbVersion->ullRelease = _atoi64(szNum3); vbVersion->ullBuild = _atoi64(szNum4); } int CompareVersion(verBlock vbVersionOld, verBlock vbVersionNew) { if(vbVersionOld.ullMajor > vbVersionNew.ullMajor) return(4); else if(vbVersionOld.ullMajor < vbVersionNew.ullMajor) return(-4); if(vbVersionOld.ullMinor > vbVersionNew.ullMinor) return(3); else if(vbVersionOld.ullMinor < vbVersionNew.ullMinor) return(-3); if(vbVersionOld.ullRelease > vbVersionNew.ullRelease) return(2); else if(vbVersionOld.ullRelease < vbVersionNew.ullRelease) return(-2); if(vbVersionOld.ullBuild > vbVersionNew.ullBuild) return(1); else if(vbVersionOld.ullBuild < vbVersionNew.ullBuild) return(-1); /* the versions are all the same */ return(0); }