1*9507f98cSAndroid Build Coastguard Worker /* Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2*9507f98cSAndroid Build Coastguard Worker Use of this source code is governed by a BSD-style license that can be 3*9507f98cSAndroid Build Coastguard Worker found in the LICENSE file. See the AUTHORS file for names of contributors. 4*9507f98cSAndroid Build Coastguard Worker 5*9507f98cSAndroid Build Coastguard Worker C bindings for leveldb. May be useful as a stable ABI that can be 6*9507f98cSAndroid Build Coastguard Worker used by programs that keep leveldb in a shared library, or for 7*9507f98cSAndroid Build Coastguard Worker a JNI api. 8*9507f98cSAndroid Build Coastguard Worker 9*9507f98cSAndroid Build Coastguard Worker Does not support: 10*9507f98cSAndroid Build Coastguard Worker . getters for the option types 11*9507f98cSAndroid Build Coastguard Worker . custom comparators that implement key shortening 12*9507f98cSAndroid Build Coastguard Worker . custom iter, db, env, cache implementations using just the C bindings 13*9507f98cSAndroid Build Coastguard Worker 14*9507f98cSAndroid Build Coastguard Worker Some conventions: 15*9507f98cSAndroid Build Coastguard Worker 16*9507f98cSAndroid Build Coastguard Worker (1) We expose just opaque struct pointers and functions to clients. 17*9507f98cSAndroid Build Coastguard Worker This allows us to change internal representations without having to 18*9507f98cSAndroid Build Coastguard Worker recompile clients. 19*9507f98cSAndroid Build Coastguard Worker 20*9507f98cSAndroid Build Coastguard Worker (2) For simplicity, there is no equivalent to the Slice type. Instead, 21*9507f98cSAndroid Build Coastguard Worker the caller has to pass the pointer and length as separate 22*9507f98cSAndroid Build Coastguard Worker arguments. 23*9507f98cSAndroid Build Coastguard Worker 24*9507f98cSAndroid Build Coastguard Worker (3) Errors are represented by a null-terminated c string. NULL 25*9507f98cSAndroid Build Coastguard Worker means no error. All operations that can raise an error are passed 26*9507f98cSAndroid Build Coastguard Worker a "char** errptr" as the last argument. One of the following must 27*9507f98cSAndroid Build Coastguard Worker be true on entry: 28*9507f98cSAndroid Build Coastguard Worker *errptr == NULL 29*9507f98cSAndroid Build Coastguard Worker *errptr points to a malloc()ed null-terminated error message 30*9507f98cSAndroid Build Coastguard Worker (On Windows, *errptr must have been malloc()-ed by this library.) 31*9507f98cSAndroid Build Coastguard Worker On success, a leveldb routine leaves *errptr unchanged. 32*9507f98cSAndroid Build Coastguard Worker On failure, leveldb frees the old value of *errptr and 33*9507f98cSAndroid Build Coastguard Worker set *errptr to a malloc()ed error message. 34*9507f98cSAndroid Build Coastguard Worker 35*9507f98cSAndroid Build Coastguard Worker (4) Bools have the type uint8_t (0 == false; rest == true) 36*9507f98cSAndroid Build Coastguard Worker 37*9507f98cSAndroid Build Coastguard Worker (5) All of the pointer arguments must be non-NULL. 38*9507f98cSAndroid Build Coastguard Worker */ 39*9507f98cSAndroid Build Coastguard Worker 40*9507f98cSAndroid Build Coastguard Worker #ifndef STORAGE_LEVELDB_INCLUDE_C_H_ 41*9507f98cSAndroid Build Coastguard Worker #define STORAGE_LEVELDB_INCLUDE_C_H_ 42*9507f98cSAndroid Build Coastguard Worker 43*9507f98cSAndroid Build Coastguard Worker #ifdef __cplusplus 44*9507f98cSAndroid Build Coastguard Worker extern "C" { 45*9507f98cSAndroid Build Coastguard Worker #endif 46*9507f98cSAndroid Build Coastguard Worker 47*9507f98cSAndroid Build Coastguard Worker #include <stdarg.h> 48*9507f98cSAndroid Build Coastguard Worker #include <stddef.h> 49*9507f98cSAndroid Build Coastguard Worker #include <stdint.h> 50*9507f98cSAndroid Build Coastguard Worker 51*9507f98cSAndroid Build Coastguard Worker #include "leveldb/export.h" 52*9507f98cSAndroid Build Coastguard Worker 53*9507f98cSAndroid Build Coastguard Worker /* Exported types */ 54*9507f98cSAndroid Build Coastguard Worker 55*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_t leveldb_t; 56*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_cache_t leveldb_cache_t; 57*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_comparator_t leveldb_comparator_t; 58*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_env_t leveldb_env_t; 59*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_filelock_t leveldb_filelock_t; 60*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t; 61*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_iterator_t leveldb_iterator_t; 62*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_logger_t leveldb_logger_t; 63*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_options_t leveldb_options_t; 64*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_randomfile_t leveldb_randomfile_t; 65*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_readoptions_t leveldb_readoptions_t; 66*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_seqfile_t leveldb_seqfile_t; 67*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_snapshot_t leveldb_snapshot_t; 68*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_writablefile_t leveldb_writablefile_t; 69*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_writebatch_t leveldb_writebatch_t; 70*9507f98cSAndroid Build Coastguard Worker typedef struct leveldb_writeoptions_t leveldb_writeoptions_t; 71*9507f98cSAndroid Build Coastguard Worker 72*9507f98cSAndroid Build Coastguard Worker /* DB operations */ 73*9507f98cSAndroid Build Coastguard Worker 74*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_t* leveldb_open(const leveldb_options_t* options, 75*9507f98cSAndroid Build Coastguard Worker const char* name, char** errptr); 76*9507f98cSAndroid Build Coastguard Worker 77*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_close(leveldb_t* db); 78*9507f98cSAndroid Build Coastguard Worker 79*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_put(leveldb_t* db, 80*9507f98cSAndroid Build Coastguard Worker const leveldb_writeoptions_t* options, 81*9507f98cSAndroid Build Coastguard Worker const char* key, size_t keylen, const char* val, 82*9507f98cSAndroid Build Coastguard Worker size_t vallen, char** errptr); 83*9507f98cSAndroid Build Coastguard Worker 84*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_delete(leveldb_t* db, 85*9507f98cSAndroid Build Coastguard Worker const leveldb_writeoptions_t* options, 86*9507f98cSAndroid Build Coastguard Worker const char* key, size_t keylen, 87*9507f98cSAndroid Build Coastguard Worker char** errptr); 88*9507f98cSAndroid Build Coastguard Worker 89*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_write(leveldb_t* db, 90*9507f98cSAndroid Build Coastguard Worker const leveldb_writeoptions_t* options, 91*9507f98cSAndroid Build Coastguard Worker leveldb_writebatch_t* batch, char** errptr); 92*9507f98cSAndroid Build Coastguard Worker 93*9507f98cSAndroid Build Coastguard Worker /* Returns NULL if not found. A malloc()ed array otherwise. 94*9507f98cSAndroid Build Coastguard Worker Stores the length of the array in *vallen. */ 95*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT char* leveldb_get(leveldb_t* db, 96*9507f98cSAndroid Build Coastguard Worker const leveldb_readoptions_t* options, 97*9507f98cSAndroid Build Coastguard Worker const char* key, size_t keylen, size_t* vallen, 98*9507f98cSAndroid Build Coastguard Worker char** errptr); 99*9507f98cSAndroid Build Coastguard Worker 100*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_iterator_t* leveldb_create_iterator( 101*9507f98cSAndroid Build Coastguard Worker leveldb_t* db, const leveldb_readoptions_t* options); 102*9507f98cSAndroid Build Coastguard Worker 103*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT const leveldb_snapshot_t* leveldb_create_snapshot(leveldb_t* db); 104*9507f98cSAndroid Build Coastguard Worker 105*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_release_snapshot( 106*9507f98cSAndroid Build Coastguard Worker leveldb_t* db, const leveldb_snapshot_t* snapshot); 107*9507f98cSAndroid Build Coastguard Worker 108*9507f98cSAndroid Build Coastguard Worker /* Returns NULL if property name is unknown. 109*9507f98cSAndroid Build Coastguard Worker Else returns a pointer to a malloc()-ed null-terminated value. */ 110*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT char* leveldb_property_value(leveldb_t* db, 111*9507f98cSAndroid Build Coastguard Worker const char* propname); 112*9507f98cSAndroid Build Coastguard Worker 113*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_approximate_sizes( 114*9507f98cSAndroid Build Coastguard Worker leveldb_t* db, int num_ranges, const char* const* range_start_key, 115*9507f98cSAndroid Build Coastguard Worker const size_t* range_start_key_len, const char* const* range_limit_key, 116*9507f98cSAndroid Build Coastguard Worker const size_t* range_limit_key_len, uint64_t* sizes); 117*9507f98cSAndroid Build Coastguard Worker 118*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_compact_range(leveldb_t* db, const char* start_key, 119*9507f98cSAndroid Build Coastguard Worker size_t start_key_len, 120*9507f98cSAndroid Build Coastguard Worker const char* limit_key, 121*9507f98cSAndroid Build Coastguard Worker size_t limit_key_len); 122*9507f98cSAndroid Build Coastguard Worker 123*9507f98cSAndroid Build Coastguard Worker /* Management operations */ 124*9507f98cSAndroid Build Coastguard Worker 125*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_destroy_db(const leveldb_options_t* options, 126*9507f98cSAndroid Build Coastguard Worker const char* name, char** errptr); 127*9507f98cSAndroid Build Coastguard Worker 128*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_repair_db(const leveldb_options_t* options, 129*9507f98cSAndroid Build Coastguard Worker const char* name, char** errptr); 130*9507f98cSAndroid Build Coastguard Worker 131*9507f98cSAndroid Build Coastguard Worker /* Iterator */ 132*9507f98cSAndroid Build Coastguard Worker 133*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_destroy(leveldb_iterator_t*); 134*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT uint8_t leveldb_iter_valid(const leveldb_iterator_t*); 135*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_seek_to_first(leveldb_iterator_t*); 136*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_seek_to_last(leveldb_iterator_t*); 137*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_seek(leveldb_iterator_t*, const char* k, 138*9507f98cSAndroid Build Coastguard Worker size_t klen); 139*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_next(leveldb_iterator_t*); 140*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_prev(leveldb_iterator_t*); 141*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT const char* leveldb_iter_key(const leveldb_iterator_t*, 142*9507f98cSAndroid Build Coastguard Worker size_t* klen); 143*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT const char* leveldb_iter_value(const leveldb_iterator_t*, 144*9507f98cSAndroid Build Coastguard Worker size_t* vlen); 145*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_iter_get_error(const leveldb_iterator_t*, 146*9507f98cSAndroid Build Coastguard Worker char** errptr); 147*9507f98cSAndroid Build Coastguard Worker 148*9507f98cSAndroid Build Coastguard Worker /* Write batch */ 149*9507f98cSAndroid Build Coastguard Worker 150*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_writebatch_t* leveldb_writebatch_create(void); 151*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_destroy(leveldb_writebatch_t*); 152*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_clear(leveldb_writebatch_t*); 153*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_put(leveldb_writebatch_t*, 154*9507f98cSAndroid Build Coastguard Worker const char* key, size_t klen, 155*9507f98cSAndroid Build Coastguard Worker const char* val, size_t vlen); 156*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_delete(leveldb_writebatch_t*, 157*9507f98cSAndroid Build Coastguard Worker const char* key, size_t klen); 158*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_iterate( 159*9507f98cSAndroid Build Coastguard Worker const leveldb_writebatch_t*, void* state, 160*9507f98cSAndroid Build Coastguard Worker void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), 161*9507f98cSAndroid Build Coastguard Worker void (*deleted)(void*, const char* k, size_t klen)); 162*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writebatch_append( 163*9507f98cSAndroid Build Coastguard Worker leveldb_writebatch_t* destination, const leveldb_writebatch_t* source); 164*9507f98cSAndroid Build Coastguard Worker 165*9507f98cSAndroid Build Coastguard Worker /* Options */ 166*9507f98cSAndroid Build Coastguard Worker 167*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_options_t* leveldb_options_create(void); 168*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_destroy(leveldb_options_t*); 169*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_comparator(leveldb_options_t*, 170*9507f98cSAndroid Build Coastguard Worker leveldb_comparator_t*); 171*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_filter_policy(leveldb_options_t*, 172*9507f98cSAndroid Build Coastguard Worker leveldb_filterpolicy_t*); 173*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_create_if_missing(leveldb_options_t*, 174*9507f98cSAndroid Build Coastguard Worker uint8_t); 175*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_error_if_exists(leveldb_options_t*, 176*9507f98cSAndroid Build Coastguard Worker uint8_t); 177*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_paranoid_checks(leveldb_options_t*, 178*9507f98cSAndroid Build Coastguard Worker uint8_t); 179*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*); 180*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_info_log(leveldb_options_t*, 181*9507f98cSAndroid Build Coastguard Worker leveldb_logger_t*); 182*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_write_buffer_size(leveldb_options_t*, 183*9507f98cSAndroid Build Coastguard Worker size_t); 184*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_max_open_files(leveldb_options_t*, int); 185*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_cache(leveldb_options_t*, 186*9507f98cSAndroid Build Coastguard Worker leveldb_cache_t*); 187*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_block_size(leveldb_options_t*, size_t); 188*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_block_restart_interval( 189*9507f98cSAndroid Build Coastguard Worker leveldb_options_t*, int); 190*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_max_file_size(leveldb_options_t*, 191*9507f98cSAndroid Build Coastguard Worker size_t); 192*9507f98cSAndroid Build Coastguard Worker 193*9507f98cSAndroid Build Coastguard Worker enum { leveldb_no_compression = 0, leveldb_snappy_compression = 1 }; 194*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_options_set_compression(leveldb_options_t*, int); 195*9507f98cSAndroid Build Coastguard Worker 196*9507f98cSAndroid Build Coastguard Worker /* Comparator */ 197*9507f98cSAndroid Build Coastguard Worker 198*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_comparator_t* leveldb_comparator_create( 199*9507f98cSAndroid Build Coastguard Worker void* state, void (*destructor)(void*), 200*9507f98cSAndroid Build Coastguard Worker int (*compare)(void*, const char* a, size_t alen, const char* b, 201*9507f98cSAndroid Build Coastguard Worker size_t blen), 202*9507f98cSAndroid Build Coastguard Worker const char* (*name)(void*)); 203*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_comparator_destroy(leveldb_comparator_t*); 204*9507f98cSAndroid Build Coastguard Worker 205*9507f98cSAndroid Build Coastguard Worker /* Filter policy */ 206*9507f98cSAndroid Build Coastguard Worker 207*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create( 208*9507f98cSAndroid Build Coastguard Worker void* state, void (*destructor)(void*), 209*9507f98cSAndroid Build Coastguard Worker char* (*create_filter)(void*, const char* const* key_array, 210*9507f98cSAndroid Build Coastguard Worker const size_t* key_length_array, int num_keys, 211*9507f98cSAndroid Build Coastguard Worker size_t* filter_length), 212*9507f98cSAndroid Build Coastguard Worker uint8_t (*key_may_match)(void*, const char* key, size_t length, 213*9507f98cSAndroid Build Coastguard Worker const char* filter, size_t filter_length), 214*9507f98cSAndroid Build Coastguard Worker const char* (*name)(void*)); 215*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t*); 216*9507f98cSAndroid Build Coastguard Worker 217*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom( 218*9507f98cSAndroid Build Coastguard Worker int bits_per_key); 219*9507f98cSAndroid Build Coastguard Worker 220*9507f98cSAndroid Build Coastguard Worker /* Read options */ 221*9507f98cSAndroid Build Coastguard Worker 222*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_readoptions_t* leveldb_readoptions_create(void); 223*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_readoptions_destroy(leveldb_readoptions_t*); 224*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_readoptions_set_verify_checksums( 225*9507f98cSAndroid Build Coastguard Worker leveldb_readoptions_t*, uint8_t); 226*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_readoptions_set_fill_cache(leveldb_readoptions_t*, 227*9507f98cSAndroid Build Coastguard Worker uint8_t); 228*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_readoptions_set_snapshot(leveldb_readoptions_t*, 229*9507f98cSAndroid Build Coastguard Worker const leveldb_snapshot_t*); 230*9507f98cSAndroid Build Coastguard Worker 231*9507f98cSAndroid Build Coastguard Worker /* Write options */ 232*9507f98cSAndroid Build Coastguard Worker 233*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_writeoptions_t* leveldb_writeoptions_create(void); 234*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writeoptions_destroy(leveldb_writeoptions_t*); 235*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_writeoptions_set_sync(leveldb_writeoptions_t*, 236*9507f98cSAndroid Build Coastguard Worker uint8_t); 237*9507f98cSAndroid Build Coastguard Worker 238*9507f98cSAndroid Build Coastguard Worker /* Cache */ 239*9507f98cSAndroid Build Coastguard Worker 240*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_cache_t* leveldb_cache_create_lru(size_t capacity); 241*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_cache_destroy(leveldb_cache_t* cache); 242*9507f98cSAndroid Build Coastguard Worker 243*9507f98cSAndroid Build Coastguard Worker /* Env */ 244*9507f98cSAndroid Build Coastguard Worker 245*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT leveldb_env_t* leveldb_create_default_env(void); 246*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_env_destroy(leveldb_env_t*); 247*9507f98cSAndroid Build Coastguard Worker 248*9507f98cSAndroid Build Coastguard Worker /* If not NULL, the returned buffer must be released using leveldb_free(). */ 249*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT char* leveldb_env_get_test_directory(leveldb_env_t*); 250*9507f98cSAndroid Build Coastguard Worker 251*9507f98cSAndroid Build Coastguard Worker /* Utility */ 252*9507f98cSAndroid Build Coastguard Worker 253*9507f98cSAndroid Build Coastguard Worker /* Calls free(ptr). 254*9507f98cSAndroid Build Coastguard Worker REQUIRES: ptr was malloc()-ed and returned by one of the routines 255*9507f98cSAndroid Build Coastguard Worker in this file. Note that in certain cases (typically on Windows), you 256*9507f98cSAndroid Build Coastguard Worker may need to call this routine instead of free(ptr) to dispose of 257*9507f98cSAndroid Build Coastguard Worker malloc()-ed memory returned by this library. */ 258*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT void leveldb_free(void* ptr); 259*9507f98cSAndroid Build Coastguard Worker 260*9507f98cSAndroid Build Coastguard Worker /* Return the major version number for this release. */ 261*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT int leveldb_major_version(void); 262*9507f98cSAndroid Build Coastguard Worker 263*9507f98cSAndroid Build Coastguard Worker /* Return the minor version number for this release. */ 264*9507f98cSAndroid Build Coastguard Worker LEVELDB_EXPORT int leveldb_minor_version(void); 265*9507f98cSAndroid Build Coastguard Worker 266*9507f98cSAndroid Build Coastguard Worker #ifdef __cplusplus 267*9507f98cSAndroid Build Coastguard Worker } /* end extern "C" */ 268*9507f98cSAndroid Build Coastguard Worker #endif 269*9507f98cSAndroid Build Coastguard Worker 270*9507f98cSAndroid Build Coastguard Worker #endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */ 271