xssimpleversion.c
Go to the documentation of this file.
1 
2 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // 1. Redistributions of source code must retain the above copyright notice,
9 // this list of conditions, and the following disclaimer.
10 //
11 // 2. Redistributions in binary form must reproduce the above copyright notice,
12 // this list of conditions, and the following disclaimer in the documentation
13 // and/or other materials provided with the distribution.
14 //
15 // 3. Neither the names of the copyright holders nor the names of their contributors
16 // may be used to endorse or promote products derived from this software without
17 // specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
24 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
26 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
28 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
29 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
30 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
31 //
32 
33 
34 // Copyright (c) 2003-2021 Xsens Technologies B.V. or subsidiaries worldwide.
35 // All rights reserved.
36 //
37 // Redistribution and use in source and binary forms, with or without modification,
38 // are permitted provided that the following conditions are met:
39 //
40 // 1. Redistributions of source code must retain the above copyright notice,
41 // this list of conditions, and the following disclaimer.
42 //
43 // 2. Redistributions in binary form must reproduce the above copyright notice,
44 // this list of conditions, and the following disclaimer in the documentation
45 // and/or other materials provided with the distribution.
46 //
47 // 3. Neither the names of the copyright holders nor the names of their contributors
48 // may be used to endorse or promote products derived from this software without
49 // specific prior written permission.
50 //
51 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
52 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
53 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
54 // THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55 // SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
56 // OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57 // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR
58 // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
59 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.THE LAWS OF THE NETHERLANDS
60 // SHALL BE EXCLUSIVELY APPLICABLE AND ANY DISPUTES SHALL BE FINALLY SETTLED UNDER THE RULES
61 // OF ARBITRATION OF THE INTERNATIONAL CHAMBER OF COMMERCE IN THE HAGUE BY ONE OR MORE
62 // ARBITRATORS APPOINTED IN ACCORDANCE WITH SAID RULES.
63 //
64 
65 #include "xssimpleversion.h"
66 
67 #ifdef _WIN32
68  #include <Windows.h>
69 #else
70  #ifdef __GNUC__
71  #include <sys/utsname.h>
72  #endif
73  #include <stdlib.h>
74  #include <stdio.h>
75  #include <string.h>
76 #endif
77 
88 {
89 #ifdef __cplusplus
90  return thisPtr->major() == 0 && thisPtr->minor() == 0 && thisPtr->revision() == 0;
91 #else
92  return thisPtr->m_major == 0 && thisPtr->m_minor == 0 && thisPtr->m_revision == 0;
93 #endif
94 }
95 
99 {
100  XsSimpleVersion tmp = *a;
101  *a = *b;
102  *b = tmp;
103 }
104 
111 {
112 #ifdef __cplusplus
113  return a->major() != b->major() || a->minor() != b->minor() || a->revision() != b->revision();
114 #else
115  return a->m_major != b->m_major || a->m_minor != b->m_minor || a->m_revision != b->m_revision;
116 #endif
117 }
118 
121 {
122  static XsSimpleVersion* fetched = 0;
123  if (!fetched)
124  {
125 #ifdef _WIN32
126  NTSTATUS(WINAPI * RtlGetVersion)(LPOSVERSIONINFOEXW);
127  OSVERSIONINFOEXW osInfo;
128  *(FARPROC*)&RtlGetVersion = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion");
129  if (RtlGetVersion)
130  {
131  osInfo.dwOSVersionInfoSize = sizeof(osInfo);
132  RtlGetVersion(&osInfo);
133  fetched = (XsSimpleVersion*)malloc(sizeof(XsSimpleVersion));
134  fetched->m_major = (uint8_t) osInfo.dwMajorVersion;
135  fetched->m_minor = (uint8_t) osInfo.dwMinorVersion;
136  fetched->m_revision = (uint8_t) osInfo.dwBuildNumber;
137  }
138 #elif defined(__GNUC__)
139  struct utsname utsn;
140  if (0 == uname(&utsn))
141  {
142  fetched = (XsSimpleVersion*)malloc(sizeof(XsSimpleVersion));
143  unsigned int major = 0, minor = 0, revis = 0;
144  sscanf(utsn.release, "%u.%u.%u", &major, &minor, &revis);
145  fetched->m_major = major;
146  fetched->m_minor = minor;
147  fetched->m_revision = revis;
148  }
149 #else
150  fetched = (XsSimpleVersion*)malloc(sizeof(XsSimpleVersion));
151  fetched->m_major = 0;
152  fetched->m_minor = 0;
153  fetched->m_revision = 0;
154 #endif
155  }
156  if (fetched && thisPtr)
157  memcpy(thisPtr, fetched, sizeof(XsSimpleVersion));
158 }
159 
XsSimpleVersion_swap
void XsSimpleVersion_swap(struct XsSimpleVersion *a, struct XsSimpleVersion *b)
Swap the contents of a with those of b.
Definition: xssimpleversion.c:98
XsSimpleVersion_compare
int XsSimpleVersion_compare(XsSimpleVersion const *a, XsSimpleVersion const *b)
Compare two XsSimpleVersion objects.
Definition: xssimpleversion.c:110
XsSimpleVersion_osVersion
void XsSimpleVersion_osVersion(XsSimpleVersion *thisPtr)
Platdorm independent request of the OS version. Results are cached and of course platform dependent.
Definition: xssimpleversion.c:120
XsSimpleVersion::m_major
uint8_t m_major
The major part of the version number.
Definition: xssimpleversion.h:219
xssimpleversion.h
XsSimpleVersion
A class to store version information.
Definition: xssimpleversion.h:91
XsSimpleVersion::XsSimpleVersion_empty
int XsSimpleVersion_empty(const XsSimpleVersion *thisPtr)
Test if this is a null-version.
Definition: xssimpleversion.c:87
XsSimpleVersion::m_minor
uint8_t m_minor
The minor part of the version number.
Definition: xssimpleversion.h:220
XsSimpleVersion::m_revision
uint8_t m_revision
The revision number of the version.
Definition: xssimpleversion.h:221


xsens_mti_driver
Author(s):
autogenerated on Sun Sep 3 2023 02:43:20