Beispiel #1
0
int mida_delete_with_pkgname(const char *pkg_name)
{
	int rc = 0;

	retvm_if(pkg_name == NULL, -1,
		 "Invalid argument: data to delete is NULL\n");

	if (_init() < 0)
		return -1;
	rc = __delete_with_field(MIDA_TBL_NAME, MIDA_F_PKGNAME, pkg_name, 1);
	__fini();

	return rc;
}
Beispiel #2
0
int mida_delete_with_mimetype(const char *mime_type)
{
	int rc = 0;

	retvm_if(mime_type == NULL, -1,
		 "Invalid argument: data to delete is NULL\n");

	if (_init() < 0)
		return -1;
	rc = __delete_with_field(MIDA_TBL_NAME, MIDA_F_MIMETYPE, mime_type, 0);
	__fini();

	return rc;
}
static inline int cts_merge_vcard_company(cts_company *orig, cts_company *addition)
{
	bool temp;

	retvm_if(NULL == addition, CTS_ERR_ARG_INVALID, "Invalid addition(%p)", addition);

	CTS_VCARD_MOVE_TO(orig->name, addition->name, temp);
	CTS_VCARD_MOVE_TO(orig->department, addition->department, temp);
	CTS_VCARD_MOVE_TO(orig->jot_title, addition->jot_title, temp);
	CTS_VCARD_MOVE_TO(orig->role, addition->role, temp);
	CTS_VCARD_MOVE_TO(orig->assistant_name, addition->assistant_name, temp);

	return CTS_SUCCESS;
}
static inline int cts_merge_vcard_base(cts_ct_base *orig, cts_ct_base *addition)
{
	int ret;
	char dest[CTS_IMG_PATH_SIZE_MAX];

	retvm_if(NULL == addition, CTS_ERR_ARG_INVALID, "Invalid addition(%p)", addition);

	if (NULL == orig->img_path) {
		if (orig->id && addition->img_path) {
			ret = snprintf(dest, sizeof(dest), "%s/%d-%d.", CTS_IMAGE_LOCATION,
					orig->id, CTS_IMG_NORMAL);
			if (0 != strncmp(dest, addition->img_path, ret)) {
				orig->img_path = addition->img_path;
				orig->img_changed = true;
				addition->img_path = NULL;
			}
		} else {
			orig->img_path = addition->img_path;
			orig->img_changed = true;
			addition->img_path = NULL;
		}
	}

	if (NULL == orig->full_img_path) {
		if (orig->id && addition->full_img_path) {
			ret = snprintf(dest, sizeof(dest), "%s/%d-%d.", CTS_IMAGE_LOCATION,
					orig->id, CTS_IMG_FULL);
			if (0 != strncmp(dest, addition->full_img_path, ret)) {
				orig->full_img_path = addition->full_img_path;
				orig->full_img_changed = true;
				addition->full_img_path = NULL;
			}
		} else {
			orig->full_img_path = addition->full_img_path;
			orig->full_img_changed = true;
			addition->full_img_path = NULL;
		}
	}

	CTS_VCARD_MOVE_TO(orig->uid, addition->uid, orig->uid_changed);
	CTS_VCARD_MOVE_TO(orig->note, addition->note, orig->note_changed);
	CTS_VCARD_MOVE_TO(orig->ringtone_path, addition->ringtone_path, orig->ringtone_changed);
	if (NULL == orig->vcard_img_path) {
		orig->vcard_img_path = addition->vcard_img_path;
		addition->vcard_img_path = NULL;
	}

	return CTS_SUCCESS;
}
static inline cts_number* cts_struct_dup_number(const cts_number *src)
{
	cts_number *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_number));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_number));

		if (src->number)
			result->number = strdup(src->number);
	}

	return result;
}
static inline cts_email* cts_struct_dup_email(const cts_email *src)
{
	cts_email *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_email));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_email));

		if (src->email_addr)
			result->email_addr = strdup(src->email_addr);
	}

	return result;
}
static inline cts_web* cts_struct_dup_web(const cts_web *src)
{
	cts_web *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_web));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_web));

		if (src->url)
			result->url = strdup(src->url);
	}

	return result;
}
static inline cts_nickname* cts_struct_dup_nick(const cts_nickname *src)
{
	cts_nickname *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_nickname));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_nickname));

		if (src->nick)
			result->nick = strdup(src->nick);
	}

	return result;
}
static inline int cts_merge_vcard_name(cts_name *orig, cts_name *addition)
{
	retvm_if(NULL == addition, CTS_ERR_ARG_INVALID, "Invalid addition(%p)", addition);

	if (NULL == orig->first && NULL == orig->last) {
		CTS_VCARD_MOVE_TO(orig->first, addition->first, orig->is_changed);
		CTS_VCARD_MOVE_TO(orig->last, addition->last, orig->is_changed);
	}
	CTS_VCARD_MOVE_TO(orig->addition, addition->addition, orig->is_changed);
	CTS_VCARD_MOVE_TO(orig->display, addition->display, orig->is_changed);
	CTS_VCARD_MOVE_TO(orig->prefix, addition->prefix, orig->is_changed);
	CTS_VCARD_MOVE_TO(orig->suffix, addition->suffix, orig->is_changed);

	return CTS_SUCCESS;
}
ui_gadget_h create_button_ug(void *data)
{
	ui_gadget_h ug = NULL;
	struct ug_cbs cbs = {0};
	struct appdata *ad = (struct appdata *)data;
	retvm_if(ad == NULL, 0, "Invalid argument:appdata is NULL\n");

	cbs.layout_cb = button_ug_layout_cb;
	cbs.destroy_cb = button_ug_destroy_cb;
	cbs.priv = (void *)data;

	ecore_x_netwm_window_type_set(elm_win_xwindow_get(ad->win), ECORE_X_WINDOW_TYPE_NORMAL);
	utilx_set_window_opaque_state(ecore_x_display_get(), elm_win_xwindow_get(ad->win), UTILX_OPAQUE_STATE_ON);
	ug = ug_create(NULL, "setting-profile-efl", UG_MODE_FULLVIEW, NULL, &cbs);

	return ug;
}
Beispiel #11
0
/**
* send
* This function is  used to create blank
* @param           parent[in]               pointer to evas object, as the  parent
* @param           minw[in]                 Evas_Coord, as min width
* @param           minh[in]                 Evas_Coord, as min height
* @return          when success, return a pointer to evas object, or return NULL
* @exception
*/
Evas_Object *widget_create_rectangle_blank(Evas_Object * parent,
					   Evas_Object * parent_box,
					   Evas_Coord minw, Evas_Coord minh)
{
	Evas_Object *rect;
	//CLK_FUN_BEG();
	rect = evas_object_rectangle_add(evas_object_evas_get(parent));
	retvm_if(NULL_CHECK(rect), NULL, "rect null");
	evas_object_size_hint_min_set(rect, minw, minh);
	evas_object_size_hint_weight_set(rect, 0.0, 0.0);
	evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_color_set(rect, 0, 0, 0, 0);
	elm_box_pack_end(parent_box, rect);
	evas_object_show(rect);
	//CLK_FUN_END();
	return rect;
}
extern "C" sensor_module* create(void)
{
	pir_long_sensor *sensor;

	try {
		sensor = new(std::nothrow) pir_long_sensor;
	} catch (int err) {
		ERR("Failed to create module, err: %d, cause: %s", err, strerror(err));
		return NULL;
	}

	sensor_module *module = new(std::nothrow) sensor_module;
	retvm_if(!module || !sensor, NULL, "Failed to allocate memory");

	module->sensors.push_back(sensor);
	return module;
}
Beispiel #13
0
/**
 * exec  
 * param[in] db handler
 * param[in] query query
 * return This method returns 0 (SUCCESS) or -1 (FAIL)
 */
static int _exec(sqlite3 *db, char *query)
{
	int rc = 0;
	char *errmsg = NULL;

	retvm_if(db == NULL, -1, "DB handler is null");

	rc = sqlite3_exec(db, query, NULL, 0, &errmsg);

	if (rc != SQLITE_OK) {
		_D("Query: [%s]", query);
		_E("SQL error: %s\n", errmsg);
		sqlite3_free(errmsg);
		return (-1);
	}

	return 0;
}
static inline cts_messenger* cts_struct_dup_messenger(const cts_messenger *src)
{
	cts_messenger *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_messenger));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_messenger));

		if (src->im_id)
			result->im_id = strdup(src->im_id);
		if (src->svc_name)
			result->svc_name = strdup(src->svc_name);
		if (src->svc_op)
			result->svc_op = strdup(src->svc_op);
	}

	return result;
}
static inline cts_group* cts_struct_dup_grouprel(const cts_group *src)
{
	cts_group *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_group));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_group));

		if (src->name)
			result->name = strdup(src->name);
		if (src->ringtone_path)
			result->ringtone_path = strdup(src->ringtone_path);
		if (src->img_path)
			result->img_path = strdup(src->img_path);
	}

	return result;
}
int cts_inotify_init(void)
{
	cts_inoti_fd = inotify_init();
	retvm_if(-1 == cts_inoti_fd, CTS_ERR_INOTIFY_FAILED,
			"inotify_init() Failed(%d)", errno);

	fcntl(cts_inoti_fd, F_SETFD, FD_CLOEXEC);
	fcntl(cts_inoti_fd, F_SETFL, O_NONBLOCK);

	cts_inoti_handler = cts_inotify_attach_handler(cts_inoti_fd);
	if (cts_inoti_handler <= 0) {
		ERR("cts_inotify_attach_handler() Failed");
		close(cts_inoti_fd);
		cts_inoti_fd = -1;
		cts_inoti_handler = 0;
		return CTS_ERR_INOTIFY_FAILED;
	}

	return CTS_SUCCESS;
}
int _cals_alarm_add_to_db(const int event_id, cal_alarm_info_t *alarm_info)
{
	CALS_FN_CALL;
	int r;
	sqlite3_stmt *stmt = NULL;
	char query[CALS_SQL_MAX_LEN] = {0};

	sprintf(query, "INSERT INTO %s ("
			"event_id, "
			"alarm_time, remind_tick, remind_tick_unit, alarm_tone, "
			"alarm_description, alarm_type, alarm_id "
			") VALUES ( "
			"%d, "
			"%lld, %d, %d, ?, "
			"?, %d, %d )",
			CALS_TABLE_ALARM,
			event_id,
			alarm_info->alarm_time, alarm_info->remind_tick, alarm_info->remind_tick_unit,
			alarm_info->alarm_type, alarm_info->alarm_id);

	DBG("query(%s)\n", query);
	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	if (alarm_info->alarm_tone)
		cals_stmt_bind_text(stmt, 1, alarm_info->alarm_tone);

	if (alarm_info->alarm_description)
		cals_stmt_bind_text(stmt, 2, alarm_info->alarm_description);

	r = cals_stmt_step(stmt);
	sqlite3_finalize(stmt);

	if (CAL_SUCCESS != r) {
		ERR("cals_stmt_step() Failed(%d)", r);
		return r;
	}

	return CAL_SUCCESS;
}
API int contacts_svc_disconnect(void)
{
	CTS_FN_CALL;
	retvm_if(0 == cts_conn_refcnt, CTS_ERR_ENV_INVALID,
			"Contacts service was not connected");
	CTS_DBG("CTS DB refcnt = %d", cts_conn_refcnt);

	cts_mutex_lock(CTS_MUTEX_CONNECTION);
	if (1 == cts_conn_refcnt)
	{
		cts_socket_final();
		cts_deregister_noti();
		cts_db_close();
		cts_restriction_final();
		cts_conn_refcnt--;
	}
	else
		cts_conn_refcnt--;
	cts_mutex_unlock(CTS_MUTEX_CONNECTION);

	return CTS_SUCCESS;
}
static inline cts_company* cts_struct_dup_company(const cts_company *src)
{
	cts_company *result = NULL;
	if (src) {
		result = calloc(1, sizeof(cts_company));
		retvm_if(NULL == result, NULL, "calloc() Failed");

		memcpy(result, src, sizeof(cts_company));

		if (src->name)
			result->name = strdup(src->name);
		if (src->department)
			result->department = strdup(src->department);
		if (src->jot_title)
			result->jot_title = strdup(src->jot_title);
		if (src->role)
			result->role = strdup(src->role);
		if (src->assistant_name)
			result->assistant_name = strdup(src->assistant_name);
	}

	return result;
}
Beispiel #20
0
int is_supported_svc(const char *svc_name)
{
	int rc = 0;
	int cnt = 0;

	retvm_if(svc_name == NULL, 0, "Service name is null\n");

	if (__doubt_sql_injection(svc_name))
		return 0;

	if (_init() < 0)
		return 0;

	cnt = __count_with_field(SYSSVC_TBL_NAME, 
			SYSSVC_F_SVCNAME, svc_name, 0);

	if (cnt > 0)
		rc = 1;
	else
		_D("%s is not supported.", svc_name);

	__fini();
	return rc;
}
static inline int _cals_update_schedule(const int index, cal_sch_full_t *current_record)
{
	int ret = -1;
	char query[CALS_SQL_MAX_LEN] = {0};
	char dtstart_datetime[32] = {0};
	char dtend_datetime[32] = {0};
	sqlite3_stmt *stmt = NULL;

	retv_if(NULL == current_record, CAL_ERR_ARG_NULL);

	if (CAL_SYNC_STATUS_UPDATED != current_record->sync_status)
		current_record->sync_status = CAL_SYNC_STATUS_UPDATED;

	snprintf(query, sizeof(query), "UPDATE %s SET "
			"changed_ver = %d,"
			"type = %d,"
			"summary = ?,"
			"description = ?,"
			"location = ?,"
			"categories = ?,"
			"exdate = ?,"
			"missed = %d,"
			"task_status = %d,"
			"priority = %d,"
			"timezone = %d, "
			"file_id = %d, "
			"contact_id = %d, "
			"busy_status = %d, "
			"sensitivity = %d, "
			"uid = ?, "
			"calendar_type = %d, "
			"organizer_name = ?, "
			"organizer_email = ?, "
			"meeting_status = %d, "
			"gcal_id = ?, "
			"updated = ?, "
			"location_type = %d, "
			"location_summary = ?, "
			"etag = ?, "
			"calendar_id = %d, "
			"sync_status = %d, "
			"edit_uri = ?, "
			"gevent_id = ?, "
			"dst = %d,"
			"original_event_id = %d,"
			"latitude = %lf,"
			"longitude = %lf,"
			"email_id = %d,"
			"availability = %d,"
			"completed_time = %lld,"
			"progress = %d, "
			"dtstart_type = %d, "
			"dtstart_utime = %lld, "
			"dtstart_datetime = ?, "
			"dtstart_tzid = ?, "
			"dtend_type = %d, "
			"dtend_utime = %lld, "
			"dtend_datetime = ?, "
			"dtend_tzid = ?, "
			"last_mod = strftime('%%s', 'now')"
			"WHERE id = %d;",
		CALS_TABLE_SCHEDULE,
		cals_get_next_ver(),
		current_record->cal_type,
		current_record->missed,
		current_record->task_status,
		current_record->priority,
		current_record->timezone,
		current_record->file_id,
		current_record->contact_id,
		current_record->busy_status,
		current_record->sensitivity,
		current_record->calendar_type,
		current_record->meeting_status,
		current_record->location_type,
		current_record->calendar_id,
		current_record->sync_status,
		current_record->dst,
		current_record->original_event_id,
		current_record->latitude,
		current_record->longitude,
		current_record->email_id,
		current_record->availability,
		current_record->completed_time,
		current_record->progress,
		current_record->dtstart_type,
		current_record->dtstart_utime,
		current_record->dtend_type,
		current_record->dtend_utime,
		index);

	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	int count = 1;

	if (current_record->summary)
		cals_stmt_bind_text(stmt, count, current_record->summary);
	count++;

	if (current_record->description)
		cals_stmt_bind_text(stmt, count, current_record->description);
	count++;

	if (current_record->location)
		cals_stmt_bind_text(stmt, count, current_record->location);
	count++;

	if (current_record->categories)
		cals_stmt_bind_text(stmt, count, current_record->categories);
	count++;

	if (current_record->exdate)
		cals_stmt_bind_text(stmt, count, current_record->exdate);
	count++;

	if (current_record->uid)
		cals_stmt_bind_text(stmt, count, current_record->uid);
	count++;

	if (current_record->organizer_name)
		cals_stmt_bind_text(stmt, count, current_record->organizer_name);
	count++;

	if (current_record->organizer_email)
		cals_stmt_bind_text(stmt, count, current_record->organizer_email);
	count++;

	if (current_record->gcal_id)
		cals_stmt_bind_text(stmt, count, current_record->gcal_id);
	count++;

	if (current_record->updated)
		cals_stmt_bind_text(stmt, count, current_record->updated);
	count++;

	if (current_record->location_summary)
		cals_stmt_bind_text(stmt, count, current_record->location_summary);
	count++;

	if (current_record->etag)
		cals_stmt_bind_text(stmt, count, current_record->etag);
	count++;

	if (current_record->edit_uri)
		cals_stmt_bind_text(stmt, count, current_record->edit_uri);
	count++;

	if (current_record->gevent_id)
		cals_stmt_bind_text(stmt, count, current_record->gevent_id);
	count++;

	snprintf(dtstart_datetime, sizeof(dtstart_datetime), "%04d%02d%02d",
			current_record->dtstart_year,
			current_record->dtstart_month,
			current_record->dtstart_mday);
	cals_stmt_bind_text(stmt, count, dtstart_datetime);
	count++;

	if (current_record->dtstart_tzid)
		cals_stmt_bind_text(stmt, count, current_record->dtstart_tzid);
	count++;

	snprintf(dtend_datetime, sizeof(dtend_datetime), "%04d%02d%02d",
			current_record->dtend_year,
			current_record->dtend_month,
			current_record->dtend_mday);
	cals_stmt_bind_text(stmt, count, dtend_datetime);
	count++;

	if (current_record->dtend_tzid)
		cals_stmt_bind_text(stmt, count, current_record->dtend_tzid);
	count++;

	ret = cals_stmt_step(stmt);
	if (CAL_SUCCESS != ret) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step() Failed(%d)", ret);
		return ret;
	}
	sqlite3_finalize(stmt);

	return CAL_SUCCESS;
}
int cals_update_schedule(const int index, cal_sch_full_t *sch_record)
{
	bool is_success = false;
	cal_value * cvalue = NULL;
	int ret = 0;
	int rrule_id = 0;

	retv_if(NULL == sch_record, CAL_ERR_ARG_NULL);

	sch_record->missed = 0;

	ret = _cals_update_schedule(index, sch_record);
	retvm_if(CAL_SUCCESS != ret, ret, "_cals_update_schedule() Failed(%d)", ret);

	if (sch_record->freq != CALS_FREQ_ONCE) {
		ret = _cals_get_rrule_id(index, &rrule_id);

		if (rrule_id > 0) {
			ret = _cals_update_rrule(index, sch_record);
			retvm_if(CAL_SUCCESS != ret, ret, "Failed in update rrule(%d)", ret);

		} else {
			ret = _cals_insert_rrule(index, sch_record);
			if (ret < CAL_SUCCESS) {
				ERR("Failed in _cals_insert_rrule(%d)\n", ret);
				return ret;
			}
			sch_record->rrule_id = ret;
			DBG("added rrule_id(%d)", ret);
			ret = _cals_insert_rrule_id(index, sch_record);
			if (ret != CAL_SUCCESS) {
				ERR("Failed in _cals_insert_rrule_id(%d)\n", ret);
			}
			DBG("ended add");
		}
	}

	_cals_delete_participant_info(index);
	if (sch_record->attendee_list)
	{
		GList *list = g_list_first(sch_record->attendee_list);
		cal_participant_info_t* participant_info = NULL;

		while(list)
		{
			cvalue = (cal_value *)list->data;
			participant_info = (cal_participant_info_t*)cvalue->user_data;

			if (0 == participant_info->is_deleted) {
				ret = cal_service_add_participant_info(index, participant_info);
				warn_if(ret, "cal_service_add_participant_info() Failed(%d)", ret);
			}

			list = g_list_next(list);
		}
	}

	/* delete registered alarm */
	cals_alarm_remove(CALS_ALARM_REMOVE_BY_EVENT_ID, index);
	if (sch_record->alarm_list)
	{
		GList *list = sch_record->alarm_list;
		cal_alarm_info_t *alarm_info = NULL;
		struct cals_time dtstart;

		while (list)
		{
			cvalue = (cal_value *)list->data;
			alarm_info = (cal_alarm_info_t*)cvalue->user_data;

			if (alarm_info->is_deleted==0) {
				if (alarm_info->remind_tick != CALS_INVALID_ID) {
					dtstart.type = sch_record->dtstart_type;
					dtstart.utime = sch_record->dtstart_utime;
					dtstart.year = sch_record->dtstart_year;
					dtstart.month = sch_record->dtstart_month;
					dtstart.mday = sch_record->dtstart_mday;
					ret = cals_alarm_add(index, alarm_info, &dtstart);
					warn_if(CAL_SUCCESS != ret, "cals_alarm_add() Failed(%d)", ret);
				}
			}

			list = g_list_next(list);
		}
	}

	/* TODO: re register alarm */

	/* clear instance */
	ret = _cals_clear_instances(index);
	if (ret) {
		ERR("_cals_clear_instances failed (%d)", ret);
		return ret;
	}

	/* insert instance */
	struct cals_time st;
	struct cals_time et;

	st.type = sch_record->dtstart_type;
	if (st.type == CALS_TIME_UTIME)
		st.utime = sch_record->dtstart_utime;
	else {
		st.year = sch_record->dtstart_year;
		st.month = sch_record->dtstart_month;
		st.mday = sch_record->dtstart_mday;
	}

	et.type = sch_record->dtend_type;
	if (et.type == CALS_TIME_UTIME)
		et.utime = sch_record->dtend_utime;
	else {
		et.year = sch_record->dtend_year;
		et.month = sch_record->dtend_month;
		et.mday = sch_record->dtend_mday;
	}

	cals_instance_insert(index, &st, &et, sch_record);

	/* set notify */
	if(sch_record->cal_type == CALS_SCH_TYPE_EVENT)
		is_success= cals_notify(CALS_NOTI_TYPE_EVENT);
	else
		is_success= cals_notify(CALS_NOTI_TYPE_TODO);

	return CAL_SUCCESS;
}
static inline int _cals_insert_schedule(cal_sch_full_t *record)
{
	int ret = -1;
	char query[CALS_SQL_MAX_LEN] = {0};
	char dtstart_datetime[32] = {0};
	char dtend_datetime[32] = {0};
	sqlite3_stmt *stmt = NULL;

	retv_if(NULL == record, CAL_ERR_ARG_NULL);

	int input_ver = cals_get_next_ver();

	ret = snprintf(query, sizeof(query),
		"INSERT INTO %s ("
			"account_id, type, "
			"created_ver, changed_ver, "
			"summary, description, location, categories, exdate, "
			"missed, "
			"task_status, priority, timezone, file_id, "
			"contact_id, busy_status, sensitivity, uid, "
			"calendar_type, organizer_name, organizer_email, meeting_status, "
			"gcal_id, updated, location_type, "
			"location_summary, etag, calendar_id, sync_status, "
			"edit_uri, gevent_id, dst, original_event_id, "
			"latitude, longitude, "
			"email_id, availability, "
			"created_time, completed_time, progress, "
			"dtstart_type, dtstart_utime, dtstart_datetime, dtstart_tzid, "
			"dtend_type, dtend_utime, dtend_datetime, dtend_tzid, "
			"last_mod, rrule_id "
			") VALUES ( "
			"%d, %d, "
			"%d, %d, "
			"?, ?, ?, ?, ?, "
			"%d, "
			"%d, %d, %d, %d, "
			"%d, %d, %d, ?, "
			"%d, ?, ?, %d, "
			"?, ?, %d, "
			"?, ?, %d, %d, "
			"?, ?, %d, %d, "
			"%lf, %lf, "
			"%d, %d, "
			"strftime('%%s', 'now'), %lld, %d, "
			"%d, %lld, ?, ?, "
			"%d, %lld, ?, ?, "
			"strftime('%%s', 'now'), %d ) ",
			CALS_TABLE_SCHEDULE,
			record->account_id, record->cal_type,
			input_ver, input_ver,
			record->missed,
			record->task_status, record->priority,	record->timezone, record->file_id,
			record->contact_id, record->busy_status, record->sensitivity,
			record->calendar_type, record->meeting_status,
			record->location_type,
			record->calendar_id, record->sync_status,
			record->dst, record->original_event_id,
			record->latitude, record->longitude,
			record->email_id, record->availability,
			record->completed_time, record->progress,
			record->dtstart_type, record->dtstart_utime,
			record->dtend_type, record->dtend_utime,
			record->rrule_id);

	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	int count = 1;

	if (record->summary)
		cals_stmt_bind_text(stmt, count, record->summary);
	count++;

	if (record->description)
		cals_stmt_bind_text(stmt, count, record->description);
	count++;

	if (record->location)
		cals_stmt_bind_text(stmt, count, record->location);
	count++;

	if (record->categories)
		cals_stmt_bind_text(stmt, count, record->categories);
	count++;

	if (record->exdate)
		cals_stmt_bind_text(stmt, count, record->exdate);
	count++;

	if (record->uid)
		cals_stmt_bind_text(stmt, count, record->uid);
	count++;

	if (record->organizer_name)
		cals_stmt_bind_text(stmt, count, record->organizer_name);
	count++;

	if (record->organizer_email)
		cals_stmt_bind_text(stmt, count, record->organizer_email);
	count++;

	if (record->gcal_id)
		cals_stmt_bind_text(stmt, count, record->gcal_id);
	count++;

	if (record->updated)
		cals_stmt_bind_text(stmt, count, record->updated);
	count++;

	if (record->location_summary)
		cals_stmt_bind_text(stmt, count, record->location_summary);
	count++;

	if (record->etag)
		cals_stmt_bind_text(stmt, count, record->etag);
	count++;

	if (record->edit_uri)
		cals_stmt_bind_text(stmt, count, record->edit_uri);
	count++;

	if (record->gevent_id)
		cals_stmt_bind_text(stmt, count, record->gevent_id);
	count++;

	snprintf(dtstart_datetime, sizeof(dtstart_datetime), "%04d%02d%02dT000000",
			record->dtstart_year, record->dtstart_month, record->dtstart_mday);
	cals_stmt_bind_text(stmt, count, dtstart_datetime);
	count++;

	if (record->dtstart_tzid)
		cals_stmt_bind_text(stmt, count, record->dtstart_tzid);
	count++;

	snprintf(dtend_datetime, sizeof(dtend_datetime), "%04d%02d%02dT235959",
			record->dtend_year, record->dtend_month, record->dtend_mday);
	cals_stmt_bind_text(stmt, count, dtend_datetime);
	count++;

	if (record->dtend_tzid)
		cals_stmt_bind_text(stmt, count, record->dtend_tzid);
	count++;

	ret = cals_stmt_step(stmt);
	if (CAL_SUCCESS != ret) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step() Failed(%d)", ret);
		return ret;
	}
	sqlite3_finalize(stmt);

	return cals_last_insert_id();
}
int cals_get_alarm_info(const int event_id, GList **alarm_list)
{
	int ret = -1;
	GList *result = NULL;
	sqlite3_stmt *stmt = NULL;
	cal_value * cvalue = NULL;
	char query[CALS_SQL_MAX_LEN] = {0};
	cal_alarm_info_t* alarm_info = NULL;

	retv_if(NULL == alarm_list, CAL_ERR_ARG_NULL);

	sprintf(query, "SELECT * FROM %s WHERE event_id=%d", CALS_TABLE_ALARM, event_id);

	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	ret = cals_stmt_step(stmt);
	if (ret < CAL_SUCCESS) {
		sqlite3_finalize(stmt);
		ERR("cals_stmt_step() Failed(%d)", ret);
		return ret;
	}

	while (CAL_TRUE == ret)
	{
		cvalue = calloc(1, sizeof(cal_value));
		if (NULL == cvalue) {
			sqlite3_finalize(stmt);
			g_list_foreach(result, _cals_alarm_value_free, NULL);
			g_list_free(result);
			ERR("calloc() Failed(%d)", errno);
			return CAL_ERR_OUT_OF_MEMORY;
		}

		cvalue->v_type = CAL_EVENT_ALARM;
		cvalue->user_data = alarm_info = calloc(1, sizeof(cal_alarm_info_t));
		if (NULL == alarm_info) {
			sqlite3_finalize(stmt);
			g_list_foreach(result, _cals_alarm_value_free, NULL);
			g_list_free(result);
			free(cvalue);
			ERR("calloc() Failed(%d)", errno);
			return CAL_ERR_OUT_OF_MEMORY;
		}

		alarm_info->event_id = sqlite3_column_int(stmt, 0);

		alarm_info->alarm_time = sqlite3_column_int64(stmt, 1);
		alarm_info->remind_tick = sqlite3_column_int(stmt, 2);
		alarm_info->remind_tick_unit = sqlite3_column_int(stmt, 3);
		alarm_info->alarm_tone = SAFE_STRDUP(sqlite3_column_text(stmt, 4));
		alarm_info->alarm_description = SAFE_STRDUP(sqlite3_column_text(stmt, 5));
		alarm_info->alarm_type = sqlite3_column_int(stmt, 6);
		alarm_info->alarm_id = sqlite3_column_int(stmt, 7);

		result = g_list_append(result, cvalue);

		ret = cals_stmt_step(stmt);
	}
	sqlite3_finalize(stmt);

	*alarm_list = result;

	return CAL_SUCCESS;
}
int cals_alarm_remove(int type, int related_id)
{
	int ret;
	sqlite3_stmt *stmt = NULL;
	char query[CALS_SQL_MAX_LEN] = {0};

	switch (type) {
	case CALS_ALARM_REMOVE_BY_EVENT_ID:
		sprintf(query, "SELECT alarm_id FROM %s "
			"WHERE event_id = %d AND alarm_id <> 0", CALS_TABLE_ALARM, related_id);
		break;
	case CALS_ALARM_REMOVE_BY_CALENDAR_ID:
		sprintf(query, "SELECT alarm_id FROM %s A, %s B ON A.id = B.event_id "
			"WHERE A.calendar_id = %d AND B.alarm_id <> 0",
			CALS_TABLE_SCHEDULE, CALS_TABLE_ALARM, related_id);
		break;
	case CALS_ALARM_REMOVE_BY_ACC_ID:
		sprintf(query, "SELECT alarm_id FROM %s A, %s B ON A.id = B.event_id "
			"WHERE A.account_id = %d AND B.alarm_id <> 0",
			CALS_TABLE_SCHEDULE, CALS_TABLE_ALARM, related_id);
		break;
	case CALS_ALARM_REMOVE_ALL:
		sprintf(query, "SELECT alarm_id FROM %s WHERE alarm_id <> 0", CALS_TABLE_ALARM);
		break;
	}

	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	ret = cals_stmt_step(stmt);
	if (ret < CAL_SUCCESS) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step() Failed(%d)", ret);
		return CAL_ERR_DB_FAILED;
	}

	while (CAL_TRUE == ret) {
		alarmmgr_remove_alarm(sqlite3_column_int(stmt,0));
		ret = cals_stmt_step(stmt);
	}
	sqlite3_finalize(stmt);

	// TODO: If calendar service use delete_table not delete_flag, below procedure can handle by trigger.
	switch (type) {
	case CALS_ALARM_REMOVE_BY_EVENT_ID:
		sprintf(query, "DELETE FROM %s WHERE event_id = %d", CALS_TABLE_ALARM, related_id);
		break;
	case CALS_ALARM_REMOVE_BY_CALENDAR_ID:
		sprintf(query, "DELETE FROM %s "
			"WHERE event_id IN (SELECT id FROM %s WHERE calendar_id = %d)",
			CALS_TABLE_ALARM, CALS_TABLE_SCHEDULE, related_id);
		break;
	case CALS_ALARM_REMOVE_BY_ACC_ID:
		sprintf(query, "DELETE FROM %s "
			"WHERE event_id IN (SELECT id FROM %s WHERE account_id = %d)",
			CALS_TABLE_ALARM, CALS_TABLE_SCHEDULE, related_id);
		break;
	case CALS_ALARM_REMOVE_ALL:
		sprintf(query, "DELETE FROM %s", CALS_TABLE_ALARM);
		break;
	}

	stmt = cals_query_prepare(query);
	retvm_if(NULL == stmt, CAL_ERR_DB_FAILED, "cals_query_prepare() Failed");

	ret = cals_stmt_step(stmt);
	if (CAL_SUCCESS != ret) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step(%s) Failed(%d)", query, ret);
		return CAL_ERR_DB_FAILED;
	}
	sqlite3_finalize(stmt);

	return CAL_SUCCESS;
}
static inline int _cals_update_rrule(const int index, cal_sch_full_t *record)
{
	int ret;
	int cnt;
	char query[CALS_SQL_MAX_LEN] = {0};
	char until_datetime[32] = {0};
	sqlite3_stmt *stmt = NULL;

	retv_if(record == NULL, CAL_ERR_ARG_NULL);

	snprintf(query, sizeof(query), "UPDATE %s set "
			"freq = %d, "
			"range_type = %d, "
			"until_type = %d, "
			"until_utime = %lld, "
			"until_datetime = ?, "
			"count = %d, "
			"interval = %d, "
			"bysecond = ?, "
			"byminute = ?, "
			"byhour = ?, "
			"byday = ?, "
			"bymonthday = ?, "
			"byyearday = ?, "
			"byweekno = ?, "
			"bymonth = ?, "
			"bysetpos = ?, "
			"wkst = %d "
			"WHERE event_id = %d",
			CALS_TABLE_RRULE,
			record->freq,
			record->range_type,
			record->until_type,
			record->until_utime,
			record->count,
			record->interval,
			record->wkst,
			index);
	stmt = cals_query_prepare(query);
	retvm_if(stmt == NULL, CAL_ERR_DB_FAILED, "Failed query prepare");

	cnt = 1;
	snprintf(until_datetime, sizeof(until_datetime), "%04d%02d%02dT235959",
			record->until_year, record->until_month, record->until_mday);
	cals_stmt_bind_text(stmt, cnt, until_datetime);
	cnt++;

	if (record->bysecond)
		cals_stmt_bind_text(stmt, cnt, record->bysecond);
	cnt++;

	if (record->byminute)
		cals_stmt_bind_text(stmt, cnt, record->byminute);
	cnt++;

	if (record->byhour)
		cals_stmt_bind_text(stmt, cnt, record->byhour);
	cnt++;

	if (record->byday)
		cals_stmt_bind_text(stmt, cnt, record->byday);
	cnt++;

	if (record->bymonthday)
		cals_stmt_bind_text(stmt, cnt, record->bymonthday);
	cnt++;

	if (record->byyearday)
		cals_stmt_bind_text(stmt, cnt, record->byyearday);
	cnt++;

	if (record->byweekno)
		cals_stmt_bind_text(stmt, cnt, record->byweekno);
	cnt++;

	if (record->bymonth)
		cals_stmt_bind_text(stmt, cnt, record->bymonth);
	cnt++;

	if (record->bysetpos)
		cals_stmt_bind_text(stmt, cnt, record->bysetpos);
	cnt++;

	ret = cals_stmt_step(stmt);
	if (CAL_SUCCESS != ret) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step() Failed(%d)", ret);
		return ret;
	}
	sqlite3_finalize(stmt);

	return CAL_SUCCESS;
}
int cals_insert_schedule(cal_sch_full_t *sch_record)
{
	int ret = 0;
	int index = 0;
	cal_value *cvalue = NULL;
	bool is_success = false;
	struct cals_time st;
	struct cals_time et;

	retvm_if(NULL == sch_record, CAL_ERR_ARG_INVALID, "sch_record is NULL");

	sch_record->missed = 0;

	ret = cals_begin_trans();
	retvm_if(ret, ret, "cals_begin_trans() is Failed(%d)", ret);

	ret = _cals_insert_schedule(sch_record);
	if(ret < CAL_SUCCESS) {
		ERR("_cals_insert_schedule() Failed(%d)", ret);
		cals_end_trans(false);
		return ret;
	}
	index = ret;

	if (sch_record->freq != CALS_FREQ_ONCE) {
		ret = _cals_insert_rrule(index, sch_record);
		if (ret < CAL_SUCCESS) {
			ERR("Failed in _cals_insert_rrule(%d)\n", ret);
			cals_end_trans(false);
			return ret;
		}
		sch_record->rrule_id = ret;
		DBG("added rrule_id(%d)", ret);
		ret = _cals_insert_rrule_id(index, sch_record);
		if (ret != CAL_SUCCESS) {
			ERR("Failed in _cals_insert_rrule_id(%d)\n", ret);
		}
		DBG("ended add");
	}

	st.type = sch_record->dtstart_type;
	if (st.type == CALS_TIME_UTIME)
		st.utime = sch_record->dtstart_utime;
	else {
		st.year = sch_record->dtstart_year;
		st.month = sch_record->dtstart_month;
		st.mday = sch_record->dtstart_mday;
	}

	et.type = sch_record->dtend_type;
	if (et.type == CALS_TIME_UTIME)
		et.utime = sch_record->dtend_utime;
	else {
		et.year = sch_record->dtend_year;
		et.month = sch_record->dtend_month;
		et.mday = sch_record->dtend_mday;
	}

	cals_instance_insert(index, &st, &et, sch_record);

	if (sch_record->attendee_list)
	{
		DBG("attendee exists");
		GList *list = g_list_first(sch_record->attendee_list);
		cal_participant_info_t *participant_info = NULL;

		while(list)
		{
			cvalue = list->data;
			if(cvalue)
			{
				participant_info = cvalue->user_data;
				if(participant_info->is_deleted==0)
				{
					ret = cal_service_add_participant_info(index, participant_info);
					warn_if(ret, "cal_service_add_participant_info() Failed(%d)", ret);
				}
			}
			list = g_list_next(list);
		}
	} else {
		DBG("No attendee exists");
	}

	if (sch_record->alarm_list)
	{
		DBG("alarm exists");
		GList *list = sch_record->alarm_list;
		cal_alarm_info_t *alarm_info = NULL;

		while (list)
		{
			cvalue = list->data;
			if (cvalue == NULL) {
				ERR("Failed to fine value");
				break;
			}

			alarm_info = cvalue->user_data;
			if (alarm_info == NULL) {
				ERR("Failed to find alarm info");
				break;
			}

			if(alarm_info->is_deleted == 0)
			{
				DBG("type(%d) tick(%d) unit(%d)",
						sch_record->cal_type,
						alarm_info->remind_tick,
						alarm_info->remind_tick_unit);
				if (alarm_info->remind_tick != CALS_INVALID_ID)
				{
					switch (sch_record->cal_type) {
					case CALS_SCH_TYPE_EVENT:
						ret = cals_alarm_add(index, alarm_info, &st);
						warn_if(CAL_SUCCESS != ret, "cals_alarm_add() Failed(%d)", ret);
						break;
					case CALS_SCH_TYPE_TODO:
						if (sch_record->dtend_utime == CALS_TODO_NO_DUE_DATE) {
							DBG("no due date is set");
							break;
						}
						ret = cals_alarm_add(index, alarm_info, &et);
						warn_if(CAL_SUCCESS != ret, "cals_alarm_add() Failed(%d)", ret);
						break;
					}
				}
			}
			list = list->next;
		}
	} else {
		DBG("No alarm exists");
	}

	cals_end_trans(true);
	sch_record->index = index;

	if(sch_record->cal_type == CALS_SCH_TYPE_EVENT)
		is_success= cals_notify(CALS_NOTI_TYPE_EVENT);
	else
		is_success= cals_notify(CALS_NOTI_TYPE_TODO);
	warn_if(is_success != CAL_SUCCESS, "cals_notify() Failed");

	return index;
}
/**
 * This function compares compares two strings which must have been normalized already.
 * If search_str is included in str, this function return #CTS_SUCCESS. \n
 * The behavior of this function cannot fix because of localization.
 * So, The behavior can be different from each other.
 *
 * @param[in] haystack Base string.
 * @param[in] needle searching string
 * @param[out] len substring length
 * @return a position of the beginning of the substring, Negative value(#cts_error) on error or difference.
 * @par example
 * @code
 	ret = contacts_svc_compare_normalized_str(str1, str2, &len);
 	if(CTS_SUCCESS == ret) {
		snprintf(first, ret+1, "%s", item_data->display);
		snprintf(middle, len+1, "%s", item_data->display + ret);
		printf("%s -> %s, %s, %s", item_data->display, first, middle, item_data->display + ret + len);
 	} else
 		printf("str1 doesn't has str2");
 * @endcode
 */
API int contacts_svc_normalized_strstr(const char *haystack,
		const char *needle, int *len)
{
	int i, j, wind, h_len, n_len;
	int first_needle_len;
	int equal_index;
	int equal_length;
	int equal_wind = 0;
	bool counted = false;
	retvm_if(NULL == haystack, -1, "The parameter(haystack) is NULL");
	retvm_if(NULL == needle, -1, "The parameter(needle) is NULL");
	CTS_DBG("haystack = %s, needle = %s", haystack, needle);

	h_len = 1;
	n_len = 1;
	equal_index = 0;
	first_needle_len = check_utf8(needle[0]);
	for (i=0, j=0;i<strlen(haystack);i = wind?wind:(i+h_len)) {
		if (equal_wind) {
			equal_index = equal_wind;
			counted = false;
		}
		wind = 0;
		equal_length = 0;
		equal_wind = 0;
		for (j=0;j<strlen(needle);) {
			bool equal;
			h_len = check_utf8(haystack[i]);

			if (h_len == 1 && haystack[i] == 0x1) {		//skip seperator
				counted = false;
				i+=h_len;
				continue;
			}

			n_len = check_utf8(needle[j]);
			if (n_len == 1 && needle[j] == 0x1) {		//skip seperator
				j++;
				continue;
			}

			if (wind == 0 && j && 0 < i) {
				if (h_len == first_needle_len && compare_unicode(&haystack[i], needle, first_needle_len)
						&& !is_diacritical(&haystack[i])) {
					unsigned short tmp;

					tmp = (haystack[i+1] << 8) | haystack[i+2];
					if (!counted) {
						wind = i;
						equal_wind = equal_index + equal_length;
					}
				}
			}

			if ((2 == h_len && is_diacritical(&haystack[i]))
					&& (2 != n_len || !is_diacritical(&needle[j]))) {
				if (j == 0) {
					if (counted)
						equal_index++;
					else {
						equal_index += h_len;
						counted = true;
					}
				}
				else if (!counted) {
					equal_length += h_len;
					counted = true;
				}
				else if (counted)
					equal_length++;
				i+=h_len;
				continue;
			}

			if (h_len != n_len) {
				if (!counted) {
					equal_index += (equal_length + h_len);
					counted = true;
				}
				break;
			}

			if (3 == n_len && is_choseong(&needle[j]) && !(is_choseong(&haystack[i]))) {
				if (j < (n_len+1) || !is_choseong(&needle[j-n_len-1])) {		// skip 강나 search by 가나
					if (!counted) {
						equal_index += (equal_length + h_len);
						counted = true;
					}
					break;
				}
				else {
					if (j == 0) {
						if (!counted) {
							equal_index += h_len;
							counted = true;
						}
					}
					else if (!counted) {
						equal_length += h_len;
						counted = true;
					}
					i+=h_len;
					continue;
				}
			}

			equal = compare_unicode(&haystack[i], &needle[j], n_len);

			if (equal) {
				if (!counted) {
					equal_length += h_len;
					counted = true;
				}
				else if (2 == n_len && is_diacritical(&needle[j]))
					equal_length ++;
				j += n_len;
				i+=h_len;
				continue;
			}
			else {
				if (!counted) {
					equal_index += (equal_length + h_len);
					counted = true;
				}
				else {
					if (2 == n_len && is_diacritical(&needle[j]))
						equal_index += (equal_length + 1);
					else
						equal_index += equal_length;
				}
				break;
			}
		}

		if ('\0' == needle[j]) {
			if ('\0' != haystack[i]) {
				h_len = check_utf8(haystack[i]);
				if(h_len == 2 && is_diacritical(&haystack[i]))
					equal_length++;
			}
			*len = equal_length;
			return equal_index;
		}
	}

	CTS_DBG("NOT match");
	return -1;
}
static inline int _cals_insert_rrule(int index, cal_sch_full_t *record)
{
	int ret;
	int cnt;
	char query[CALS_SQL_MAX_LEN] = {0};
	char until_datetime[32] = {0};
	sqlite3_stmt *stmt = NULL;

	snprintf(query, sizeof(query),
			"INSERT INTO %s ( "
			"event_id, freq, range_type, "
			"until_type, until_utime, until_datetime, "
			"count, interval, "
			"bysecond, byminute, byhour, byday, "
			"bymonthday, byyearday, byweekno, bymonth, "
			"bysetpos, wkst "
			") VALUES ( "
			"%d, %d, %d, "
			"%d, %lld, ?, "
			"%d, %d, "
			"?, ?, ?, ?, "
			"?, ?, ?, ?, "
			"?, %d "
			") ",
			CALS_TABLE_RRULE,
			index, record->freq, record->range_type,
			record->until_type, record->until_utime,
			record->count, record->interval,
			record->wkst);

	stmt = cals_query_prepare(query);
	retvm_if(stmt == NULL, CAL_ERR_DB_FAILED, "Failed to query prepare");

	cnt = 1;
	snprintf(until_datetime, sizeof(until_datetime), "%04d%02d%02dT235959",
			record->until_year, record->until_month, record->until_mday);
	cals_stmt_bind_text(stmt, cnt, until_datetime);
	cnt++;

	if (record->bysecond)
		cals_stmt_bind_text(stmt, cnt, record->bysecond);
	cnt++;

	if (record->byminute)
		cals_stmt_bind_text(stmt, cnt, record->byminute);
	cnt++;

	if (record->byhour)
		cals_stmt_bind_text(stmt, cnt, record->byhour);
	cnt++;

	if (record->byday)
		cals_stmt_bind_text(stmt, cnt, record->byday);
	cnt++;

	if (record->bymonthday)
		cals_stmt_bind_text(stmt, cnt, record->bymonthday);
	cnt++;

	if (record->byyearday)
		cals_stmt_bind_text(stmt, cnt, record->byyearday);
	cnt++;

	if (record->byweekno)
		cals_stmt_bind_text(stmt, cnt, record->byweekno);
	cnt++;

	if (record->bymonth)
		cals_stmt_bind_text(stmt, cnt, record->bymonth);
	cnt++;

	if (record->bysetpos)
		cals_stmt_bind_text(stmt, cnt, record->bysetpos);
	cnt++;

	ret = cals_stmt_step(stmt);
	if (CAL_SUCCESS != ret) {
		sqlite3_finalize(stmt);
		ERR("sqlite3_step() Failed(%d)", ret);
		return ret;
	}
	sqlite3_finalize(stmt);

	return cals_last_insert_id();
}