@@ -102,11 +102,12 @@ int dbutils_binary_comparison (int x, int y) {
102102 return (x == y ) ? 0 : (x > y ? 1 : -1 );
103103}
104104
105- char * dbutils_settings_get_value (db_t * db , const char * key , char * buffer , size_t blen ) {
105+ char * dbutils_settings_get_value (db_t * db , const char * key , char * buffer , size_t blen , int64_t * intvalue ) {
106106 DEBUG_SETTINGS ("dbutils_settings_get_value key: %s" , key );
107107
108108 // check if heap allocation must be forced
109109 if (!buffer || blen == 0 ) blen = 0 ;
110+ if (intvalue ) * intvalue = 0 ;
110111 size_t size = 0 ;
111112
112113 dbvm_t * vm = NULL ;
@@ -126,21 +127,27 @@ char *dbutils_settings_get_value (db_t *db, const char *key, char *buffer, size_
126127 goto finalize_get_value ;
127128 }
128129
129- const char * value = database_column_text (vm , 0 );
130- #if CLOUDSYNC_UNITTEST
131- size = (buffer == OUT_OF_MEMORY_BUFFER ) ? (SQLITE_MAX_ALLOCATION_SIZE + 1 ) :(size_t )database_column_bytes (vm , 0 );
132- #else
133- size = (size_t )database_column_bytes (vm , 0 );
134- #endif
135- if (size + 1 > blen ) {
136- buffer = cloudsync_memory_alloc ((uint64_t )(size + 1 ));
137- if (!buffer ) {
138- rc = DBRES_NOMEM ;
139- goto finalize_get_value ;
130+ if (intvalue ) {
131+ // check if we are only interested in the intvalue
132+ * intvalue = database_column_int (vm , 0 );
133+ } else {
134+ // if intvalue is NULL then proceed with text case
135+ const char * value = database_column_text (vm , 0 );
136+ #if CLOUDSYNC_UNITTEST
137+ size = (buffer == OUT_OF_MEMORY_BUFFER ) ? (SQLITE_MAX_ALLOCATION_SIZE + 1 ) :(size_t )database_column_bytes (vm , 0 );
138+ #else
139+ size = (size_t )database_column_bytes (vm , 0 );
140+ #endif
141+ if (size + 1 > blen ) {
142+ buffer = cloudsync_memory_alloc ((uint64_t )(size + 1 ));
143+ if (!buffer ) {
144+ rc = DBRES_NOMEM ;
145+ goto finalize_get_value ;
146+ }
140147 }
148+ memcpy (buffer , value , size + 1 );
141149 }
142150
143- memcpy (buffer , value , size + 1 );
144151 rc = DBRES_OK ;
145152
146153finalize_get_value :
@@ -180,15 +187,25 @@ int dbutils_settings_set_key_value (db_t *db, cloudsync_context *data, const cha
180187int dbutils_settings_get_int_value (db_t * db , const char * key ) {
181188 DEBUG_SETTINGS ("dbutils_settings_get_int_value key: %s" , key );
182189 char buffer [256 ] = {0 };
183- if (dbutils_settings_get_value (db , key , buffer , sizeof (buffer )) == NULL ) return -1 ;
190+ int64_t value = 0 ;
191+ if (dbutils_settings_get_value (db , key , buffer , sizeof (buffer ), & value ) == NULL ) return -1 ;
192+
193+ return (int )value ;
194+ }
195+
196+ int64_t dbutils_settings_get_int64_value (db_t * db , const char * key ) {
197+ DEBUG_SETTINGS ("dbutils_settings_get_int_value key: %s" , key );
198+ char buffer [256 ] = {0 };
199+ int64_t value = 0 ;
200+ if (dbutils_settings_get_value (db , key , buffer , sizeof (buffer ), & value ) == NULL ) return -1 ;
184201
185- return ( int ) strtol ( buffer , NULL , 0 ) ;
202+ return value ;
186203}
187204
188205int dbutils_settings_check_version (db_t * db , const char * version ) {
189206 DEBUG_SETTINGS ("dbutils_settings_check_version" );
190207 char buffer [256 ];
191- if (dbutils_settings_get_value (db , CLOUDSYNC_KEY_LIBVERSION , buffer , sizeof (buffer )) == NULL ) return -666 ;
208+ if (dbutils_settings_get_value (db , CLOUDSYNC_KEY_LIBVERSION , buffer , sizeof (buffer ), NULL ) == NULL ) return -666 ;
192209
193210 int major1 , minor1 , patch1 ;
194211 int major2 , minor2 , patch2 ;
0 commit comments