Add fixes for gcc 9
[platform/core/security/libcryptsvc.git] / srcs / device_info.c
1 /*
2  * device info
3  *
4  * Copyright (c) 2000 - 2014 Samsung Electronics Co., Ltd All Rights Reserved
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <string.h>
21 #include <pthread.h>
22
23 #include <dlog.h>
24 #include <system_info.h>
25
26 #include <device_info.h>
27
28 #ifdef LOG_TAG
29 #undef LOG_TAG
30 #define LOG_TAG "LIBCRYPTSVC"
31 #endif
32
33 #define TIZENID_STRING "http://tizen.org/system/tizenid"
34
35 char *_device_id = NULL;
36 int _is_loaded = false;
37 pthread_once_t _load_once_block = PTHREAD_ONCE_INIT;
38
39 void load_device_id(void)
40 {
41         if (!_device_id
42                         && system_info_get_platform_string(TIZENID_STRING,
43                                         &_device_id) != SYSTEM_INFO_ERROR_NONE) {
44                 SECURE_LOGE("Failed to generate DUID.");
45                 return;
46         }
47
48         _is_loaded = true;
49 }
50
51
52 __attribute__((visibility("default")))
53 const char *get_device_id(void)
54 {
55         if (!_is_loaded) {
56                 pthread_once(&_load_once_block, load_device_id);
57
58                 if (!_is_loaded
59                                 || !_device_id
60                                 || !strlen(_device_id)) {
61                         LOGE("failed to get device id");
62                         _load_once_block = PTHREAD_ONCE_INIT;
63                         return NULL;
64                 }
65         }
66
67         return _device_id;
68 }