void xaccAccountScrubKvp (Account *account) { const gchar *str; gchar *str2; KvpFrame *frame; if (!account) return; str = kvp_frame_get_string(account->inst.kvp_data, "notes"); if (str) { str2 = g_strstrip(g_strdup(str)); if (strlen(str2) == 0) kvp_frame_set_slot_nc (account->inst.kvp_data, "notes", NULL); g_free(str2); } str = kvp_frame_get_string(account->inst.kvp_data, "placeholder"); if (str && strcmp(str, "false") == 0) kvp_frame_set_slot_nc (account->inst.kvp_data, "placeholder", NULL); frame = kvp_frame_get_frame(account->inst.kvp_data, "hbci"); if (frame && kvp_frame_is_empty(frame)) { kvp_frame_set_frame_nc(account->inst.kvp_data, "hbci", NULL); } }
static void xaccAccountDeleteOldData (Account *account) { if (!account) return; xaccAccountBeginEdit (account); kvp_frame_set_slot_nc (account->inst.kvp_data, "old-currency", NULL); kvp_frame_set_slot_nc (account->inst.kvp_data, "old-security", NULL); kvp_frame_set_slot_nc (account->inst.kvp_data, "old-currency-scu", NULL); kvp_frame_set_slot_nc (account->inst.kvp_data, "old-security-scu", NULL); qof_instance_set_dirty (QOF_INSTANCE (account)); xaccAccountCommitEdit (account); }
void kvp_frame_set_slot_path (KvpFrame *frame, const KvpValue *new_value, const char *first_key, ...) { va_list ap; const char *key; if (!frame) return; g_return_if_fail (first_key && *first_key != '\0'); va_start (ap, first_key); key = first_key; while (TRUE) { KvpValue *value; const char *next_key; next_key = va_arg (ap, const char *); if (!next_key) { kvp_frame_set_slot (frame, key, new_value); break; } g_return_if_fail (*next_key != '\0'); value = kvp_frame_get_slot (frame, key); if (!value) { KvpFrame *new_frame = kvp_frame_new (); KvpValue *frame_value = kvp_value_new_frame (new_frame); kvp_frame_set_slot_nc (frame, key, frame_value); value = kvp_frame_get_slot (frame, key); if (!value) break; } frame = kvp_value_get_frame (value); if (!frame) break; key = next_key; } va_end (ap); }
/* Get the named frame, or create it if it doesn't exist. * gcc -O3 should inline it. It performs no error checks, * the caller is responsible of passing good keys and frames. */ static inline KvpFrame * get_or_make (KvpFrame *fr, const char * key) { KvpFrame *next_frame; KvpValue *value; value = kvp_frame_get_slot (fr, key); if (value) { next_frame = kvp_value_get_frame (value); } else { next_frame = kvp_frame_new (); kvp_frame_set_slot_nc (fr, key, kvp_value_new_frame_nc (next_frame)); } return next_frame; }
void kvp_frame_set_slot_path_gslist (KvpFrame *frame, const KvpValue *new_value, GSList *key_path) { if (!frame || !key_path) return; while (TRUE) { const char *key = static_cast<char*>(key_path->data); KvpValue *value; if (!key) return; g_return_if_fail (*key != '\0'); key_path = key_path->next; if (!key_path) { kvp_frame_set_slot (frame, key, new_value); return; } value = kvp_frame_get_slot (frame, key); if (!value) { KvpFrame *new_frame = kvp_frame_new (); KvpValue *frame_value = kvp_value_new_frame (new_frame); kvp_frame_set_slot_nc (frame, key, frame_value); value = kvp_frame_get_slot (frame, key); if (!value) return; } frame = kvp_value_get_frame (value); if (!frame) return; } }
void gnc_ofx_kvp_set_assoc_account(Account* investment_account, const Account *income_account) { kvp_frame * acc_frame; kvp_value * kvp_val; const GncGUID * income_acc_guid; g_assert(investment_account); g_assert(income_account); acc_frame = xaccAccountGetSlots(investment_account); g_assert(acc_frame); // Must not be NULL, but the QofInstance doc is unclear about this income_acc_guid = xaccAccountGetGUID(income_account); kvp_val = kvp_value_new_guid(income_acc_guid); xaccAccountBeginEdit(investment_account); kvp_frame_set_slot_nc(acc_frame, KEY_ASSOC_INCOME_ACCOUNT, kvp_val); qof_instance_set_dirty(QOF_INSTANCE (investment_account)); xaccAccountCommitEdit(investment_account); }
static void set_guid_val( gpointer pObject, /*@ null @*/ gpointer pValue ) { slot_info_t* pInfo = (slot_info_t*)pObject; g_return_if_fail( pObject != NULL ); if ( pValue == NULL ) return; switch ( pInfo->value_type) { case KVP_TYPE_GUID: { KvpValue *value = kvp_value_new_guid( (GncGUID*)pValue ); set_slot_from_value( pInfo, value ); break; } case KVP_TYPE_GLIST: { slot_info_t *newInfo = slot_info_copy( pInfo, (GncGUID*)pValue ); kvp_value *pValue = NULL; gchar *key = get_key_from_path( pInfo->path ); newInfo->context = LIST; slots_load_info( newInfo ); pValue = kvp_value_new_glist_nc( newInfo->pList ); kvp_frame_set_slot_nc(pInfo->pKvpFrame, key, pValue); g_string_free( newInfo->path, TRUE ); g_slice_free( slot_info_t, newInfo ); g_free( key ); break; } case KVP_TYPE_FRAME: { slot_info_t *newInfo = slot_info_copy( pInfo, (GncGUID*)pValue ) ; KvpFrame *newFrame = kvp_frame_new(); newInfo->pKvpFrame = newFrame; switch ( pInfo->context ) { case LIST: { KvpValue *value = kvp_value_new_frame_nc( newFrame ); gchar *key = get_key_from_path( pInfo->path ); newInfo->path = g_string_assign( newInfo->path, key ); pInfo->pList = g_list_append( pInfo->pList, value ); g_free( key ); break; } case FRAME: default: { gchar *key = get_key_from_path( pInfo->path ); kvp_frame_set_frame_nc( pInfo->pKvpFrame, key, newFrame ); g_free( key ); break; } } newInfo->context = FRAME; slots_load_info ( newInfo ); g_string_free( newInfo->path, TRUE ); g_slice_free( slot_info_t, newInfo ); break; } default: break; } }