root/core/versions.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. get_val
  2. parse_version
  3. cmp_chdk_version
  4. chk_api_version

   1 #include "stdlib.h"
   2 #include "string.h"
   3 #include "versions.h"
   4 
   5 //==========================================================
   6 _chdk_version_t chdk_version;
   7 
   8 //==========================================================
   9 static const char* get_val(const char *s, short *v)
  10 {
  11     if (s && *s)
  12     {
  13         *v = strtol(s, (char**)&s, 0);
  14         if (s && (*s == '.')) s++;
  15     }
  16     return s;
  17 }
  18 
  19 // Convert version strings into _chdk_version_t structure
  20 void parse_version(_chdk_version_t *ver, const char *build, const char *rev)
  21 {
  22     memset(ver, 0, sizeof(_chdk_version_t));
  23     build = get_val(build, &ver->major);
  24     build = get_val(build, &ver->minor);
  25     build = get_val(build, &ver->maintenance);
  26     get_val(build, &ver->revision);
  27     get_val(rev, &ver->revision);
  28 }
  29 
  30 // Compare two chdk versions
  31 // Returns 0 if equal, -1 if ver1 < ver2, 1 if ver1 > ver2
  32 int cmp_chdk_version(_chdk_version_t ver1, _chdk_version_t ver2)
  33 {
  34     if (ver1.major       < ver2.major)       return -1;
  35     if (ver1.major       > ver2.major)       return  1;
  36     if (ver1.minor       < ver2.minor)       return -1;
  37     if (ver1.minor       > ver2.minor)       return  1;
  38     if (ver1.maintenance < ver2.maintenance) return -1;
  39     if (ver1.maintenance > ver2.maintenance) return  1;
  40     if (ver1.revision    < ver2.revision)    return -1;
  41     if (ver1.revision    > ver2.revision)    return  1;
  42     return 0;
  43 }
  44 
  45 // Check requested api version against built api version
  46 // Returns 1 if requested version is compatible, 0 otherwise
  47 int chk_api_version(_version_t api_ver, _version_t req_ver)
  48 {
  49     if (req_ver.major == 0)     // Request match against ANY API
  50         return 1;
  51     // Compatible only if built API major version is the same, and minor is same or later
  52     if ((api_ver.major == req_ver.major) && (api_ver.minor >= req_ver.minor))
  53         return 1;
  54     return 0;
  55 
  56 }
  57 
  58 //==========================================================

/* [<][>][^][v][top][bottom][index][help] */