tizen 2.3.1 release
[apps/home/installer.git] / src / installer_util.c
1 #include <errno.h>
2 #include <dlog.h>
3 #include <string.h>
4 #include <stdlib.h>
5
6 #include "installer_util.h"
7
8
9 char * get_file_extension(const char *file_path)
10 {
11         return strrchr(file_path, '.') + 1;
12 }
13
14
15 char * modify_file_path(const char *file_path)
16 {
17         return strchr(file_path, '/') + 2;
18 }
19
20 int is_valid_version(const char* version)
21 {
22         int major, minor, macro;
23
24         return extract_version(version, &major, &minor, &macro);
25 }
26
27 int extract_version(const char* version, int* major, int* minor, int* macro)
28 {
29         char* version_temp = NULL;
30         char* major_str = NULL;
31         char* minor_str = NULL;
32         char* macro_str = NULL;
33
34         version_temp = strdup(version);
35
36         major_str = strtok(version_temp, ".");
37         if (major_str == NULL)
38         {
39                 LOGE("%s strtok() failed. major version is NULL.", __func__);
40                 free(version_temp);
41                 return -1;
42         }
43
44         minor_str = strtok(NULL, ".");
45         if (minor_str == NULL)
46         {
47                 LOGE("%s strtok() failed. minor version is NULL.", __func__);
48                 free(version_temp);
49                 return -1;
50         }
51
52         *major = atoi(major_str);
53         *minor = atoi(minor_str);
54
55         macro_str = strtok(NULL, ".");
56         if (macro_str == NULL)
57         {
58                 LOGI("%s strtok() failed. macro version is NULL.", __func__);
59                 LOGI("%s version = [%s] -> major = [%d], minor = [%d]", __func__, version, *major, *minor);
60         }
61         else
62         {
63                 *macro = atoi(macro_str);
64                 LOGI("%s version = [%s] -> major = [%d], minor = [%d], macro = [%d]", __func__, version, *major, *minor, *macro);
65         }
66
67         free(version_temp);
68
69         return 0;
70 }
71
72
73 int compare_version(const char* old_version, const char* new_version)
74 {
75         int res = 0;
76         int old_version_major = 0;
77         int old_version_minor = 0;
78         int old_version_macro = 0;
79         int new_version_major = 0;
80         int new_version_minor = 0;
81         int new_version_macro = 0;
82
83         res = extract_version(new_version, &new_version_major, &new_version_minor, &new_version_macro);
84         if (res < 0)
85         {
86                 LOGE("%s extract_verison() failed.(%d)", __func__, res);
87                 return VERSION_ERROR;
88         }
89
90         res = extract_version(old_version, &old_version_major, &old_version_minor, &old_version_macro);
91         if (res < 0)
92         {
93                 LOGE("%s extract_verison() failed.(%d)", __func__, res);
94                 return VERSION_ERROR;
95         }
96
97         LOGI("new[%d.%d.%d] old[%d.%d.%d]", new_version_major, new_version_minor, new_version_macro,
98                  old_version_major, old_version_minor, old_version_macro);
99
100         if (new_version_major > old_version_major)
101         {
102                 return VERSION_NEW;
103         }
104         else if (new_version_major < old_version_major)
105         {
106                 return VERSION_OLD;
107         }
108
109         if (new_version_minor > old_version_minor)
110         {
111                 return VERSION_NEW;
112         }
113         else if (new_version_minor < old_version_minor)
114         {
115                 return VERSION_OLD;
116         }
117
118         if (new_version_macro > old_version_macro)
119         {
120                 return VERSION_NEW;
121         }
122         else if (new_version_macro < old_version_macro)
123         {
124                 return VERSION_OLD;
125         }
126
127         return VERSION_SAME;
128 }