4 * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 #include "cal_internal.h"
25 #include "cal_typedef.h"
27 #include "cal_record.h"
28 #include "cal_utils.h"
30 static int _cal_record_extended_create(calendar_record_h* out_record);
31 static int _cal_record_extended_destroy(calendar_record_h record, bool delete_child);
32 static int _cal_record_extended_clone(calendar_record_h record, calendar_record_h* out_record);
33 static int _cal_record_extended_get_str(calendar_record_h record, unsigned int property_id, char** out_str);
34 static int _cal_record_extended_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str);
35 static int _cal_record_extended_get_int(calendar_record_h record, unsigned int property_id, int* out_value);
36 static int _cal_record_extended_set_str(calendar_record_h record, unsigned int property_id, const char* value);
37 static int _cal_record_extended_set_int(calendar_record_h record, unsigned int property_id, int value);
39 cal_record_plugin_cb_s cal_record_extended_plugin_cb = {
40 .create = _cal_record_extended_create,
41 .destroy = _cal_record_extended_destroy,
42 .clone = _cal_record_extended_clone,
43 .get_str = _cal_record_extended_get_str,
44 .get_str_p = _cal_record_extended_get_str_p,
45 .get_int = _cal_record_extended_get_int,
49 .set_str = _cal_record_extended_set_str,
50 .set_int = _cal_record_extended_set_int,
54 .add_child_record = NULL,
55 .remove_child_record = NULL,
56 .get_child_record_count = NULL,
57 .get_child_record_at_p = NULL,
58 .clone_child_record_list = NULL
61 static void _cal_record_extended_struct_init(cal_extended_s *record)
63 memset(record, 0, sizeof(cal_extended_s));
66 static int _cal_record_extended_create(calendar_record_h* out_record)
68 cal_extended_s *temp = NULL;
69 int ret = CALENDAR_ERROR_NONE;
71 temp = calloc(1, sizeof(cal_extended_s));
72 RETVM_IF(NULL == temp, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
74 _cal_record_extended_struct_init(temp);
76 *out_record = (calendar_record_h)temp;
81 static void _cal_record_extended_struct_free(cal_extended_s *record)
83 CAL_FREE(record->key);
84 CAL_FREE(record->value);
89 static int _cal_record_extended_destroy(calendar_record_h record, bool delete_child)
91 int ret = CALENDAR_ERROR_NONE;
93 cal_extended_s *temp = (cal_extended_s*)(record);
95 _cal_record_extended_struct_free(temp);
100 static int _cal_record_extended_clone(calendar_record_h record, calendar_record_h* out_record)
102 cal_extended_s *out_data = NULL;
103 cal_extended_s *src_data = NULL;
105 src_data = (cal_extended_s*)(record);
107 out_data = calloc(1, sizeof(cal_extended_s));
108 RETVM_IF(NULL == out_data, CALENDAR_ERROR_OUT_OF_MEMORY, "calloc() Fail");
110 CAL_RECORD_COPY_COMMON(&(out_data->common), &(src_data->common));
112 out_data->id = src_data->id;
113 out_data->record_id = src_data->record_id;
114 out_data->record_type = src_data->record_type;
115 out_data->key = cal_strdup(src_data->key);
116 out_data->value = cal_strdup(src_data->value);
118 *out_record = (calendar_record_h)out_data;
120 return CALENDAR_ERROR_NONE;
123 static int _cal_record_extended_get_str(calendar_record_h record, unsigned int property_id, char** out_str)
125 cal_extended_s *rec = (cal_extended_s*)(record);
126 switch (property_id) {
127 case CAL_PROPERTY_EXTENDED_KEY:
128 *out_str = cal_strdup(rec->key);
130 case CAL_PROPERTY_EXTENDED_VALUE:
131 *out_str = cal_strdup(rec->value);
134 /* LCOV_EXCL_START */
135 ERR("invalid parameter (property:0x%x)", property_id);
136 return CALENDAR_ERROR_INVALID_PARAMETER;
140 return CALENDAR_ERROR_NONE;
143 static int _cal_record_extended_get_str_p(calendar_record_h record, unsigned int property_id, char** out_str)
145 cal_extended_s *rec = (cal_extended_s*)(record);
146 switch (property_id) {
147 case CAL_PROPERTY_EXTENDED_KEY:
148 *out_str = (rec->key);
150 case CAL_PROPERTY_EXTENDED_VALUE:
151 *out_str = (rec->value);
154 /* LCOV_EXCL_START */
155 ERR("invalid parameter (property:0x%x)", property_id);
156 return CALENDAR_ERROR_INVALID_PARAMETER;
160 return CALENDAR_ERROR_NONE;
163 static int _cal_record_extended_get_int(calendar_record_h record, unsigned int property_id, int* out_value)
165 cal_extended_s *rec = (cal_extended_s*)(record);
166 switch (property_id) {
167 case CAL_PROPERTY_EXTENDED_ID:
168 *out_value = (rec->id);
170 case CAL_PROPERTY_EXTENDED_RECORD_ID:
171 *out_value = (rec->record_id);
173 case CAL_PROPERTY_EXTENDED_RECORD_TYPE:
174 *out_value = (rec->record_type);
177 /* LCOV_EXCL_START */
178 ERR("invalid parameter (property:0x%x)", property_id);
179 return CALENDAR_ERROR_INVALID_PARAMETER;
183 return CALENDAR_ERROR_NONE;
186 static int _cal_record_extended_set_str(calendar_record_h record, unsigned int property_id, const char* value)
188 cal_extended_s *rec = (cal_extended_s*)(record);
189 switch (property_id) {
190 case CAL_PROPERTY_EXTENDED_KEY:
192 rec->key = cal_strdup(value);
194 case CAL_PROPERTY_EXTENDED_VALUE:
195 CAL_FREE(rec->value);
196 rec->value = cal_strdup(value);
199 /* LCOV_EXCL_START */
200 ERR("invalid parameter (property:0x%x)", property_id);
201 return CALENDAR_ERROR_INVALID_PARAMETER;
205 return CALENDAR_ERROR_NONE;
208 static int _cal_record_extended_set_int(calendar_record_h record, unsigned int property_id, int value)
210 cal_extended_s *rec = (cal_extended_s*)(record);
211 switch (property_id) {
212 case CAL_PROPERTY_EXTENDED_ID:
215 case CAL_PROPERTY_EXTENDED_RECORD_ID:
216 RETVM_IF(0 < rec->id, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter : property_id(%d) is a write-once value (calendar)", property_id);
217 (rec->record_id) = value;
219 case CAL_PROPERTY_EXTENDED_RECORD_TYPE:
220 (rec->record_type) = value;
223 /* LCOV_EXCL_START */
224 ERR("invalid parameter (property:0x%x)", property_id);
225 return CALENDAR_ERROR_INVALID_PARAMETER;
229 return CALENDAR_ERROR_NONE;