fix doxygen comments
[platform/core/api/application.git] / app_common / app_package.c
1 /*
2  * Copyright (c) 2011 - 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #include <stdlib.h>
19 #include <unistd.h>
20 #include <string.h>
21
22 #include <aul.h>
23 #include <pkgmgr-info.h>
24 #include <dlog.h>
25
26 #include <app_internal.h>
27
28 #ifdef LOG_TAG
29 #undef LOG_TAG
30 #endif
31
32 #define LOG_TAG "CAPI_APPFW_APPLICATION"
33
34 int app_get_package_app_name(const char *appid, char **name)
35 {
36         char *name_token = NULL;
37
38         if (appid == NULL)
39                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
40
41         /* com.vendor.name -> name */
42         name_token = strrchr(appid, '.');
43         if (name_token == NULL)
44                 return app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, NULL);
45
46         name_token++;
47
48         *name = strdup(name_token);
49         if (*name == NULL)
50                 return app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
51
52         return APP_ERROR_NONE;
53 }
54
55 int app_get_package(char **package)
56 {
57         return app_get_id(package);
58 }
59
60 int app_get_id(char **id)
61 {
62         static char id_buf[TIZEN_PATH_MAX] = {0, };
63         int ret = -1;
64
65         if (id == NULL)
66                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
67
68         if (id_buf[0] == '\0') {
69                 ret = aul_app_get_appid_bypid(getpid(), id_buf, sizeof(id_buf));
70                 if (ret < 0)
71                         return app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the application ID");
72         }
73
74         if (id_buf[0] == '\0')
75                 return app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the application ID");
76
77         *id = strdup(id_buf);
78         if (*id == NULL)
79                 return app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
80
81         return APP_ERROR_NONE;
82 }
83
84 int app_get_name(char **name)
85 {
86         int retval = 0;
87         char *appid = NULL;
88         char *label = NULL;
89         pkgmgrinfo_appinfo_h appinfo = NULL;
90
91         if (name == NULL)
92                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
93
94         if (app_get_id(&appid) != 0)
95                 return app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the package");
96
97         retval = pkgmgrinfo_appinfo_get_usr_appinfo(appid, getuid(), &appinfo);
98         if (retval != 0) {
99                 free(appid);
100                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
101         }
102
103         retval = pkgmgrinfo_appinfo_get_label(appinfo, &label);
104         if (retval != 0) {
105                 free(appid);
106                 pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
107                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
108         }
109
110         *name = strdup(label);
111         pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
112         free(appid);
113
114         if (*name == NULL)
115                 return app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
116
117         return APP_ERROR_NONE;
118 }
119
120 int app_get_version(char **version)
121 {
122         int retval = 0;
123         char *appid = NULL;
124         char *pkgid = NULL;
125         char *pkg_version = NULL;
126         pkgmgrinfo_pkginfo_h pkginfo = NULL;
127         pkgmgrinfo_appinfo_h appinfo = NULL;
128
129         if (version == NULL)
130                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
131
132         if (app_get_id(&appid) != 0)
133                 return app_error(APP_ERROR_INVALID_CONTEXT, __FUNCTION__, "failed to get the package");
134
135         retval = pkgmgrinfo_appinfo_get_usr_appinfo(appid, getuid(), &appinfo);
136         if (retval != 0) {
137                 free(appid);
138                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
139         }
140
141         retval = pkgmgrinfo_appinfo_get_pkgid(appinfo, &pkgid);
142         if (retval != 0) {
143                 free(appid);
144                 pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
145                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
146         }
147
148         retval = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkginfo);
149         if (retval != 0) {
150                 free(appid);
151                 pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
152                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
153         }
154
155         retval = pkgmgrinfo_pkginfo_get_version(pkginfo, &pkg_version);
156         if (retval != 0) {
157                 free(appid);
158                 pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
159                 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
160                 return app_error(APP_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
161         }
162
163         *version = strdup(pkg_version);
164         pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
165         pkgmgrinfo_appinfo_destroy_appinfo(appinfo);
166         free(appid);
167
168         if (*version == NULL)
169                 return app_error(APP_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
170
171         return APP_ERROR_NONE;
172 }
173