From b73f3b8a1517e1c7e74b18f2c0e847d53f47c55d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 15 Jan 2007 20:48:32 +0000 Subject: [PATCH] Applied patch by Vasilis Kaotsis, and added him as an author (because you don't really recognize the original anymore :-)). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19818 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/version.cpp | 278 ++++++++++++++++++++++---------------------- 1 file changed, 142 insertions(+), 136 deletions(-) diff --git a/src/bin/version.cpp b/src/bin/version.cpp index 978f7aec25..2a6029cb24 100644 --- a/src/bin/version.cpp +++ b/src/bin/version.cpp @@ -1,94 +1,116 @@ -// Author: Ryan Fleet -// Created: 9th October 2002 -// Modified: 14th October 2002 +/* + * Copyright 2002-2007, Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Ryan Fleet + * Vasilis Kaoutsis + */ -#include -#include + +#include #include +#include +#include -void help(void) + +void +usage() { - printf("usage: version [OPTION] FILENAME [FILENAME2, ...]\n"); - printf("Returns the version of a file.\n\n"); - printf(" -h, --help this usage message\n"); - printf(" -l, --long print long version information of FILENAME\n"); - printf(" -n, --numerical print in numerical mode\n"); - printf(" (Major miDdle miNor Variety Internal)\n"); - printf(" -s, --system print system version instead of app version\n"); - printf(" --version print version information for this command\n"); + printf("usage: version [OPTION] FILENAME [FILENAME2, ...]\n" + "Returns the version of a file.\n\n" + " -h, --help this usage message\n" + " -l, --long print long version information of FILENAME\n" + " -n, --numerical print in numerical mode\n" + " (Major miDdle miNor Variety Internal)\n" + " -s, --system print system version instead of app version\n" + " --version print version information for this command\n"); } -int getversion(const char *filename, version_kind kind, bool bLongFlag, bool bNumericalFlag) +status_t +get_version(const char *filename, version_kind kind, bool longFlag, bool numericalFlag) { BFile file(filename, O_RDONLY); - if(file.InitCheck() != B_OK) - { + if (file.InitCheck() != B_OK) { printf("Couldn't get file info!\n"); - return 1; + return B_FILE_ERROR; } - + BAppFileInfo info(&file); - if(info.InitCheck() != B_OK) - { + if (info.InitCheck() != B_OK) { printf("Couldn't get file info!\n"); - return 1; + return B_FILE_ERROR; } - + version_info version; - if(info.GetVersionInfo(&version, kind) != B_OK) - { + if (info.GetVersionInfo(&version, kind) != B_OK) { printf("Version unknown!\n"); - return 1; + return B_ERROR; } - - if(true == bLongFlag) - { + + if (longFlag) { printf("%s\n", version.long_info); - return 0; + return B_OK; } - - if(true == bNumericalFlag) - { + + if (numericalFlag) { printf("%lu ", version.major); printf("%lu ", version.middle); printf("%lu ", version.minor); - switch(version.variety) - { - case 0: printf("d "); break; - case 1: printf("a "); break; - case 2: printf("b "); break; - case 3: printf("g "); break; - case 4: printf("gm "); break; - case 5: printf("f "); break; - }; + + switch (version.variety) { + case B_DEVELOPMENT_VERSION: + printf("d "); + break; + + case B_ALPHA_VERSION: + printf("a "); + break; + + case B_BETA_VERSION: + printf("b "); + break; + + case B_GAMMA_VERSION: + printf("g "); + break; + + case B_GOLDEN_MASTER_VERSION: + printf("gm "); + break; + + case B_FINAL_VERSION: + printf("f "); + break; + } + printf("%lu\n", version.internal); - return 0; + return B_OK; } - + printf("%s\n", version.short_info); - - return 0; + return B_OK; } -/* - strLessEqual(string1, string2) - determines whether string1 contains at least one or more of the characters - of string2 but none of which string2 doesn't contain. - +/*! + determines whether \a string1 contains at least one or more of the characters + of \a string2 but none of which \a string2 doesn't contain. + + examples: true == ("hel" == "help"); true == ("help" == "help"); true == ("h" == "help"); false == ("held" == "help"); false == ("helped" == "help"); */ -bool strLessEqual(const char *str1, const char *str2) +bool +str_less_equal(const char *str1, const char *str2) { char *ptr1 = const_cast(str1); char *ptr2 = const_cast(str2); - - while(*ptr1 != '\0') - { - if(*ptr1 != *ptr2) + + while (*ptr1 != '\0') { + if (*ptr1 != *ptr2) return false; ++ptr1; ++ptr2; @@ -97,105 +119,89 @@ bool strLessEqual(const char *str1, const char *str2) } -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { + BApplication app("application/x.vnd.Haiku-version"); version_kind kind = B_APP_VERSION_KIND; - bool bLongFlag = false; - bool bNumericalFlag = false; + bool longFlag = false; + bool numericalFlag = false; int i; - - if(argc < 2) + + if (argc < 2) { + usage(); return 0; + } - for(i = 1; i < argc; ++i) - { - if(strncmp(argv[i], "-", 1) == 0) - { + for (i = 1; i < argc; ++i) { + if (argv[i][0] == '-') { char *ptr = argv[i]; ++ptr; - - if(*ptr == '-') - { - bool lequal = false; + + if (*ptr == '-') { + bool lessEqual = false; ++ptr; - - if(*ptr == 'h') - { - lequal = strLessEqual(ptr, "help"); - if(lequal == true) - { - help(); + + if (*ptr == 'h') { + lessEqual = str_less_equal(ptr, "help"); + if (lessEqual) { + usage(); return 0; } - } - - else if(*ptr == 'l') - { - lequal = strLessEqual(ptr, "long"); - if(lequal == true) - bLongFlag = true; - } - - else if(*ptr == 'n') - { - lequal = strLessEqual(ptr, "numerical"); - if(lequal == true) - bNumericalFlag = true; - } - - else if(*ptr == 's') - { - lequal = strLessEqual(ptr, "system"); - if(lequal == true) + } else if (*ptr == 'l') { + lessEqual = str_less_equal(ptr, "long"); + if (lessEqual) + longFlag = true; + } else if (*ptr == 'n') { + lessEqual = str_less_equal(ptr, "numerical"); + if (lessEqual) + numericalFlag = true; + } else if (*ptr == 's') { + lessEqual = str_less_equal(ptr, "system"); + if (lessEqual) kind = B_SYSTEM_VERSION_KIND; - } - - else if(*ptr == 'v') - { - lequal = strLessEqual(ptr, "version"); - if(lequal == true) - { - getversion(argv[0], B_APP_VERSION_KIND, false, false); + } else if (*ptr == 'v') { + lessEqual = str_less_equal(ptr, "version"); + if (lessEqual) { + get_version(argv[0], B_APP_VERSION_KIND, false, false); return 0; } } - - if(lequal == false) + + if (!lessEqual) printf("%s unrecognized option `%s'\n", argv[0], argv[i]); - } - - else while(*ptr != '\0') - { - if(*ptr == 'h') - { - help(); - return 0; + } else { + while (*ptr != '\0') { + if (*ptr == 'h') { + usage(); + return 0; + } else if (*ptr == 's') + kind = B_SYSTEM_VERSION_KIND; + else if (*ptr == 'l') + longFlag = true; + else if (*ptr == 'n') + numericalFlag = true; + else { + printf("%s: invalid option -- %c\n", argv[0], *ptr); + return 1; + } + + if (argc < 3) { + printf("%s: missing FILENAME(S) \n", argv[0]); + return 1; + } + + ++ptr; } - else if(*ptr == 's') - kind = B_SYSTEM_VERSION_KIND; - else if(*ptr == 'l') - bLongFlag = true; - else if(*ptr == 'n') - bNumericalFlag = true; - else - printf("%s: invalid option -- %c\n", argv[0], *ptr); - - ++ptr; } } } - - int status = 0; - int retval = 0; - for(i = 1; i < argc; ++i) - { - if(strncmp(argv[i], "-", 1) != 0) - { - status = getversion(argv[i], kind, bLongFlag, bNumericalFlag); - if(status != 0) - retval = 1; - } + + for (i = 1; i < argc; ++i) { + if (argv[i][0] != '-' + && get_version(argv[i], kind, longFlag, numericalFlag) != B_OK) + return 1; } - return retval; + return 0; }