1 /*
2 * This software is licensed under the terms of the MIT License.
3 * See COPYING for further information.
4 * ---
5 * Copyright (c) 2011-2019, Lukas Weber <laochailan@web.de>.
6 * Copyright (c) 2012-2019, Andrei Alexeyev <akari@taisei-project.org>.
7 */
8
9 #include "taisei.h"
10
11 #include "version.h"
12
taisei_version_compare(TaiseiVersion * v1,TaiseiVersion * v2,TaiseiVersionCmpLevel level)13 int taisei_version_compare(TaiseiVersion *v1, TaiseiVersion *v2, TaiseiVersionCmpLevel level) {
14 int result = 0;
15
16 if((result = (int)v1->major - (int)v2->major) && level >= VCMP_MAJOR) return result;
17 if((result = (int)v1->minor - (int)v2->minor) && level >= VCMP_MINOR) return result;
18 if((result = (int)v1->patch - (int)v2->patch) && level >= VCMP_PATCH) return result;
19 if((result = (int)v1->tweak - (int)v2->tweak) && level >= VCMP_TWEAK) return result;
20
21 return result;
22 }
23
taisei_version_read(SDL_RWops * rwops,TaiseiVersion * version)24 size_t taisei_version_read(SDL_RWops *rwops, TaiseiVersion *version) {
25 // XXX: detect errors somehow?
26
27 version->major = SDL_ReadU8(rwops);
28 version->minor = SDL_ReadU8(rwops);
29 version->patch = SDL_ReadU8(rwops);
30 version->tweak = SDL_ReadLE16(rwops);
31
32 return TAISEI_VERSION_SIZE;
33 }
34
taisei_version_write(SDL_RWops * rwops,TaiseiVersion * version)35 size_t taisei_version_write(SDL_RWops *rwops, TaiseiVersion *version) {
36 size_t wrote_now = 0, wrote_total = 0;
37
38 if(!(wrote_now = SDL_WriteU8(rwops, version->major))) {
39 return wrote_total;
40 } else {
41 wrote_total += wrote_now;
42 }
43
44 if(!(wrote_now = SDL_WriteU8(rwops, version->minor))) {
45 return wrote_total;
46 } else {
47 wrote_total += wrote_now;
48 }
49
50 if(!(wrote_now = SDL_WriteU8(rwops, version->patch))) {
51 return wrote_total;
52 } else {
53 wrote_total += wrote_now;
54 }
55
56 if(!(wrote_now = 2 * SDL_WriteLE16(rwops, version->tweak))) {
57 return wrote_total;
58 } else {
59 wrote_total += wrote_now;
60 }
61
62 assert(wrote_total == TAISEI_VERSION_SIZE);
63 return wrote_total;
64 }
65
taisei_version_tostring(TaiseiVersion * version)66 char* taisei_version_tostring(TaiseiVersion *version) {
67 if(!version->tweak) {
68 if(!version->patch) {
69 return strfmt("%u.%u", version->major, version->minor);
70 }
71
72 return strfmt("%u.%u.%u", version->major, version->minor, version->patch);
73 }
74
75 return strfmt("%u.%u.%u.%u", version->major, version->minor, version->patch, version->tweak);
76 }
77