4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Yong Yeon Kim <yy9875.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
28 #include <dbus/dbus-glib.h>
29 #include <dbus/dbus.h>
30 #include <dbus/dbus-glib-lowlevel.h>
32 #include "media-util.h"
33 #include "media-server-ipc.h"
34 #include "media-common-dbg.h"
35 #include "media-common-system.h"
36 #include "media-common-utils.h"
40 #define MILLION 1000000L
41 struct timeval g_mmc_start_time;
42 struct timeval g_mmc_end_time;
45 #define MS_DRM_CONTENT_TYPE_LENGTH 100
48 void ms_check_start_time(struct timeval *start_time)
50 gettimeofday(start_time, NULL);
53 void ms_check_end_time(struct timeval *end_time)
55 gettimeofday(end_time, NULL);
58 void ms_check_time_diff(struct timeval *start_time, struct timeval *end_time)
63 time.tv_sec = end_time->tv_sec - start_time->tv_sec;
64 time.tv_usec = end_time->tv_usec - start_time->tv_usec;
65 difftime = MILLION * time.tv_sec + time.tv_usec;
66 MS_DBG("The function_to_time took %ld microseconds or %f seconds.",
67 difftime, difftime / (double)MILLION);
71 bool ms_is_mmc_inserted(void)
74 ms_stg_type_e stg_type = MS_STG_TYPE_MMC;
75 GArray *dev_list = NULL;
77 ret = ms_sys_get_device_list(stg_type, &dev_list);
78 if (ret == MS_MEDIA_ERR_NONE) {
79 if (dev_list != NULL) {
80 MS_DBG_ERR("MMC FOUND[%d]", dev_list->len);
81 ms_sys_release_device_list(&dev_list);
84 MS_DBG_ERR("MMC NOT FOUND");
87 MS_DBG_ERR("ms_sys_get_device_list failed");
93 static char* __media_get_path(uid_t uid)
95 char *result_psswd = NULL;
96 struct group *grpinfo = NULL;
99 if (uid == getuid()) {
100 result_psswd = strndup(MEDIA_ROOT_PATH_INTERNAL, strlen(MEDIA_ROOT_PATH_INTERNAL));
101 grpinfo = getgrnam("users");
102 if (grpinfo == NULL) {
103 MS_DBG_ERR("getgrnam(users) returns NULL !");
104 MS_SAFE_FREE(result_psswd);
108 struct passwd *userinfo = getpwuid(uid);
109 if (userinfo == NULL) {
110 MS_DBG_ERR("getpwuid(%d) returns NULL !", uid);
113 grpinfo = getgrnam("users");
114 if (grpinfo == NULL) {
115 MS_DBG_ERR("getgrnam(users) returns NULL !");
118 // Compare git_t type and not group name
119 if (grpinfo->gr_gid != userinfo->pw_gid) {
120 MS_DBG_ERR("UID [%d] does not belong to 'users' group!", uid);
123 result_psswd = strndup(userinfo->pw_dir, strlen(userinfo->pw_dir));
129 ms_storage_type_t ms_get_storage_type_by_full(const char *path, uid_t uid)
132 int ret = MS_MEDIA_ERR_NONE;
133 char * user_path = NULL;
136 return MS_MEDIA_ERR_INVALID_PATH;
138 user_path = __media_get_path(uid);
139 if (user_path == NULL)
140 return MS_MEDIA_ERR_OUT_OF_MEMORY;
142 length_path = strlen(user_path);
144 if (strncmp(path, user_path, length_path) == 0) {
145 ret = MS_STORAGE_INTERNAL;
146 } else if (strncmp(path, MEDIA_ROOT_PATH_SDCARD, strlen(MEDIA_ROOT_PATH_SDCARD)) == 0) {
147 ret = MS_STORAGE_EXTERNAL;
148 } else if (strncmp(path, MEDIA_ROOT_PATH_USB, strlen(MEDIA_ROOT_PATH_USB)) == 0) {
149 ret = MS_STORAGE_EXTERNAL_USB;
151 ret = MS_MEDIA_ERR_INVALID_PATH;
154 MS_SAFE_FREE(user_path);
159 int ms_strappend(char *res, const int size, const char *pattern,
160 const char *str1, const char *str2)
163 int real_size = size - 1;
165 if (!res ||!pattern || !str1 ||!str2 )
166 return MS_MEDIA_ERR_INVALID_PARAMETER;
168 if (real_size < (int)(strlen(str1) + strlen(str2)))
169 return MS_MEDIA_ERR_INVALID_PARAMETER;
171 len = snprintf(res, real_size, pattern, str1, str2);
173 return MS_MEDIA_ERR_INVALID_PARAMETER;
178 return MS_MEDIA_ERR_NONE;
181 int ms_strcopy(char *res, const int size, const char *pattern, const char *str1)
184 int real_size = size;
186 if (!res || !pattern || !str1) {
187 MS_DBG_ERR("parameta is invalid");
188 return MS_MEDIA_ERR_INVALID_PARAMETER;
191 if (real_size < (int)(strlen(str1))) {
192 MS_DBG_ERR("size is wrong");
193 return MS_MEDIA_ERR_INVALID_PARAMETER;
196 len = snprintf(res, real_size, pattern, str1);
198 MS_DBG_ERR("snprintf failed");
199 return MS_MEDIA_ERR_INVALID_PARAMETER;
204 return MS_MEDIA_ERR_NONE;
207 bool ms_config_get_int(const char *key, int *value)
211 if (!key || !value) {
212 MS_DBG_ERR("Arguments key or value is NULL");
216 err = vconf_get_int(key, value);
222 MS_DBG_ERR("Unexpected error code: %d", err);
227 bool ms_config_set_int(const char *key, int value)
232 MS_DBG_ERR("Arguments key is NULL");
236 err = vconf_set_int(key, value);
242 MS_DBG_ERR("Unexpected error code: %d", err);
247 bool ms_config_get_str(const char *key, char **value)
251 if (key == NULL || value == NULL) {
252 MS_DBG_ERR("Arguments key or value is NULL");
256 res = vconf_get_str(key);
257 if (MS_STRING_VALID(res)) {
258 *value = strdup(res);
266 bool ms_config_set_str(const char *key, const char *value)
270 if (!key || !value) {
271 MS_DBG_ERR("Arguments key or value is NULL");
275 err = vconf_set_str(key, value);
279 MS_DBG_ERR("fail to vconf_set_str %d", err);
284 bool ms_config_get_bool(const char *key, int *value)
288 if (!key || !value) {
289 MS_DBG_ERR("Arguments key or value is NULL");
293 err = vconf_get_bool(key, value);
299 MS_DBG_ERR("Unexpected error code: %d", err);