/* Generated by CIL v. 1.5.1 */ /* print_CIL_Input is true */ #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 81 #pragma pack(pop) #line 297 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" typedef unsigned int size_t; #line 604 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 464 #pragma pack(pop) #line 144 "src/bson.h" #pragma pack(1) #line 149 #pragma pack() #line 64 "src/md5.h" typedef unsigned char mongo_md5_byte_t; #line 65 "src/md5.h" typedef unsigned int mongo_md5_word_t; #line 68 "src/md5.h" struct mongo_md5_state_s { mongo_md5_word_t count[2] ; mongo_md5_word_t abcd[4] ; mongo_md5_byte_t buf[64] ; }; #line 68 "src/md5.h" typedef struct mongo_md5_state_s mongo_md5_state_t; #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 81 #pragma pack(pop) #line 604 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 26 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" struct _iobuf { char *_ptr ; int _cnt ; char *_base ; int _flag ; int _file ; int _charbuf ; int _bufsiz ; char *_tmpfname ; }; #line 36 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" typedef struct _iobuf FILE; #line 464 #pragma pack(pop) #line 41 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdint.h" typedef long long int64_t; #line 104 "src/bson.h" enum __anonenum_bson_type_8 { BSON_EOO = 0, BSON_DOUBLE = 1, BSON_STRING = 2, BSON_OBJECT = 3, BSON_ARRAY = 4, BSON_BINDATA = 5, BSON_UNDEFINED = 6, BSON_OID = 7, BSON_BOOL = 8, BSON_DATE = 9, BSON_NULL = 10, BSON_REGEX = 11, BSON_DBREF = 12, BSON_CODE = 13, BSON_SYMBOL = 14, BSON_CODEWSCOPE = 15, BSON_INT = 16, BSON_TIMESTAMP = 17, BSON_LONG = 18 } ; #line 104 "src/bson.h" typedef enum __anonenum_bson_type_8 bson_type; #line 126 "src/bson.h" typedef int bson_bool_t; #line 128 "src/bson.h" struct __anonstruct_bson_iterator_9 { char const *cur ; bson_bool_t first ; }; #line 128 "src/bson.h" typedef struct __anonstruct_bson_iterator_9 bson_iterator; #line 133 "src/bson.h" struct __anonstruct_bson_10 { char *data ; char *cur ; int dataSize ; bson_bool_t finished ; int stack[32] ; int stackPos ; int err ; char *errstr ; }; #line 133 "src/bson.h" typedef struct __anonstruct_bson_10 bson; #line 144 #pragma pack(1) #line 149 #pragma pack() #line 41 "src/mongo.h" enum mongo_error_t { MONGO_CONN_SUCCESS = 0, MONGO_CONN_NO_SOCKET = 1, MONGO_CONN_FAIL = 2, MONGO_CONN_ADDR_FAIL = 3, MONGO_CONN_NOT_MASTER = 4, MONGO_CONN_BAD_SET_NAME = 5, MONGO_CONN_NO_PRIMARY = 6, MONGO_IO_ERROR = 7, MONGO_SOCKET_ERROR = 8, MONGO_READ_SIZE_ERROR = 9, MONGO_COMMAND_FAILED = 10, MONGO_WRITE_ERROR = 11, MONGO_NS_INVALID = 12, MONGO_BSON_INVALID = 13, MONGO_BSON_NOT_FINISHED = 14, MONGO_BSON_TOO_LARGE = 15, MONGO_WRITE_CONCERN_INVALID = 16 } ; #line 41 "src/mongo.h" typedef enum mongo_error_t mongo_error_t; #line 62 enum mongo_cursor_error_t { MONGO_CURSOR_EXHAUSTED = 0, MONGO_CURSOR_INVALID = 1, MONGO_CURSOR_PENDING = 2, MONGO_CURSOR_QUERY_FAIL = 3, MONGO_CURSOR_BSON_ERROR = 4 } ; #line 62 "src/mongo.h" typedef enum mongo_cursor_error_t mongo_cursor_error_t; #line 113 #pragma pack(1) #line 114 "src/mongo.h" struct __anonstruct_mongo_header_13 { int len ; int id ; int responseTo ; int op ; }; #line 114 "src/mongo.h" typedef struct __anonstruct_mongo_header_13 mongo_header; #line 121 "src/mongo.h" struct __anonstruct_mongo_message_14 { mongo_header head ; char data ; }; #line 121 "src/mongo.h" typedef struct __anonstruct_mongo_message_14 mongo_message; #line 126 "src/mongo.h" struct __anonstruct_mongo_reply_fields_15 { int flag ; int64_t cursorID ; int start ; int num ; }; #line 126 "src/mongo.h" typedef struct __anonstruct_mongo_reply_fields_15 mongo_reply_fields; #line 133 "src/mongo.h" struct __anonstruct_mongo_reply_16 { mongo_header head ; mongo_reply_fields fields ; char objs ; }; #line 133 "src/mongo.h" typedef struct __anonstruct_mongo_reply_16 mongo_reply; #line 138 #pragma pack() #line 140 "src/mongo.h" struct mongo_host_port { char host[255] ; int port ; struct mongo_host_port *next ; }; #line 140 "src/mongo.h" typedef struct mongo_host_port mongo_host_port; #line 146 "src/mongo.h" struct mongo_write_concern { int w ; int wtimeout ; int j ; int fsync ; char const *mode ; bson *cmd ; }; #line 146 "src/mongo.h" typedef struct mongo_write_concern mongo_write_concern; #line 156 "src/mongo.h" struct __anonstruct_mongo_replica_set_17 { mongo_host_port *seeds ; mongo_host_port *hosts ; char *name ; bson_bool_t primary_connected ; }; #line 156 "src/mongo.h" typedef struct __anonstruct_mongo_replica_set_17 mongo_replica_set; #line 163 "src/mongo.h" struct mongo { mongo_host_port *primary ; mongo_replica_set *replica_set ; int sock ; int flags ; int conn_timeout_ms ; int op_timeout_ms ; int max_bson_size ; bson_bool_t connected ; mongo_write_concern *write_concern ; mongo_error_t err ; int errcode ; char errstr[128] ; int lasterrcode ; char lasterrstr[128] ; }; #line 163 "src/mongo.h" typedef struct mongo mongo; #line 181 "src/mongo.h" struct __anonstruct_mongo_cursor_18 { mongo_reply *reply ; mongo *conn ; char const *ns ; int flags ; int seen ; bson current ; mongo_cursor_error_t err ; bson const *query ; bson const *fields ; int options ; int limit ; int skip ; }; #line 181 "src/mongo.h" typedef struct __anonstruct_mongo_cursor_18 mongo_cursor; #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 81 #pragma pack(pop) #line 604 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 464 #pragma pack(pop) #line 144 "src/bson.h" #pragma pack(1) #line 149 #pragma pack() #line 113 "src/mongo.h" #pragma pack(1) #line 138 #pragma pack() #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/excpt.h" #pragma pack(push,_CRT_PACKING) #line 122 #pragma pack(pop) #line 107 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/windef.h" typedef unsigned short WORD; #line 49 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/basetsd.h" typedef unsigned int UINT_PTR; #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack4.h" #pragma pack(push,4) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack4.h" #pragma pack(push,4) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack2.h" #pragma pack(push,2) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack2.h" #pragma pack(push,2) #line 7 #pragma pack(push,2) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack8.h" #pragma pack(push,8) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack2.h" #pragma pack(push,2) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack2.h" #pragma pack(push,2) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack4.h" #pragma pack(push,4) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack2.h" #pragma pack(push,2) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack8.h" #pragma pack(push,8) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack8.h" #pragma pack(push,8) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack4.h" #pragma pack(push,4) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack8.h" #pragma pack(push,8) #line 7 #pragma pack(push,8) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack8.h" #pragma pack(push,8) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 7 #pragma pack(pop) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/pshpack1.h" #pragma pack(push,1) #line 7 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/poppack.h" #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_bsd_types.h" typedef unsigned short u_short; #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/mingw_inc/_socket_types.h" typedef UINT_PTR SOCKET; #line 69 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/mingw_inc/_ip_types.h" struct sockaddr { u_short sa_family ; char sa_data[14] ; }; #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/mingw_inc/_wsadata.h" struct WSAData { WORD wVersion ; WORD wHighVersion ; char szDescription[257] ; char szSystemStatus[129] ; unsigned short iMaxSockets ; unsigned short iMaxUdpDg ; char *lpVendorInfo ; }; #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/mingw_inc/_wsadata.h" typedef struct WSAData WSADATA; #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/mingw_inc/_wsadata.h" typedef struct WSAData *LPWSADATA; #line 233 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/ws2tcpip.h" struct addrinfo { int ai_flags ; int ai_family ; int ai_socktype ; int ai_protocol ; size_t ai_addrlen ; char *ai_canonname ; struct sockaddr *ai_addr ; struct addrinfo *ai_next ; }; #line 233 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/ws2tcpip.h" typedef struct addrinfo ADDRINFOA; #line 261 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/ws2tcpip.h" typedef ADDRINFOA *LPADDRINFO; #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 81 #pragma pack(pop) #line 396 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" typedef long __time32_t; #line 407 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" typedef __time32_t time_t; #line 604 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 464 #pragma pack(pop) #line 42 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdint.h" typedef unsigned long long uint64_t; #line 144 "src/bson.h" #pragma pack(1) #line 145 "src/bson.h" union __anonunion_bson_oid_t_11 { char bytes[12] ; int ints[3] ; }; #line 145 "src/bson.h" typedef union __anonunion_bson_oid_t_11 bson_oid_t; #line 149 #pragma pack() #line 151 "src/bson.h" typedef int64_t bson_date_t; #line 113 "src/mongo.h" #pragma pack(1) #line 138 #pragma pack() #line 29 "src/gridfs.h" typedef uint64_t gridfs_offset; #line 32 "src/gridfs.h" struct __anonstruct_gridfs_20 { mongo *client ; char const *dbname ; char const *prefix ; char const *files_ns ; char const *chunks_ns ; }; #line 32 "src/gridfs.h" typedef struct __anonstruct_gridfs_20 gridfs; #line 41 "src/gridfs.h" struct __anonstruct_gridfile_21 { gridfs *gfs ; bson *meta ; gridfs_offset pos ; bson_oid_t id ; char *remote_name ; char *content_type ; gridfs_offset length ; int chunk_num ; char *pending_data ; int pending_len ; }; #line 41 "src/gridfs.h" typedef struct __anonstruct_gridfile_21 gridfile; #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 39 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" typedef __builtin_va_list __gnuc_va_list; #line 44 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" typedef __gnuc_va_list va_list; #line 81 #pragma pack(pop) #line 604 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 464 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 144 "src/bson.h" #pragma pack(1) #line 149 #pragma pack() #line 153 "src/bson.h" struct __anonstruct_bson_timestamp_t_12 { int i ; int t ; }; #line 153 "src/bson.h" typedef struct __anonstruct_bson_timestamp_t_12 bson_timestamp_t; #line 954 "src/bson.h" typedef void (*bson_err_handler)(char const *errmsg ); #line 202 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(push,_CRT_PACKING) #line 18 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/vadefs.h" #pragma pack(push,_CRT_PACKING) #line 81 #pragma pack(pop) #line 604 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/_mingw.h" #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" #pragma pack(push,_CRT_PACKING) #line 272 #pragma pack(pop) #line 15 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/sys/timeb.h" #pragma pack(push,_CRT_PACKING) #line 117 #pragma pack(pop) #line 12 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" #pragma pack(push,_CRT_PACKING) #line 60 #pragma pack(4) #line 64 #pragma pack() #line 85 #pragma pack(4) #line 89 #pragma pack() #line 609 #pragma pack(pop) #line 11 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/malloc.h" #pragma pack(push,_CRT_PACKING) #line 199 #pragma pack(pop) #line 13 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" #pragma pack(push,_CRT_PACKING) #line 464 #pragma pack(pop) #line 144 "src/bson.h" #pragma pack(1) #line 149 #pragma pack() #line 1 "md5.o" #pragma merger("0","./md5.i","") #line 41 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/string.h" extern void *( __attribute__((__cdecl__)) memcpy)(void *_Dst , void const *_Src , size_t _Size ) ; #line 80 "src/md5.h" void mongo_md5_init(mongo_md5_state_t *pms ) ; #line 83 void mongo_md5_append(mongo_md5_state_t *pms , mongo_md5_byte_t const *data___0 , int nbytes ) ; #line 86 void mongo_md5_finish(mongo_md5_state_t *pms , mongo_md5_byte_t *digest ) ; #line 131 "src/md5.c" static void mongo_md5_process(mongo_md5_state_t *pms , mongo_md5_byte_t const *data___0 ) { mongo_md5_word_t a ; mongo_md5_word_t b ; mongo_md5_word_t c ; mongo_md5_word_t d ; mongo_md5_word_t t ; mongo_md5_word_t xbuf[16] ; mongo_md5_word_t const *X ; { #line 134 a = pms->abcd[0]; #line 134 b = pms->abcd[1]; #line 134 c = pms->abcd[2]; #line 134 d = pms->abcd[3]; #line 164 if (! ((data___0 - (mongo_md5_byte_t const *)0) & 3)) { #line 166 X = (mongo_md5_word_t const *)data___0; } else { #line 169 memcpy((void *)(xbuf), (void const *)data___0, (size_t )64); #line 170 X = (mongo_md5_word_t const *)(xbuf); } #line 207 t = ((a + ((b & c) | (~ b & d))) + (mongo_md5_word_t )*(X + 0)) + 3614090360U; #line 207 a = ((t << 7) | (t >> 25)) + b; #line 208 t = ((d + ((a & b) | (~ a & c))) + (mongo_md5_word_t )*(X + 1)) + 3905402710U; #line 208 d = ((t << 12) | (t >> 20)) + a; #line 209 t = ((c + ((d & a) | (~ d & b))) + (mongo_md5_word_t )*(X + 2)) + 606105819U; #line 209 c = ((t << 17) | (t >> 15)) + d; #line 210 t = ((b + ((c & d) | (~ c & a))) + (mongo_md5_word_t )*(X + 3)) + 3250441966U; #line 210 b = ((t << 22) | (t >> 10)) + c; #line 211 t = ((a + ((b & c) | (~ b & d))) + (mongo_md5_word_t )*(X + 4)) + 4118548399U; #line 211 a = ((t << 7) | (t >> 25)) + b; #line 212 t = ((d + ((a & b) | (~ a & c))) + (mongo_md5_word_t )*(X + 5)) + 1200080426U; #line 212 d = ((t << 12) | (t >> 20)) + a; #line 213 t = ((c + ((d & a) | (~ d & b))) + (mongo_md5_word_t )*(X + 6)) + 2821735955U; #line 213 c = ((t << 17) | (t >> 15)) + d; #line 214 t = ((b + ((c & d) | (~ c & a))) + (mongo_md5_word_t )*(X + 7)) + 4249261313U; #line 214 b = ((t << 22) | (t >> 10)) + c; #line 215 t = ((a + ((b & c) | (~ b & d))) + (mongo_md5_word_t )*(X + 8)) + 1770035416U; #line 215 a = ((t << 7) | (t >> 25)) + b; #line 216 t = ((d + ((a & b) | (~ a & c))) + (mongo_md5_word_t )*(X + 9)) + 2336552879U; #line 216 d = ((t << 12) | (t >> 20)) + a; #line 217 t = ((c + ((d & a) | (~ d & b))) + (mongo_md5_word_t )*(X + 10)) + 4294925233U; #line 217 c = ((t << 17) | (t >> 15)) + d; #line 218 t = ((b + ((c & d) | (~ c & a))) + (mongo_md5_word_t )*(X + 11)) + 2304563134U; #line 218 b = ((t << 22) | (t >> 10)) + c; #line 219 t = ((a + ((b & c) | (~ b & d))) + (mongo_md5_word_t )*(X + 12)) + 1804603682U; #line 219 a = ((t << 7) | (t >> 25)) + b; #line 220 t = ((d + ((a & b) | (~ a & c))) + (mongo_md5_word_t )*(X + 13)) + 4254626195U; #line 220 d = ((t << 12) | (t >> 20)) + a; #line 221 t = ((c + ((d & a) | (~ d & b))) + (mongo_md5_word_t )*(X + 14)) + 2792965006U; #line 221 c = ((t << 17) | (t >> 15)) + d; #line 222 t = ((b + ((c & d) | (~ c & a))) + (mongo_md5_word_t )*(X + 15)) + 1236535329U; #line 222 b = ((t << 22) | (t >> 10)) + c; #line 233 t = ((a + ((b & d) | (c & ~ d))) + (mongo_md5_word_t )*(X + 1)) + 4129170786U; #line 233 a = ((t << 5) | (t >> 27)) + b; #line 234 t = ((d + ((a & c) | (b & ~ c))) + (mongo_md5_word_t )*(X + 6)) + 3225465664U; #line 234 d = ((t << 9) | (t >> 23)) + a; #line 235 t = ((c + ((d & b) | (a & ~ b))) + (mongo_md5_word_t )*(X + 11)) + 643717713U; #line 235 c = ((t << 14) | (t >> 18)) + d; #line 236 t = ((b + ((c & a) | (d & ~ a))) + (mongo_md5_word_t )*(X + 0)) + 3921069994U; #line 236 b = ((t << 20) | (t >> 12)) + c; #line 237 t = ((a + ((b & d) | (c & ~ d))) + (mongo_md5_word_t )*(X + 5)) + 3593408605U; #line 237 a = ((t << 5) | (t >> 27)) + b; #line 238 t = ((d + ((a & c) | (b & ~ c))) + (mongo_md5_word_t )*(X + 10)) + 38016083U; #line 238 d = ((t << 9) | (t >> 23)) + a; #line 239 t = ((c + ((d & b) | (a & ~ b))) + (mongo_md5_word_t )*(X + 15)) + 3634488961U; #line 239 c = ((t << 14) | (t >> 18)) + d; #line 240 t = ((b + ((c & a) | (d & ~ a))) + (mongo_md5_word_t )*(X + 4)) + 3889429448U; #line 240 b = ((t << 20) | (t >> 12)) + c; #line 241 t = ((a + ((b & d) | (c & ~ d))) + (mongo_md5_word_t )*(X + 9)) + 568446438U; #line 241 a = ((t << 5) | (t >> 27)) + b; #line 242 t = ((d + ((a & c) | (b & ~ c))) + (mongo_md5_word_t )*(X + 14)) + 3275163606U; #line 242 d = ((t << 9) | (t >> 23)) + a; #line 243 t = ((c + ((d & b) | (a & ~ b))) + (mongo_md5_word_t )*(X + 3)) + 4107603335U; #line 243 c = ((t << 14) | (t >> 18)) + d; #line 244 t = ((b + ((c & a) | (d & ~ a))) + (mongo_md5_word_t )*(X + 8)) + 1163531501U; #line 244 b = ((t << 20) | (t >> 12)) + c; #line 245 t = ((a + ((b & d) | (c & ~ d))) + (mongo_md5_word_t )*(X + 13)) + 2850285829U; #line 245 a = ((t << 5) | (t >> 27)) + b; #line 246 t = ((d + ((a & c) | (b & ~ c))) + (mongo_md5_word_t )*(X + 2)) + 4243563512U; #line 246 d = ((t << 9) | (t >> 23)) + a; #line 247 t = ((c + ((d & b) | (a & ~ b))) + (mongo_md5_word_t )*(X + 7)) + 1735328473U; #line 247 c = ((t << 14) | (t >> 18)) + d; #line 248 t = ((b + ((c & a) | (d & ~ a))) + (mongo_md5_word_t )*(X + 12)) + 2368359562U; #line 248 b = ((t << 20) | (t >> 12)) + c; #line 259 t = ((a + ((b ^ c) ^ d)) + (mongo_md5_word_t )*(X + 5)) + 4294588738U; #line 259 a = ((t << 4) | (t >> 28)) + b; #line 260 t = ((d + ((a ^ b) ^ c)) + (mongo_md5_word_t )*(X + 8)) + 2272392833U; #line 260 d = ((t << 11) | (t >> 21)) + a; #line 261 t = ((c + ((d ^ a) ^ b)) + (mongo_md5_word_t )*(X + 11)) + 1839030562U; #line 261 c = ((t << 16) | (t >> 16)) + d; #line 262 t = ((b + ((c ^ d) ^ a)) + (mongo_md5_word_t )*(X + 14)) + 4259657740U; #line 262 b = ((t << 23) | (t >> 9)) + c; #line 263 t = ((a + ((b ^ c) ^ d)) + (mongo_md5_word_t )*(X + 1)) + 2763975236U; #line 263 a = ((t << 4) | (t >> 28)) + b; #line 264 t = ((d + ((a ^ b) ^ c)) + (mongo_md5_word_t )*(X + 4)) + 1272893353U; #line 264 d = ((t << 11) | (t >> 21)) + a; #line 265 t = ((c + ((d ^ a) ^ b)) + (mongo_md5_word_t )*(X + 7)) + 4139469664U; #line 265 c = ((t << 16) | (t >> 16)) + d; #line 266 t = ((b + ((c ^ d) ^ a)) + (mongo_md5_word_t )*(X + 10)) + 3200236656U; #line 266 b = ((t << 23) | (t >> 9)) + c; #line 267 t = ((a + ((b ^ c) ^ d)) + (mongo_md5_word_t )*(X + 13)) + 681279174U; #line 267 a = ((t << 4) | (t >> 28)) + b; #line 268 t = ((d + ((a ^ b) ^ c)) + (mongo_md5_word_t )*(X + 0)) + 3936430074U; #line 268 d = ((t << 11) | (t >> 21)) + a; #line 269 t = ((c + ((d ^ a) ^ b)) + (mongo_md5_word_t )*(X + 3)) + 3572445317U; #line 269 c = ((t << 16) | (t >> 16)) + d; #line 270 t = ((b + ((c ^ d) ^ a)) + (mongo_md5_word_t )*(X + 6)) + 76029189U; #line 270 b = ((t << 23) | (t >> 9)) + c; #line 271 t = ((a + ((b ^ c) ^ d)) + (mongo_md5_word_t )*(X + 9)) + 3654602809U; #line 271 a = ((t << 4) | (t >> 28)) + b; #line 272 t = ((d + ((a ^ b) ^ c)) + (mongo_md5_word_t )*(X + 12)) + 3873151461U; #line 272 d = ((t << 11) | (t >> 21)) + a; #line 273 t = ((c + ((d ^ a) ^ b)) + (mongo_md5_word_t )*(X + 15)) + 530742520U; #line 273 c = ((t << 16) | (t >> 16)) + d; #line 274 t = ((b + ((c ^ d) ^ a)) + (mongo_md5_word_t )*(X + 2)) + 3299628645U; #line 274 b = ((t << 23) | (t >> 9)) + c; #line 285 t = ((a + (c ^ (b | ~ d))) + (mongo_md5_word_t )*(X + 0)) + 4096336452U; #line 285 a = ((t << 6) | (t >> 26)) + b; #line 286 t = ((d + (b ^ (a | ~ c))) + (mongo_md5_word_t )*(X + 7)) + 1126891415U; #line 286 d = ((t << 10) | (t >> 22)) + a; #line 287 t = ((c + (a ^ (d | ~ b))) + (mongo_md5_word_t )*(X + 14)) + 2878612391U; #line 287 c = ((t << 15) | (t >> 17)) + d; #line 288 t = ((b + (d ^ (c | ~ a))) + (mongo_md5_word_t )*(X + 5)) + 4237533241U; #line 288 b = ((t << 21) | (t >> 11)) + c; #line 289 t = ((a + (c ^ (b | ~ d))) + (mongo_md5_word_t )*(X + 12)) + 1700485571U; #line 289 a = ((t << 6) | (t >> 26)) + b; #line 290 t = ((d + (b ^ (a | ~ c))) + (mongo_md5_word_t )*(X + 3)) + 2399980690U; #line 290 d = ((t << 10) | (t >> 22)) + a; #line 291 t = ((c + (a ^ (d | ~ b))) + (mongo_md5_word_t )*(X + 10)) + 4293915773U; #line 291 c = ((t << 15) | (t >> 17)) + d; #line 292 t = ((b + (d ^ (c | ~ a))) + (mongo_md5_word_t )*(X + 1)) + 2240044497U; #line 292 b = ((t << 21) | (t >> 11)) + c; #line 293 t = ((a + (c ^ (b | ~ d))) + (mongo_md5_word_t )*(X + 8)) + 1873313359U; #line 293 a = ((t << 6) | (t >> 26)) + b; #line 294 t = ((d + (b ^ (a | ~ c))) + (mongo_md5_word_t )*(X + 15)) + 4264355552U; #line 294 d = ((t << 10) | (t >> 22)) + a; #line 295 t = ((c + (a ^ (d | ~ b))) + (mongo_md5_word_t )*(X + 6)) + 2734768916U; #line 295 c = ((t << 15) | (t >> 17)) + d; #line 296 t = ((b + (d ^ (c | ~ a))) + (mongo_md5_word_t )*(X + 13)) + 1309151649U; #line 296 b = ((t << 21) | (t >> 11)) + c; #line 297 t = ((a + (c ^ (b | ~ d))) + (mongo_md5_word_t )*(X + 4)) + 4149444226U; #line 297 a = ((t << 6) | (t >> 26)) + b; #line 298 t = ((d + (b ^ (a | ~ c))) + (mongo_md5_word_t )*(X + 11)) + 3174756917U; #line 298 d = ((t << 10) | (t >> 22)) + a; #line 299 t = ((c + (a ^ (d | ~ b))) + (mongo_md5_word_t )*(X + 2)) + 718787259U; #line 299 c = ((t << 15) | (t >> 17)) + d; #line 300 t = ((b + (d ^ (c | ~ a))) + (mongo_md5_word_t )*(X + 9)) + 3951481745U; #line 300 b = ((t << 21) | (t >> 11)) + c; #line 306 pms->abcd[0] += a; #line 307 pms->abcd[1] += b; #line 308 pms->abcd[2] += c; #line 309 pms->abcd[3] += d; #line 310 return; } } #line 312 "src/md5.c" void mongo_md5_init(mongo_md5_state_t *pms ) { mongo_md5_word_t tmp ; { #line 315 tmp = (mongo_md5_word_t )0; #line 315 pms->count[1] = tmp; #line 315 pms->count[0] = tmp; #line 316 pms->abcd[0] = (mongo_md5_word_t )1732584193; #line 317 pms->abcd[1] = 4023233417U; #line 318 pms->abcd[2] = 2562383102U; #line 319 pms->abcd[3] = (mongo_md5_word_t )271733878; #line 320 return; } } #line 322 "src/md5.c" void mongo_md5_append(mongo_md5_state_t *pms , mongo_md5_byte_t const *data___0 , int nbytes ) { mongo_md5_byte_t const *p ; int left ; int offset ; mongo_md5_word_t nbits ; int copy ; int tmp ; { #line 325 p = data___0; #line 326 left = nbytes; #line 327 offset = (int )((pms->count[0] >> 3) & 63U); #line 328 nbits = (mongo_md5_word_t )(nbytes << 3); #line 330 if (nbytes <= 0) { #line 331 return; } #line 334 pms->count[1] += (mongo_md5_word_t )(nbytes >> 29); #line 335 pms->count[0] += nbits; #line 336 if (pms->count[0] < nbits) { #line 337 (pms->count[1]) ++; } #line 340 if (offset) { #line 341 if (offset + nbytes > 64) { #line 341 tmp = 64 - offset; } else { #line 341 tmp = nbytes; } #line 341 copy = tmp; #line 343 memcpy((void *)(pms->buf + offset), (void const *)p, (size_t )copy); #line 344 if (offset + copy < 64) { #line 345 return; } #line 346 p += copy; #line 347 left -= copy; #line 348 mongo_md5_process(pms, (mongo_md5_byte_t const *)(pms->buf)); } #line 352 while (left >= 64) { #line 353 mongo_md5_process(pms, p); #line 352 p += 64; #line 352 left -= 64; } #line 356 if (left) { #line 357 memcpy((void *)(pms->buf), (void const *)p, (size_t )left); } #line 358 return; } } #line 363 "src/md5.c" static mongo_md5_byte_t const pad[64] = #line 363 { (mongo_md5_byte_t const )128, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0, (mongo_md5_byte_t const )0}; #line 360 "src/md5.c" void mongo_md5_finish(mongo_md5_state_t *pms , mongo_md5_byte_t *digest ) { mongo_md5_byte_t data___0[8] ; int i ; { #line 373 i = 0; #line 373 while (i < 8) { #line 374 data___0[i] = (mongo_md5_byte_t )(pms->count[i >> 2] >> ((i & 3) << 3)); #line 373 i ++; } #line 376 mongo_md5_append(pms, pad, (int )(((55U - (pms->count[0] >> 3)) & 63U) + 1U)); #line 378 mongo_md5_append(pms, (mongo_md5_byte_t const *)(data___0), 8); #line 379 i = 0; #line 379 while (i < 16) { #line 380 *(digest + i) = (mongo_md5_byte_t )(pms->abcd[i >> 2] >> ((i & 3) << 3)); #line 379 i ++; } #line 381 return; } } #line 1 "mongo.o" #pragma merger("0","./mongo.i","") #line 340 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" extern int ( __attribute__((__cdecl__)) atoi)(char const *_Str ) ; #line 375 extern int ( __attribute__((__cdecl__)) rand)(void) ; #line 403 extern void ( __attribute__((__cdecl__)) free)(void *_Memory ) ; #line 42 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/string.h" extern void *( __attribute__((__cdecl__)) memset)(void *_Dst , int _Val , size_t _Size ) ; #line 49 extern char *( __attribute__((__cdecl__)) strcpy)(char *_Dest , char const *_Source ) ; #line 51 extern int ( __attribute__((__cdecl__)) strcmp)(char const *_Str1 , char const *_Str2 ) ; #line 52 extern size_t ( __attribute__((__cdecl__)) strlen)(char const *_Str ) ; #line 58 extern char *( __attribute__((__cdecl__)) strchr)(char const *_Str , int _Val ) ; #line 79 extern char *strncpy(char *_Dest , char const *_Source , size_t _Count ) ; #line 108 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" extern FILE (*_imp___iob)[] ; #line 187 extern int ( __attribute__((__cdecl__)) fprintf)(FILE *_File , char const *_Format , ...) ; #line 172 "src/bson.h" int bson_size(bson const *b ) ; #line 206 bson_type bson_find(bson_iterator *it , bson const *obj , char const *name ) ; #line 217 void bson_iterator_init(bson_iterator *i , bson const *b ) ; #line 226 void bson_iterator_from_buffer(bson_iterator *i , char const *buffer ) ; #line 245 bson_type bson_iterator_next(bson_iterator *i ) ; #line 263 char const *bson_iterator_key(bson_iterator const *i ) ; #line 272 char const *bson_iterator_value(bson_iterator const *i ) ; #line 283 double bson_iterator_double(bson_iterator const *i ) ; #line 292 int bson_iterator_int(bson_iterator const *i ) ; #line 326 bson_bool_t bson_iterator_bool(bson_iterator const *i ) ; #line 388 char const *bson_iterator_string(bson_iterator const *i ) ; #line 398 int bson_iterator_string_len(bson_iterator const *i ) ; #line 571 void bson_init(bson *b ) ; #line 582 int bson_init_data(bson *b , char *data___0 ) ; #line 583 int bson_init_finished_data(bson *b , char *data___0 ) ; #line 594 void bson_init_size(bson *b , int size ) ; #line 615 int bson_finish(bson *b ) ; #line 623 void bson_destroy(bson *b ) ; #line 633 bson *bson_empty(bson *obj ) ; #line 675 int bson_append_int(bson *b , char const *name , int const i ) ; #line 708 int bson_append_string(bson *b , char const *name , char const *value ) ; #line 816 int bson_append_bool(bson *b , char const *name , bson_bool_t const i ) ; #line 859 int bson_append_bson(bson *b , char const *name , bson const *bson___0 ) ; #line 915 int bson_append_start_object(bson *b , char const *name ) ; #line 934 int bson_append_finish_object(bson *b ) ; #line 966 int (*bson_sprintf)(char * , char const * , ...) ; #line 969 void bson_free(void *ptr ) ; #line 980 void *bson_malloc(int size ) ; #line 1018 void bson_fatal_msg(int ok , char const *msg ) ; #line 202 "src/mongo.h" void mongo_init_sockets(void) ; #line 214 void mongo_init(mongo *conn ) ; #line 226 int mongo_client(mongo *conn , char const *host , int port ) ; #line 239 int mongo_connect(mongo *conn , char const *host , int port ) ; #line 248 void mongo_replica_set_init(mongo *conn , char const *name ) ; #line 258 void mongo_replset_init(mongo *conn , char const *name ) ; #line 269 void mongo_replica_set_add_seed(mongo *conn , char const *host , int port ) ; #line 281 void mongo_replset_add_seed(mongo *conn , char const *host , int port ) ; #line 290 void mongo_parse_host(char const *host_string , mongo_host_port *host_port ) ; #line 301 int mongo_validate_ns(mongo *conn , char const *ns ) ; #line 314 int mongo_replica_set_client(mongo *conn ) ; #line 328 int mongo_replset_connect(mongo *conn ) ; #line 340 int mongo_set_op_timeout(mongo *conn , int millis ) ; #line 350 int mongo_check_connection(mongo *conn ) ; #line 363 int mongo_reconnect(mongo *conn ) ; #line 372 void mongo_disconnect(mongo *conn ) ; #line 382 void mongo_destroy(mongo *conn ) ; #line 393 void mongo_set_write_concern(mongo *conn , mongo_write_concern *write_concern ) ; #line 418 int mongo_insert(mongo *conn , char const *ns , bson const *bson___0 , mongo_write_concern *custom_write_concern ) ; #line 440 int mongo_insert_batch(mongo *conn , char const *ns , bson const **bsons , int count , mongo_write_concern *custom_write_concern , int flags ) ; #line 460 int mongo_update(mongo *conn , char const *ns , bson const *cond , bson const *op , int flags , mongo_write_concern *custom_write_concern ) ; #line 476 int mongo_remove(mongo *conn , char const *ns , bson const *cond , mongo_write_concern *custom_write_concern ) ; #line 488 void mongo_write_concern_init(mongo_write_concern *write_concern ) ; #line 497 int mongo_write_concern_finish(mongo_write_concern *write_concern ) ; #line 503 void mongo_write_concern_destroy(mongo_write_concern *write_concern ) ; #line 524 mongo_cursor *mongo_find(mongo *conn , char const *ns , bson const *query , bson const *fields , int limit , int skip , int options ) ; #line 534 void mongo_cursor_init(mongo_cursor *cursor , mongo *conn , char const *ns ) ; #line 547 void mongo_cursor_set_query(mongo_cursor *cursor , bson const *query ) ; #line 557 void mongo_cursor_set_fields(mongo_cursor *cursor , bson const *fields ) ; #line 565 void mongo_cursor_set_skip(mongo_cursor *cursor , int skip ) ; #line 573 void mongo_cursor_set_limit(mongo_cursor *cursor , int limit ) ; #line 582 void mongo_cursor_set_options(mongo_cursor *cursor , int options ) ; #line 590 char const *mongo_cursor_data(mongo_cursor *cursor ) ; #line 598 bson const *mongo_cursor_bson(mongo_cursor *cursor ) ; #line 609 int mongo_cursor_next(mongo_cursor *cursor ) ; #line 620 int mongo_cursor_destroy(mongo_cursor *cursor ) ; #line 633 int mongo_find_one(mongo *conn , char const *ns , bson const *query , bson const *fields , bson *out ) ; #line 652 double mongo_count(mongo *conn , char const *db , char const *ns , bson const *query ) ; #line 668 int mongo_create_index(mongo *conn , char const *ns , bson const *key , int options , bson *out ) ; #line 683 int mongo_create_capped_collection(mongo *conn , char const *db , char const *collection , int size , int max , bson *out ) ; #line 697 bson_bool_t mongo_create_simple_index(mongo *conn , char const *ns , char const *field , int options , bson *out ) ; #line 710 int mongo_run_command(mongo *conn , char const *db , bson const *command , bson *out ) ; #line 725 int mongo_simple_int_command(mongo *conn , char const *db , char const *cmdstr , int arg , bson *realout ) ; #line 740 int mongo_simple_str_command(mongo *conn , char const *db , char const *cmdstr , char const *arg , bson *realout ) ; #line 751 int mongo_cmd_drop_db(mongo *conn , char const *db ) ; #line 763 int mongo_cmd_drop_collection(mongo *conn , char const *db , char const *collection , bson *out ) ; #line 776 int mongo_cmd_add_user(mongo *conn , char const *db , char const *user , char const *pass ) ; #line 789 int mongo_cmd_authenticate(mongo *conn , char const *db , char const *user , char const *pass ) ; #line 801 bson_bool_t mongo_cmd_ismaster(mongo *conn , bson *realout ) ; #line 813 int mongo_cmd_get_last_error(mongo *conn , char const *db , bson *out ) ; #line 825 int mongo_cmd_get_prev_error(mongo *conn , char const *db , bson *out ) ; #line 833 void mongo_cmd_reset_error(mongo *conn , char const *db ) ; #line 840 mongo *mongo_create(void) ; #line 841 void mongo_dispose(mongo *conn ) ; #line 842 int mongo_get_err(mongo *conn ) ; #line 843 int mongo_is_connected(mongo *conn ) ; #line 844 int mongo_get_op_timeout(mongo *conn ) ; #line 845 char const *mongo_get_primary(mongo *conn ) ; #line 846 int mongo_get_socket(mongo *conn ) ; #line 847 int mongo_get_host_count(mongo *conn ) ; #line 848 char const *mongo_get_host(mongo *conn , int i ) ; #line 849 mongo_cursor *mongo_cursor_create(void) ; #line 850 void mongo_cursor_dispose(mongo_cursor *cursor ) ; #line 851 int mongo_get_server_err(mongo *conn ) ; #line 852 char const *mongo_get_server_err_string(mongo *conn ) ; #line 862 void __mongo_set_error(mongo *conn , mongo_error_t err , char const *str , int errcode ) ; #line 869 void mongo_clear_errors(mongo *conn ) ; #line 27 "src/env.h" int mongo_env_set_socket_op_timeout(mongo *conn , int millis ) ; #line 28 int mongo_env_read_socket(mongo *conn , void *buf , int len ) ; #line 29 int mongo_env_write_socket(mongo *conn , void const *buf , int len ) ; #line 30 int mongo_env_socket_connect(mongo *conn , char const *host , int port ) ; #line 33 int mongo_env_sock_init(void) ; #line 36 int mongo_env_close_socket(int socket___0 ) ; #line 27 "src/mongo.c" mongo *mongo_create(void) { void *tmp ; { #line 28 tmp = bson_malloc((int )sizeof(mongo )); #line 28 return ((mongo *)tmp); } } #line 32 "src/mongo.c" void mongo_dispose(mongo *conn ) { { #line 33 free((void *)conn); #line 34 return; } } #line 36 "src/mongo.c" int mongo_get_err(mongo *conn ) { { #line 37 return ((int )conn->err); } } #line 41 "src/mongo.c" int mongo_is_connected(mongo *conn ) { { #line 42 return (conn->connected != 0); } } #line 46 "src/mongo.c" int mongo_get_op_timeout(mongo *conn ) { { #line 47 return (conn->op_timeout_ms); } } #line 52 "src/mongo.c" static char _hp[267U] ; #line 51 "src/mongo.c" static char const *_get_host_port(mongo_host_port *hp ) { { #line 53 (*bson_sprintf)(_hp, "%s:%d", hp->host, hp->port); #line 54 return ((char const *)(_hp)); } } #line 58 "src/mongo.c" char const *mongo_get_primary(mongo *conn ) { mongo *conn_ ; char const *tmp ; { #line 59 conn_ = conn; #line 60 if (! conn_->connected) { #line 61 return ((char const *)((void *)0)); } else #line 60 if ((int )(conn_->primary)->host[0] == 0) { #line 61 return ((char const *)((void *)0)); } #line 62 tmp = _get_host_port(conn_->primary); #line 62 return (tmp); } } #line 66 "src/mongo.c" int mongo_get_socket(mongo *conn ) { mongo *conn_ ; { #line 67 conn_ = conn; #line 68 return (conn_->sock); } } #line 72 "src/mongo.c" int mongo_get_host_count(mongo *conn ) { mongo_replica_set *r ; mongo_host_port *hp ; int count ; { #line 73 r = conn->replica_set; #line 75 count = 0; #line 76 if (! r) { #line 76 return (0); } #line 77 hp = r->hosts; #line 77 while (hp) { #line 78 count ++; #line 77 hp = hp->next; } #line 79 return (count); } } #line 83 "src/mongo.c" char const *mongo_get_host(mongo *conn , int i ) { mongo_replica_set *r ; mongo_host_port *hp ; int count ; char const *tmp ; { #line 84 r = conn->replica_set; #line 86 count = 0; #line 87 if (! r) { #line 87 return ((char const *)0); } #line 88 hp = r->hosts; #line 88 while (hp) { #line 89 if (count == i) { #line 90 tmp = _get_host_port(hp); #line 90 return (tmp); } #line 91 count ++; #line 88 hp = hp->next; } #line 93 return ((char const *)0); } } #line 97 "src/mongo.c" mongo_cursor *mongo_cursor_create(void) { void *tmp ; { #line 98 tmp = bson_malloc((int )sizeof(mongo_cursor )); #line 98 return ((mongo_cursor *)tmp); } } #line 102 "src/mongo.c" void mongo_cursor_dispose(mongo_cursor *cursor ) { { #line 103 free((void *)cursor); #line 104 return; } } #line 107 "src/mongo.c" int mongo_get_server_err(mongo *conn ) { { #line 108 return (conn->lasterrcode); } } #line 112 "src/mongo.c" char const *mongo_get_server_err_string(mongo *conn ) { { #line 113 return ((char const *)(conn->lasterrstr)); } } #line 116 "src/mongo.c" void __mongo_set_error(mongo *conn , mongo_error_t err , char const *str , int errcode ) { int errstr_size ; int str_size ; size_t tmp ; { #line 120 conn->err = err; #line 121 conn->errcode = errcode; #line 123 if (str) { #line 124 tmp = strlen(str); #line 124 str_size = (int )(tmp + 1U); #line 125 if (str_size > 128) { #line 125 errstr_size = 128; } else { #line 125 errstr_size = str_size; } #line 126 memcpy((void *)(conn->errstr), (void const *)str, (size_t )errstr_size); #line 127 conn->errstr[errstr_size - 1] = (char )'\000'; } #line 129 return; } } #line 131 "src/mongo.c" void mongo_clear_errors(mongo *conn ) { { #line 132 conn->err = (mongo_error_t )0; #line 133 conn->errcode = 0; #line 134 conn->lasterrcode = 0; #line 135 memset((void *)(conn->errstr), 0, (size_t )128); #line 136 memset((void *)(conn->lasterrstr), 0, (size_t )128); #line 137 return; } } #line 140 "src/mongo.c" static char *mongo_ns_to_cmd_db(char const *ns ) { char *current ; char *cmd_db_name ; int len ; void *tmp ; { #line 141 current = (char *)((void *)0); #line 142 cmd_db_name = (char *)((void *)0); #line 143 len = 0; #line 145 current = (char *)ns; #line 145 while ((int )*current != 46) { #line 146 len ++; #line 145 current ++; } #line 149 tmp = bson_malloc(len + 6); #line 149 cmd_db_name = (char *)tmp; #line 150 strncpy(cmd_db_name, ns, (size_t )len); #line 151 strncpy(cmd_db_name + len, ".$cmd", (size_t )6); #line 153 return (cmd_db_name); } } #line 156 "src/mongo.c" int mongo_validate_ns(mongo *conn , char const *ns ) { char *last ; char *current ; char const *db_name ; char *collection_name ; char errmsg[64] ; int ns_len ; { #line 157 last = (char *)((void *)0); #line 158 current = (char *)((void *)0); #line 159 db_name = ns; #line 160 collection_name = (char *)((void *)0); #line 162 ns_len = 0; #line 165 if ((int const )*ns == 46) { #line 166 __mongo_set_error(conn, (mongo_error_t )12, "ns cannot start with a \'.\'.", 0); #line 167 return (-1); } #line 171 current = (char *)ns; #line 171 while ((int )*current != 0) { #line 172 if ((int )*current == 46) { #line 173 current ++; #line 174 break; } #line 171 current ++; } #line 180 if ((int )*current == 0) { #line 181 __mongo_set_error(conn, (mongo_error_t )12, "ns cannot start with a \'.\'.", 0); #line 182 return (-1); } else #line 180 if ((int )*current == 46) { #line 181 __mongo_set_error(conn, (mongo_error_t )12, "ns cannot start with a \'.\'.", 0); #line 182 return (-1); } #line 186 if ((int )*(current + 1) == 0) { #line 187 __mongo_set_error(conn, (mongo_error_t )12, "Collection name missing.", 0); #line 188 return (-1); } #line 193 collection_name = current; #line 196 if ((unsigned int )(collection_name - 1) == (unsigned int )db_name) { #line 197 __mongo_set_error(conn, (mongo_error_t )12, "Database name missing.", 0); #line 198 return (-1); } #line 202 current = (char *)db_name; #line 202 while ((int )*current != 46) { #line 203 switch ((int )*current) { case 92: case 47: case 36: case 32: #line 208 __mongo_set_error(conn, (mongo_error_t )12, "Database name may not contain \' \', \'$\', \'/\', or \'\\\'", 0); #line 210 return (-1); default: #line 212 break; } #line 215 ns_len ++; #line 202 current ++; } #line 219 ns_len ++; #line 222 current = collection_name; #line 222 while ((int )*current != 0) { #line 225 if (last) { #line 225 if ((int )*last == 46) { #line 225 if ((int )*current == 46) { #line 226 __mongo_set_error(conn, (mongo_error_t )12, "Collection may not contain two consecutive \'.\'", 0); #line 228 return (-1); } } } #line 232 if ((int )*current == 36) { #line 233 __mongo_set_error(conn, (mongo_error_t )12, "Collection may not contain \'$\'", 0); #line 235 return (-1); } #line 238 last = current; #line 239 ns_len ++; #line 222 current ++; } #line 242 if (ns_len > 128) { #line 243 (*bson_sprintf)(errmsg, "Namespace too long; has %d but must <= 128.", ns_len); #line 245 __mongo_set_error(conn, (mongo_error_t )12, (char const *)(errmsg), 0); #line 246 return (-1); } #line 250 if ((int )*(current - 1) == 46) { #line 251 __mongo_set_error(conn, (mongo_error_t )12, "Collection may not end with \'.\'", 0); #line 253 return (-1); } #line 256 return (0); } } #line 259 "src/mongo.c" static void mongo_set_last_error(mongo *conn , bson_iterator *it , bson *obj ) { int result_len ; int tmp ; char const *result_string ; char const *tmp___0 ; int len ; int tmp___1 ; bson_type tmp___2 ; { #line 260 tmp = bson_iterator_string_len((bson_iterator const *)it); #line 260 result_len = tmp; #line 261 tmp___0 = bson_iterator_string((bson_iterator const *)it); #line 261 result_string = tmp___0; #line 262 if (result_len < 128) { #line 262 tmp___1 = result_len; } else { #line 262 tmp___1 = 128; } #line 262 len = tmp___1; #line 263 memcpy((void *)(conn->lasterrstr), (void const *)result_string, (size_t )len); #line 265 tmp___2 = bson_find(it, (bson const *)obj, "code"); #line 265 if ((unsigned int )tmp___2 != 10U) { #line 266 conn->lasterrcode = bson_iterator_int((bson_iterator const *)it); } #line 267 return; } } #line 269 "src/mongo.c" static int const ZERO = (int const )0; #line 270 "src/mongo.c" static int const ONE = (int const )1; #line 271 "src/mongo.c" static mongo_message *mongo_message_create(int len , int id , int responseTo , int op ) { mongo_message *mm ; void *tmp ; { #line 272 tmp = bson_malloc(len); #line 272 mm = (mongo_message *)tmp; #line 274 if (! id) { #line 275 id = rand(); } #line 278 mm->head.len = len; #line 279 mm->head.id = id; #line 280 mm->head.responseTo = responseTo; #line 281 mm->head.op = op; #line 283 return (mm); } } #line 287 "src/mongo.c" static int mongo_message_send(mongo *conn , mongo_message *mm ) { mongo_header head ; int res ; { #line 290 memcpy((void *)(& head.len), (void const *)(& mm->head.len), (size_t )4); #line 291 memcpy((void *)(& head.id), (void const *)(& mm->head.id), (size_t )4); #line 292 memcpy((void *)(& head.responseTo), (void const *)(& mm->head.responseTo), (size_t )4); #line 293 memcpy((void *)(& head.op), (void const *)(& mm->head.op), (size_t )4); #line 295 res = mongo_env_write_socket(conn, (void const *)(& head), (int )sizeof(head)); #line 296 if (res != 0) { #line 297 bson_free((void *)mm); #line 298 return (res); } #line 301 res = mongo_env_write_socket(conn, (void const *)(& mm->data), (int )((unsigned int )mm->head.len - sizeof(head))); #line 302 if (res != 0) { #line 303 bson_free((void *)mm); #line 304 return (res); } #line 307 bson_free((void *)mm); #line 308 return (0); } } #line 311 "src/mongo.c" static int mongo_read_response(mongo *conn , mongo_reply **reply ) { mongo_header head ; mongo_reply_fields fields ; mongo_reply *out ; unsigned int len ; int res ; void *tmp ; { #line 318 mongo_env_read_socket(conn, (void *)(& head), (int )sizeof(head)); #line 319 mongo_env_read_socket(conn, (void *)(& fields), (int )sizeof(fields)); #line 321 memcpy((void *)(& len), (void const *)(& head.len), (size_t )4); #line 323 if (len < sizeof(head) + sizeof(fields)) { #line 324 return (9); } else #line 323 if (len > 67108864U) { #line 324 return (9); } #line 326 tmp = bson_malloc((int )len); #line 326 out = (mongo_reply *)tmp; #line 328 out->head.len = (int )len; #line 329 memcpy((void *)(& out->head.id), (void const *)(& head.id), (size_t )4); #line 330 memcpy((void *)(& out->head.responseTo), (void const *)(& head.responseTo), (size_t )4); #line 331 memcpy((void *)(& out->head.op), (void const *)(& head.op), (size_t )4); #line 333 memcpy((void *)(& out->fields.flag), (void const *)(& fields.flag), (size_t )4); #line 334 memcpy((void *)(& out->fields.cursorID), (void const *)(& fields.cursorID), (size_t )8); #line 335 memcpy((void *)(& out->fields.start), (void const *)(& fields.start), (size_t )4); #line 336 memcpy((void *)(& out->fields.num), (void const *)(& fields.num), (size_t )4); #line 338 res = mongo_env_read_socket(conn, (void *)(& out->objs), (int )((len - sizeof(head)) - sizeof(fields))); #line 339 if (res != 0) { #line 340 bson_free((void *)out); #line 341 return (res); } #line 344 *reply = out; #line 346 return (0); } } #line 350 "src/mongo.c" static char *mongo_data_append(char *start , void const *data___0 , int len ) { { #line 351 memcpy((void *)start, data___0, (size_t )len); #line 352 return (start + len); } } #line 355 "src/mongo.c" static char *mongo_data_append32(char *start , void const *data___0 ) { { #line 356 memcpy((void *)start, data___0, (size_t )4); #line 357 return (start + 4); } } #line 360 "src/mongo.c" static char *mongo_data_append64(char *start , void const *data___0 ) { { #line 361 memcpy((void *)start, data___0, (size_t )8); #line 362 return (start + 8); } } #line 367 "src/mongo.c" static int mongo_check_is_master(mongo *conn ) { bson out ; bson_iterator it ; bson_bool_t ismaster ; int max_bson_size ; bson_type tmp ; bson_type tmp___0 ; int tmp___1 ; { #line 370 ismaster = 0; #line 371 max_bson_size = 4194304; #line 373 out.data = (char *)((void *)0); #line 375 tmp___1 = mongo_simple_int_command(conn, "admin", "ismaster", 1, & out); #line 375 if (tmp___1 == 0) { #line 376 tmp = bson_find(& it, (bson const *)(& out), "ismaster"); #line 376 if (tmp) { #line 377 ismaster = bson_iterator_bool((bson_iterator const *)(& it)); } #line 378 tmp___0 = bson_find(& it, (bson const *)(& out), "maxBsonObjectSize"); #line 378 if (tmp___0) { #line 379 max_bson_size = bson_iterator_int((bson_iterator const *)(& it)); } #line 381 conn->max_bson_size = max_bson_size; } else { #line 383 return (-1); } #line 386 bson_destroy(& out); #line 388 if (ismaster) { #line 389 return (0); } else { #line 391 conn->err = (mongo_error_t )4; #line 392 return (-1); } } } #line 396 "src/mongo.c" void mongo_init_sockets(void) { { #line 397 mongo_env_sock_init(); #line 398 return; } } #line 401 "src/mongo.c" static char WC1_data[32] = #line 401 { (char)23, (char)0, (char)0, (char)0, (char)16, (char)103, (char)101, (char)116, (char)108, (char)97, (char)115, (char)116, (char)101, (char)114, (char)114, (char)111, (char)114, (char)0, (char)1, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0, (char)0}; #line 402 "src/mongo.c" static bson WC1_cmd = #line 402 {WC1_data, WC1_data, 128, 1, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, (char *)""}; #line 405 "src/mongo.c" static mongo_write_concern WC1 = {1, 0, 0, 0, (char const *)0, & WC1_cmd}; #line 407 "src/mongo.c" void mongo_init(mongo *conn ) { { #line 408 memset((void *)conn, 0, sizeof(mongo )); #line 409 conn->max_bson_size = 4194304; #line 410 mongo_set_write_concern(conn, & WC1); #line 411 return; } } #line 413 "src/mongo.c" int mongo_client(mongo *conn , char const *host , int port ) { void *tmp ; size_t tmp___0 ; int tmp___1 ; int tmp___2 ; { #line 414 mongo_init(conn); #line 416 tmp = bson_malloc((int )sizeof(mongo_host_port )); #line 416 conn->primary = (mongo_host_port *)tmp; #line 417 tmp___0 = strlen(host); #line 417 strncpy((conn->primary)->host, host, tmp___0 + 1U); #line 418 (conn->primary)->port = port; #line 419 (conn->primary)->next = (struct mongo_host_port *)((void *)0); #line 421 tmp___1 = mongo_env_socket_connect(conn, host, port); #line 421 if (tmp___1 != 0) { #line 422 return (-1); } #line 424 tmp___2 = mongo_check_is_master(conn); #line 424 if (tmp___2 != 0) { #line 425 return (-1); } else { #line 427 return (0); } } } #line 430 "src/mongo.c" int mongo_connect(mongo *conn , char const *host , int port ) { int ret ; { #line 432 fprintf(& (*_imp___iob)[2], "WARNING: mongo_connect() is deprecated, please use mongo_client()\n"); #line 433 ret = mongo_client(conn, host, port); #line 434 mongo_set_write_concern(conn, (mongo_write_concern *)0); #line 435 return (ret); } } #line 438 "src/mongo.c" void mongo_replica_set_init(mongo *conn , char const *name ) { void *tmp ; size_t tmp___0 ; void *tmp___1 ; size_t tmp___2 ; void *tmp___3 ; { #line 439 mongo_init(conn); #line 441 tmp = bson_malloc((int )sizeof(mongo_replica_set )); #line 441 conn->replica_set = (mongo_replica_set *)tmp; #line 442 (conn->replica_set)->primary_connected = 0; #line 443 (conn->replica_set)->seeds = (mongo_host_port *)((void *)0); #line 444 (conn->replica_set)->hosts = (mongo_host_port *)((void *)0); #line 445 tmp___0 = strlen(name); #line 445 tmp___1 = bson_malloc((int )(tmp___0 + 1U)); #line 445 (conn->replica_set)->name = (char *)tmp___1; #line 446 tmp___2 = strlen(name); #line 446 memcpy((void *)(conn->replica_set)->name, (void const *)name, tmp___2 + 1U); #line 448 tmp___3 = bson_malloc((int )sizeof(mongo_host_port )); #line 448 conn->primary = (mongo_host_port *)tmp___3; #line 449 (conn->primary)->host[0] = (char )'\000'; #line 450 (conn->primary)->next = (struct mongo_host_port *)((void *)0); #line 451 return; } } #line 453 "src/mongo.c" void mongo_replset_init(mongo *conn , char const *name ) { { #line 454 fprintf(& (*_imp___iob)[2], "WARNING: mongo_replset_init() is deprecated, please use mongo_replica_set_init()\n"); #line 455 mongo_replica_set_init(conn, name); #line 456 return; } } #line 458 "src/mongo.c" static void mongo_replica_set_add_node(mongo_host_port **list , char const *host , int port ) { mongo_host_port *host_port ; void *tmp ; size_t tmp___0 ; mongo_host_port *p ; { #line 459 tmp = bson_malloc((int )sizeof(mongo_host_port )); #line 459 host_port = (mongo_host_port *)tmp; #line 460 host_port->port = port; #line 461 host_port->next = (struct mongo_host_port *)((void *)0); #line 462 tmp___0 = strlen(host); #line 462 strncpy(host_port->host, host, tmp___0 + 1U); #line 464 if ((unsigned int )*list == (unsigned int )((void *)0)) { #line 465 *list = host_port; } else { #line 467 p = *list; #line 468 while ((unsigned int )p->next != (unsigned int )((void *)0)) { #line 469 p = p->next; } #line 470 p->next = host_port; } #line 472 return; } } #line 474 "src/mongo.c" static void mongo_replica_set_free_list(mongo_host_port **list ) { mongo_host_port *node ; mongo_host_port *prev ; { #line 475 node = *list; #line 478 while ((unsigned int )node != (unsigned int )((void *)0)) { #line 479 prev = node; #line 480 node = node->next; #line 481 bson_free((void *)prev); } #line 484 *list = (mongo_host_port *)((void *)0); #line 485 return; } } #line 487 "src/mongo.c" void mongo_replica_set_add_seed(mongo *conn , char const *host , int port ) { { #line 488 mongo_replica_set_add_node(& (conn->replica_set)->seeds, host, port); #line 489 return; } } #line 491 "src/mongo.c" void mongo_replset_add_seed(mongo *conn , char const *host , int port ) { { #line 492 fprintf(& (*_imp___iob)[2], "WARNING: mongo_replset_add_seed() is deprecated, please use mongo_replica_set_add_seed()\n"); #line 493 mongo_replica_set_add_node(& (conn->replica_set)->seeds, host, port); #line 494 return; } } #line 496 "src/mongo.c" void mongo_parse_host(char const *host_string , mongo_host_port *host_port ) { int len ; int idx ; int split ; { #line 498 idx = 0; #line 498 split = idx; #line 498 len = split; #line 501 while (! ((int const )*(host_string + len) == 0)) { #line 504 if ((int const )*(host_string + len) == 58) { #line 505 split = len; } #line 507 len ++; } #line 512 if (split) { #line 512 idx = split; } else { #line 512 idx = len; } #line 513 memcpy((void *)(host_port->host), (void const *)host_string, (size_t )idx); #line 514 memcpy((void *)(host_port->host + idx), (void const *)"\000", (size_t )1); #line 515 if (split) { #line 516 host_port->port = atoi((host_string + idx) + 1); } else { #line 518 host_port->port = 27017; } #line 519 return; } } #line 521 "src/mongo.c" static void mongo_replica_set_check_seed(mongo *conn ) { bson out ; bson hosts ; char const *data___0 ; bson_iterator it ; bson_iterator it_sub ; char const *host_string ; mongo_host_port *host_port ; void *tmp ; bson_type tmp___0 ; bson_type tmp___1 ; int tmp___2 ; { #line 528 host_port = (mongo_host_port *)((void *)0); #line 530 out.data = (char *)((void *)0); #line 532 hosts.data = (char *)((void *)0); #line 534 tmp___2 = mongo_simple_int_command(conn, "admin", "ismaster", 1, & out); #line 534 if (tmp___2 == 0) { #line 536 tmp___1 = bson_find(& it, (bson const *)(& out), "hosts"); #line 536 if (tmp___1) { #line 537 data___0 = bson_iterator_value((bson_iterator const *)(& it)); #line 538 bson_iterator_from_buffer(& it_sub, data___0); #line 542 while (1) { #line 542 tmp___0 = bson_iterator_next(& it_sub); #line 542 if (! tmp___0) { #line 542 break; } #line 543 host_string = bson_iterator_string((bson_iterator const *)(& it_sub)); #line 545 tmp = bson_malloc((int )sizeof(mongo_host_port )); #line 545 host_port = (mongo_host_port *)tmp; #line 547 if (host_port) { #line 548 mongo_parse_host(host_string, host_port); #line 549 mongo_replica_set_add_node(& (conn->replica_set)->hosts, (char const *)(host_port->host), host_port->port); #line 552 bson_free((void *)host_port); #line 553 host_port = (mongo_host_port *)((void *)0); } } } } #line 559 bson_destroy(& out); #line 560 bson_destroy(& hosts); #line 561 mongo_env_close_socket(conn->sock); #line 562 conn->sock = 0; #line 563 conn->connected = 0; #line 565 return; } } #line 570 "src/mongo.c" static int mongo_replica_set_check_host(mongo *conn ) { bson out ; bson_iterator it ; bson_bool_t ismaster ; char const *set_name ; int max_bson_size ; bson_type tmp ; bson_type tmp___0 ; int tmp___1 ; bson_type tmp___2 ; int tmp___3 ; { #line 574 ismaster = 0; #line 576 max_bson_size = 4194304; #line 578 out.data = (char *)((void *)0); #line 580 tmp___3 = mongo_simple_int_command(conn, "admin", "ismaster", 1, & out); #line 580 if (tmp___3 == 0) { #line 581 tmp = bson_find(& it, (bson const *)(& out), "ismaster"); #line 581 if (tmp) { #line 582 ismaster = bson_iterator_bool((bson_iterator const *)(& it)); } #line 584 tmp___0 = bson_find(& it, (bson const *)(& out), "maxBsonObjectSize"); #line 584 if (tmp___0) { #line 585 max_bson_size = bson_iterator_int((bson_iterator const *)(& it)); } #line 586 conn->max_bson_size = max_bson_size; #line 588 tmp___2 = bson_find(& it, (bson const *)(& out), "setName"); #line 588 if (tmp___2) { #line 589 set_name = bson_iterator_string((bson_iterator const *)(& it)); #line 590 tmp___1 = strcmp(set_name, (char const *)(conn->replica_set)->name); #line 590 if (tmp___1 != 0) { #line 591 bson_destroy(& out); #line 592 conn->err = (mongo_error_t )5; #line 593 return (-1); } } } #line 598 bson_destroy(& out); #line 600 if (ismaster) { #line 601 (conn->replica_set)->primary_connected = 1; } else { #line 603 mongo_env_close_socket(conn->sock); } #line 606 return (0); } } #line 609 "src/mongo.c" int mongo_replica_set_client(mongo *conn ) { int res ; mongo_host_port *node ; size_t tmp ; int tmp___0 ; { #line 611 res = 0; #line 614 conn->sock = 0; #line 615 conn->connected = 0; #line 620 node = (conn->replica_set)->seeds; #line 621 while ((unsigned int )node != (unsigned int )((void *)0)) { #line 622 res = mongo_env_socket_connect(conn, (char const *)(& node->host), node->port); #line 623 if (res == 0) { #line 624 mongo_replica_set_check_seed(conn); #line 625 if ((conn->replica_set)->hosts) { #line 626 break; } } #line 628 node = node->next; } #line 632 if (! (conn->replica_set)->hosts) { #line 633 conn->err = (mongo_error_t )6; #line 634 return (-1); } else { #line 636 node = (conn->replica_set)->hosts; #line 638 while ((unsigned int )node != (unsigned int )((void *)0)) { #line 639 res = mongo_env_socket_connect(conn, (char const *)(& node->host), node->port); #line 641 if (res == 0) { #line 642 tmp___0 = mongo_replica_set_check_host(conn); #line 642 if (tmp___0 != 0) { #line 643 return (-1); } else #line 646 if ((conn->replica_set)->primary_connected) { #line 647 tmp = strlen((char const *)(node->host)); #line 647 strncpy((conn->primary)->host, (char const *)(node->host), tmp + 1U); #line 648 (conn->primary)->port = node->port; #line 649 return (0); } else { #line 654 mongo_env_close_socket(conn->sock); #line 655 conn->sock = 0; #line 656 conn->connected = 0; } } #line 660 node = node->next; } } #line 665 conn->err = (mongo_error_t )6; #line 666 return (-1); } } #line 669 "src/mongo.c" int mongo_replset_connect(mongo *conn ) { int ret ; { #line 671 fprintf(& (*_imp___iob)[2], "WARNING: mongo_replset_connect() is deprecated, please use mongo_replica_set_client()\n"); #line 672 ret = mongo_replica_set_client(conn); #line 673 mongo_set_write_concern(conn, (mongo_write_concern *)0); #line 674 return (ret); } } #line 677 "src/mongo.c" int mongo_set_op_timeout(mongo *conn , int millis ) { { #line 678 conn->op_timeout_ms = millis; #line 679 if (conn->sock) { #line 679 if (conn->connected) { #line 680 mongo_env_set_socket_op_timeout(conn, millis); } } #line 682 return (0); } } #line 685 "src/mongo.c" int mongo_reconnect(mongo *conn ) { int res ; int tmp ; { #line 687 mongo_disconnect(conn); #line 689 if (conn->replica_set) { #line 690 (conn->replica_set)->primary_connected = 0; #line 691 mongo_replica_set_free_list(& (conn->replica_set)->hosts); #line 692 (conn->replica_set)->hosts = (mongo_host_port *)((void *)0); #line 693 res = mongo_replica_set_client(conn); #line 694 return (res); } else { #line 696 tmp = mongo_env_socket_connect(conn, (char const *)((conn->primary)->host), (conn->primary)->port); #line 696 return (tmp); } } } #line 699 "src/mongo.c" int mongo_check_connection(mongo *conn ) { int tmp ; { #line 700 if (! conn->connected) { #line 701 return (-1); } #line 703 tmp = mongo_simple_int_command(conn, "admin", "ping", 1, (bson *)((void *)0)); #line 703 if (tmp == 0) { #line 704 return (0); } else { #line 706 return (-1); } } } #line 709 "src/mongo.c" void mongo_disconnect(mongo *conn ) { { #line 710 if (! conn->connected) { #line 711 return; } #line 713 if (conn->replica_set) { #line 714 (conn->replica_set)->primary_connected = 0; #line 715 mongo_replica_set_free_list(& (conn->replica_set)->hosts); #line 716 (conn->replica_set)->hosts = (mongo_host_port *)((void *)0); } #line 719 mongo_env_close_socket(conn->sock); #line 721 conn->sock = 0; #line 722 conn->connected = 0; #line 723 return; } } #line 725 "src/mongo.c" void mongo_destroy(mongo *conn ) { { #line 726 mongo_disconnect(conn); #line 728 if (conn->replica_set) { #line 729 mongo_replica_set_free_list(& (conn->replica_set)->seeds); #line 730 mongo_replica_set_free_list(& (conn->replica_set)->hosts); #line 731 bson_free((void *)(conn->replica_set)->name); #line 732 bson_free((void *)conn->replica_set); #line 733 conn->replica_set = (mongo_replica_set *)((void *)0); } #line 736 bson_free((void *)conn->primary); #line 738 mongo_clear_errors(conn); #line 739 return; } } #line 742 "src/mongo.c" static int mongo_bson_valid(mongo *conn , bson const *bson___0 , int write ) { int size ; { #line 745 if (! bson___0->finished) { #line 746 conn->err = (mongo_error_t )14; #line 747 return (-1); } #line 750 size = bson_size(bson___0); #line 751 if (size > conn->max_bson_size) { #line 752 conn->err = (mongo_error_t )15; #line 753 return (-1); } #line 756 if (bson___0->err & 2) { #line 757 conn->err = (mongo_error_t )13; #line 758 return (-1); } #line 761 if (write) { #line 762 if (bson___0->err & 4) { #line 765 conn->err = (mongo_error_t )13; #line 766 return (-1); } else #line 762 if (bson___0->err & 8) { #line 765 conn->err = (mongo_error_t )13; #line 766 return (-1); } } #line 771 conn->err = (mongo_error_t )0; #line 773 return (0); } } #line 777 "src/mongo.c" static int mongo_cursor_bson_valid(mongo_cursor *cursor , bson const *bson___0 ) { { #line 778 if (! bson___0->finished) { #line 779 cursor->err = (mongo_cursor_error_t )4; #line 780 (cursor->conn)->err = (mongo_error_t )14; #line 781 return (-1); } #line 784 if (bson___0->err & 2) { #line 785 cursor->err = (mongo_cursor_error_t )4; #line 786 (cursor->conn)->err = (mongo_error_t )13; #line 787 return (-1); } #line 790 return (0); } } #line 793 "src/mongo.c" static int mongo_check_last_error(mongo *conn , char const *ns , mongo_write_concern *write_concern ) { int ret ; bson response ; bson fields ; bson_iterator it ; int res ; char *cmd_ns ; char *tmp ; bson *tmp___0 ; bson_type tmp___1 ; bson_type tmp___2 ; { #line 795 ret = 0; #line 796 response.data = (char *)((void *)0); #line 796 response.cur = (char *)0; #line 796 response.dataSize = 0; #line 796 response.finished = 0; #line 796 response.stack[0] = 0; #line 796 response.stack[1] = 0; #line 796 response.stack[2] = 0; #line 796 response.stack[3] = 0; #line 796 response.stack[4] = 0; #line 796 response.stack[5] = 0; #line 796 response.stack[6] = 0; #line 796 response.stack[7] = 0; #line 796 response.stack[8] = 0; #line 796 response.stack[9] = 0; #line 796 response.stack[10] = 0; #line 796 response.stack[11] = 0; #line 796 response.stack[12] = 0; #line 796 response.stack[13] = 0; #line 796 response.stack[14] = 0; #line 796 response.stack[15] = 0; #line 796 response.stack[16] = 0; #line 796 response.stack[17] = 0; #line 796 response.stack[18] = 0; #line 796 response.stack[19] = 0; #line 796 response.stack[20] = 0; #line 796 response.stack[21] = 0; #line 796 response.stack[22] = 0; #line 796 response.stack[23] = 0; #line 796 response.stack[24] = 0; #line 796 response.stack[25] = 0; #line 796 response.stack[26] = 0; #line 796 response.stack[27] = 0; #line 796 response.stack[28] = 0; #line 796 response.stack[29] = 0; #line 796 response.stack[30] = 0; #line 796 response.stack[31] = 0; #line 796 response.stackPos = 0; #line 796 response.err = 0; #line 796 response.errstr = (char *)0; #line 799 res = 0; #line 800 tmp = mongo_ns_to_cmd_db(ns); #line 800 cmd_ns = tmp; #line 802 tmp___0 = bson_empty(& fields); #line 802 res = mongo_find_one(conn, (char const *)cmd_ns, (bson const *)write_concern->cmd, (bson const *)tmp___0, & response); #line 803 bson_free((void *)cmd_ns); #line 805 if (res != 0) { #line 806 ret = -1; } else { #line 808 tmp___1 = bson_find(& it, (bson const *)(& response), "$err"); #line 808 if ((unsigned int )tmp___1 == 2U) { #line 811 __mongo_set_error(conn, (mongo_error_t )11, "See conn->lasterrstr for details.", 0); #line 813 mongo_set_last_error(conn, & it, & response); #line 814 ret = -1; } else { #line 808 tmp___2 = bson_find(& it, (bson const *)(& response), "err"); #line 808 if ((unsigned int )tmp___2 == 2U) { #line 811 __mongo_set_error(conn, (mongo_error_t )11, "See conn->lasterrstr for details.", 0); #line 813 mongo_set_last_error(conn, & it, & response); #line 814 ret = -1; } } #line 816 bson_destroy(& response); } #line 818 return (ret); } } #line 821 "src/mongo.c" static int mongo_choose_write_concern(mongo *conn , mongo_write_concern *custom_write_concern , mongo_write_concern **write_concern ) { { #line 825 if (custom_write_concern) { #line 826 *write_concern = custom_write_concern; } else #line 828 if (conn->write_concern) { #line 829 *write_concern = conn->write_concern; } #line 831 if (*write_concern) { #line 831 if ((*write_concern)->w < 1) { #line 832 *write_concern = (mongo_write_concern *)0; } } #line 834 if (*write_concern) { #line 834 if (! (*write_concern)->cmd) { #line 835 __mongo_set_error(conn, (mongo_error_t )16, "Must call mongo_write_concern_finish() before using *write_concern.", 0); #line 837 return (-1); } else { #line 840 return (0); } } else { #line 840 return (0); } } } #line 848 "src/mongo.c" int mongo_insert(mongo *conn , char const *ns , bson const *bson___0 , mongo_write_concern *custom_write_concern ) { char *data___0 ; mongo_message *mm ; mongo_write_concern *write_concern ; int tmp ; int tmp___0 ; int tmp___1 ; size_t tmp___2 ; int tmp___3 ; size_t tmp___4 ; int tmp___5 ; int tmp___6 ; int tmp___7 ; int tmp___8 ; { #line 853 write_concern = (mongo_write_concern *)((void *)0); #line 855 tmp = mongo_validate_ns(conn, ns); #line 855 if (tmp != 0) { #line 856 return (-1); } #line 858 tmp___0 = mongo_bson_valid(conn, bson___0, 1); #line 858 if (tmp___0 != 0) { #line 859 return (-1); } #line 862 tmp___1 = mongo_choose_write_concern(conn, custom_write_concern, & write_concern); #line 862 if (tmp___1 == -1) { #line 864 return (-1); } #line 867 tmp___2 = strlen(ns); #line 867 tmp___3 = bson_size(bson___0); #line 867 mm = mongo_message_create((int )(((20U + tmp___2) + 1U) + (size_t )tmp___3), 0, 0, 2002); #line 873 data___0 = & mm->data; #line 874 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 875 tmp___4 = strlen(ns); #line 875 data___0 = mongo_data_append(data___0, (void const *)ns, (int )(tmp___4 + 1U)); #line 876 tmp___5 = bson_size(bson___0); #line 876 mongo_data_append(data___0, (void const *)bson___0->data, tmp___5); #line 881 if (write_concern) { #line 882 tmp___6 = mongo_message_send(conn, mm); #line 882 if (tmp___6 == -1) { #line 883 return (-1); } #line 886 tmp___7 = mongo_check_last_error(conn, ns, write_concern); #line 886 return (tmp___7); } else { #line 889 tmp___8 = mongo_message_send(conn, mm); #line 889 return (tmp___8); } } } #line 893 "src/mongo.c" int mongo_insert_batch(mongo *conn , char const *ns , bson const **bsons , int count , mongo_write_concern *custom_write_concern , int flags ) { mongo_message *mm ; mongo_write_concern *write_concern ; int i ; char *data___0 ; int overhead ; size_t tmp ; int size ; int tmp___0 ; int tmp___1 ; int tmp___2 ; int tmp___3 ; size_t tmp___4 ; int tmp___5 ; int tmp___6 ; int tmp___7 ; int tmp___8 ; { #line 898 write_concern = (mongo_write_concern *)((void *)0); #line 901 tmp = strlen(ns); #line 901 overhead = (int )((20U + tmp) + 1U); #line 902 size = overhead; #line 904 tmp___0 = mongo_validate_ns(conn, ns); #line 904 if (tmp___0 != 0) { #line 905 return (-1); } #line 907 i = 0; #line 907 while (i < count) { #line 908 tmp___1 = bson_size(*(bsons + i)); #line 908 size += tmp___1; #line 909 tmp___2 = mongo_bson_valid(conn, *(bsons + i), 1); #line 909 if (tmp___2 != 0) { #line 910 return (-1); } #line 907 i ++; } #line 913 if (size - overhead > conn->max_bson_size) { #line 914 conn->err = (mongo_error_t )15; #line 915 return (-1); } #line 918 tmp___3 = mongo_choose_write_concern(conn, custom_write_concern, & write_concern); #line 918 if (tmp___3 == -1) { #line 920 return (-1); } #line 923 mm = mongo_message_create(size, 0, 0, 2002); #line 925 data___0 = & mm->data; #line 926 if (flags & 1) { #line 927 data___0 = mongo_data_append32(data___0, (void const *)(& ONE)); } else { #line 929 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); } #line 930 tmp___4 = strlen(ns); #line 930 data___0 = mongo_data_append(data___0, (void const *)ns, (int )(tmp___4 + 1U)); #line 932 i = 0; #line 932 while (i < count) { #line 933 tmp___5 = bson_size(*(bsons + i)); #line 933 data___0 = mongo_data_append(data___0, (void const *)(*(bsons + i))->data, tmp___5); #line 932 i ++; } #line 938 if (write_concern) { #line 939 tmp___6 = mongo_message_send(conn, mm); #line 939 if (tmp___6 == -1) { #line 940 return (-1); } #line 943 tmp___7 = mongo_check_last_error(conn, ns, write_concern); #line 943 return (tmp___7); } else { #line 946 tmp___8 = mongo_message_send(conn, mm); #line 946 return (tmp___8); } } } #line 950 "src/mongo.c" int mongo_update(mongo *conn , char const *ns , bson const *cond , bson const *op , int flags , mongo_write_concern *custom_write_concern ) { char *data___0 ; mongo_message *mm ; mongo_write_concern *write_concern ; int tmp ; int tmp___0 ; size_t tmp___1 ; int tmp___2 ; int tmp___3 ; size_t tmp___4 ; int tmp___5 ; int tmp___6 ; int tmp___7 ; int tmp___8 ; int tmp___9 ; { #line 955 write_concern = (mongo_write_concern *)((void *)0); #line 960 tmp = mongo_bson_valid(conn, (bson const *)((bson *)op), 0); #line 960 if (tmp != 0) { #line 961 return (-1); } #line 964 tmp___0 = mongo_choose_write_concern(conn, custom_write_concern, & write_concern); #line 964 if (tmp___0 == -1) { #line 966 return (-1); } #line 969 tmp___1 = strlen(ns); #line 969 tmp___2 = bson_size(cond); #line 969 tmp___3 = bson_size(op); #line 969 mm = mongo_message_create((int )(((((20U + tmp___1) + 1U) + 4U) + (size_t )tmp___2) + (size_t )tmp___3), 0, 0, 2001); #line 977 data___0 = & mm->data; #line 978 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 979 tmp___4 = strlen(ns); #line 979 data___0 = mongo_data_append(data___0, (void const *)ns, (int )(tmp___4 + 1U)); #line 980 data___0 = mongo_data_append32(data___0, (void const *)(& flags)); #line 981 tmp___5 = bson_size(cond); #line 981 data___0 = mongo_data_append(data___0, (void const *)cond->data, tmp___5); #line 982 tmp___6 = bson_size(op); #line 982 mongo_data_append(data___0, (void const *)op->data, tmp___6); #line 986 if (write_concern) { #line 987 tmp___7 = mongo_message_send(conn, mm); #line 987 if (tmp___7 == -1) { #line 988 return (-1); } #line 991 tmp___8 = mongo_check_last_error(conn, ns, write_concern); #line 991 return (tmp___8); } else { #line 994 tmp___9 = mongo_message_send(conn, mm); #line 994 return (tmp___9); } } } #line 998 "src/mongo.c" int mongo_remove(mongo *conn , char const *ns , bson const *cond , mongo_write_concern *custom_write_concern ) { char *data___0 ; mongo_message *mm ; mongo_write_concern *write_concern ; int tmp ; int tmp___0 ; size_t tmp___1 ; int tmp___2 ; size_t tmp___3 ; int tmp___4 ; int tmp___5 ; int tmp___6 ; int tmp___7 ; { #line 1003 write_concern = (mongo_write_concern *)((void *)0); #line 1008 tmp = mongo_bson_valid(conn, (bson const *)((bson *)cond), 0); #line 1008 if (tmp != 0) { #line 1009 return (-1); } #line 1012 tmp___0 = mongo_choose_write_concern(conn, custom_write_concern, & write_concern); #line 1012 if (tmp___0 == -1) { #line 1014 return (-1); } #line 1017 tmp___1 = strlen(ns); #line 1017 tmp___2 = bson_size(cond); #line 1017 mm = mongo_message_create((int )((((20U + tmp___1) + 1U) + 4U) + (size_t )tmp___2), 0, 0, 2006); #line 1024 data___0 = & mm->data; #line 1025 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 1026 tmp___3 = strlen(ns); #line 1026 data___0 = mongo_data_append(data___0, (void const *)ns, (int )(tmp___3 + 1U)); #line 1027 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 1028 tmp___4 = bson_size(cond); #line 1028 mongo_data_append(data___0, (void const *)cond->data, tmp___4); #line 1032 if (write_concern) { #line 1033 tmp___5 = mongo_message_send(conn, mm); #line 1033 if (tmp___5 == -1) { #line 1034 return (-1); } #line 1037 tmp___6 = mongo_check_last_error(conn, ns, write_concern); #line 1037 return (tmp___6); } else { #line 1040 tmp___7 = mongo_message_send(conn, mm); #line 1040 return (tmp___7); } } } #line 1049 "src/mongo.c" void mongo_write_concern_init(mongo_write_concern *write_concern ) { { #line 1050 memset((void *)write_concern, 0, sizeof(mongo_write_concern )); #line 1051 return; } } #line 1053 "src/mongo.c" int mongo_write_concern_finish(mongo_write_concern *write_concern ) { bson *command ; void *tmp ; { #line 1057 if (write_concern->cmd) { #line 1058 bson_destroy(write_concern->cmd); #line 1059 command = write_concern->cmd; } else { #line 1062 tmp = bson_malloc((int )sizeof(bson )); #line 1062 command = (bson *)tmp; } #line 1064 if (! command) { #line 1065 return (-1); } #line 1068 bson_init(command); #line 1070 bson_append_int(command, "getlasterror", (int const )1); #line 1072 if (write_concern->mode) { #line 1073 bson_append_string(command, "w", write_concern->mode); } else #line 1076 if (write_concern->w) { #line 1076 if (write_concern->w > 1) { #line 1077 bson_append_int(command, "w", (int const )write_concern->w); } } #line 1080 if (write_concern->wtimeout) { #line 1081 bson_append_int(command, "wtimeout", (int const )write_concern->wtimeout); } #line 1084 if (write_concern->j) { #line 1085 bson_append_int(command, "j", (int const )write_concern->j); } #line 1088 if (write_concern->fsync) { #line 1089 bson_append_int(command, "fsync", (int const )write_concern->fsync); } #line 1092 bson_finish(command); #line 1096 write_concern->cmd = command; #line 1098 return (0); } } #line 1101 "src/mongo.c" void mongo_write_concern_destroy(mongo_write_concern *write_concern ) { { #line 1102 if (! write_concern) { #line 1103 return; } #line 1105 if (write_concern->cmd) { #line 1106 bson_destroy(write_concern->cmd); } #line 1108 bson_free((void *)write_concern->cmd); #line 1109 return; } } #line 1111 "src/mongo.c" void mongo_set_write_concern(mongo *conn , mongo_write_concern *write_concern ) { { #line 1114 conn->write_concern = write_concern; #line 1115 return; } } #line 1123 "src/mongo.c" static int mongo_cursor_op_query(mongo_cursor *cursor ) { int res ; bson empty ; char *data___0 ; mongo_message *mm ; bson temp ; bson_iterator it ; bson *tmp ; int tmp___0 ; bson *tmp___1 ; int tmp___2 ; size_t tmp___3 ; int tmp___4 ; int tmp___5 ; size_t tmp___6 ; int tmp___7 ; int tmp___8 ; bson_type tmp___9 ; { #line 1132 mongo_clear_errors(cursor->conn); #line 1135 if (! cursor->query) { #line 1136 tmp = bson_empty(& empty); #line 1136 cursor->query = (bson const *)tmp; } else { #line 1137 tmp___0 = mongo_cursor_bson_valid(cursor, cursor->query); #line 1137 if (tmp___0 != 0) { #line 1138 return (-1); } } #line 1140 if (! cursor->fields) { #line 1141 tmp___1 = bson_empty(& empty); #line 1141 cursor->fields = (bson const *)tmp___1; } else { #line 1142 tmp___2 = mongo_cursor_bson_valid(cursor, cursor->fields); #line 1142 if (tmp___2 != 0) { #line 1143 return (-1); } } #line 1145 tmp___3 = strlen(cursor->ns); #line 1145 tmp___4 = bson_size(cursor->query); #line 1145 tmp___5 = bson_size(cursor->fields); #line 1145 mm = mongo_message_create((int )((((((20U + tmp___3) + 1U) + 4U) + 4U) + (size_t )tmp___4) + (size_t )tmp___5), 0, 0, 2004); #line 1153 data___0 = & mm->data; #line 1154 data___0 = mongo_data_append32(data___0, (void const *)(& cursor->options)); #line 1155 tmp___6 = strlen(cursor->ns); #line 1155 data___0 = mongo_data_append(data___0, (void const *)cursor->ns, (int )(tmp___6 + 1U)); #line 1156 data___0 = mongo_data_append32(data___0, (void const *)(& cursor->skip)); #line 1157 data___0 = mongo_data_append32(data___0, (void const *)(& cursor->limit)); #line 1158 tmp___7 = bson_size(cursor->query); #line 1158 data___0 = mongo_data_append(data___0, (void const *)(cursor->query)->data, tmp___7); #line 1159 if (cursor->fields) { #line 1160 tmp___8 = bson_size(cursor->fields); #line 1160 data___0 = mongo_data_append(data___0, (void const *)(cursor->fields)->data, tmp___8); } #line 1162 bson_fatal_msg((unsigned int )data___0 == (unsigned int )((char *)mm + mm->head.len), "query building fail!"); #line 1164 res = mongo_message_send(cursor->conn, mm); #line 1165 if (res != 0) { #line 1166 return (-1); } #line 1169 res = mongo_read_response(cursor->conn, & cursor->reply); #line 1170 if (res != 0) { #line 1171 return (-1); } #line 1174 if ((cursor->reply)->fields.num == 1) { #line 1175 bson_init_data(& temp, & (cursor->reply)->objs); #line 1176 tmp___9 = bson_find(& it, (bson const *)(& temp), "$err"); #line 1176 if (tmp___9) { #line 1177 mongo_set_last_error(cursor->conn, & it, & temp); #line 1178 cursor->err = (mongo_cursor_error_t )3; #line 1179 return (-1); } } #line 1183 cursor->seen += (cursor->reply)->fields.num; #line 1184 cursor->flags |= 2; #line 1185 return (0); } } #line 1188 "src/mongo.c" static int mongo_cursor_get_more(mongo_cursor *cursor ) { int res ; char *data___0 ; int sl ; size_t tmp ; int limit ; mongo_message *mm ; { #line 1191 if (cursor->limit > 0) { #line 1191 if (cursor->seen >= cursor->limit) { #line 1192 cursor->err = (mongo_cursor_error_t )0; #line 1193 return (-1); } else { #line 1191 goto _L; } } else _L: /* CIL Label */ #line 1194 if (! cursor->reply) { #line 1195 cursor->err = (mongo_cursor_error_t )1; #line 1196 return (-1); } else #line 1197 if (! (cursor->reply)->fields.cursorID) { #line 1198 cursor->err = (mongo_cursor_error_t )0; #line 1199 return (-1); } else { #line 1202 tmp = strlen(cursor->ns); #line 1202 sl = (int )(tmp + 1U); #line 1203 limit = 0; #line 1206 if (cursor->limit > 0) { #line 1207 limit = cursor->limit - cursor->seen; } #line 1209 mm = mongo_message_create(((20 + sl) + 4) + 8, 0, 0, 2005); #line 1215 data___0 = & mm->data; #line 1216 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 1217 data___0 = mongo_data_append(data___0, (void const *)cursor->ns, sl); #line 1218 data___0 = mongo_data_append32(data___0, (void const *)(& limit)); #line 1219 mongo_data_append64(data___0, (void const *)(& (cursor->reply)->fields.cursorID)); #line 1221 bson_free((void *)cursor->reply); #line 1222 res = mongo_message_send(cursor->conn, mm); #line 1223 if (res != 0) { #line 1224 mongo_cursor_destroy(cursor); #line 1225 return (-1); } #line 1228 res = mongo_read_response(cursor->conn, & cursor->reply); #line 1229 if (res != 0) { #line 1230 mongo_cursor_destroy(cursor); #line 1231 return (-1); } #line 1233 cursor->current.data = (char *)((void *)0); #line 1234 cursor->seen += (cursor->reply)->fields.num; #line 1236 return (0); } } } #line 1240 "src/mongo.c" mongo_cursor *mongo_find(mongo *conn , char const *ns , bson const *query , bson const *fields , int limit , int skip , int options ) { mongo_cursor *cursor ; void *tmp ; int tmp___0 ; { #line 1243 tmp = bson_malloc((int )sizeof(mongo_cursor )); #line 1243 cursor = (mongo_cursor *)tmp; #line 1244 mongo_cursor_init(cursor, conn, ns); #line 1245 cursor->flags |= 1; #line 1247 mongo_cursor_set_query(cursor, query); #line 1248 mongo_cursor_set_fields(cursor, fields); #line 1249 mongo_cursor_set_limit(cursor, limit); #line 1250 mongo_cursor_set_skip(cursor, skip); #line 1251 mongo_cursor_set_options(cursor, options); #line 1253 tmp___0 = mongo_cursor_op_query(cursor); #line 1253 if (tmp___0 == 0) { #line 1254 return (cursor); } else { #line 1256 mongo_cursor_destroy(cursor); #line 1257 return ((mongo_cursor *)((void *)0)); } } } #line 1261 "src/mongo.c" int mongo_find_one(mongo *conn , char const *ns , bson const *query , bson const *fields , bson *out ) { mongo_cursor cursor[1] ; int tmp ; int tmp___0 ; int tmp___1 ; { #line 1265 mongo_cursor_init(cursor, conn, ns); #line 1266 mongo_cursor_set_query(cursor, query); #line 1267 mongo_cursor_set_fields(cursor, fields); #line 1268 mongo_cursor_set_limit(cursor, 1); #line 1270 tmp___1 = mongo_cursor_next(cursor); #line 1270 if (tmp___1 == 0) { #line 1271 if (out) { #line 1272 tmp = bson_size((bson const *)(& cursor[0].current)); #line 1272 bson_init_size(out, tmp); #line 1273 tmp___0 = bson_size((bson const *)(& cursor[0].current)); #line 1273 memcpy((void *)out->data, (void const *)cursor[0].current.data, (size_t )tmp___0); #line 1275 out->finished = 1; } #line 1277 mongo_cursor_destroy(cursor); #line 1278 return (0); } else { #line 1280 mongo_cursor_destroy(cursor); #line 1281 return (-1); } } } #line 1285 "src/mongo.c" void mongo_cursor_init(mongo_cursor *cursor , mongo *conn , char const *ns ) { size_t tmp ; void *tmp___0 ; size_t tmp___1 ; { #line 1286 memset((void *)cursor, 0, sizeof(mongo_cursor )); #line 1287 cursor->conn = conn; #line 1288 tmp = strlen(ns); #line 1288 tmp___0 = bson_malloc((int )(tmp + 1U)); #line 1288 cursor->ns = (char const *)tmp___0; #line 1289 tmp___1 = strlen(ns); #line 1289 strncpy((char *)cursor->ns, ns, tmp___1 + 1U); #line 1290 cursor->current.data = (char *)((void *)0); #line 1291 return; } } #line 1293 "src/mongo.c" void mongo_cursor_set_query(mongo_cursor *cursor , bson const *query ) { { #line 1294 cursor->query = query; #line 1295 return; } } #line 1297 "src/mongo.c" void mongo_cursor_set_fields(mongo_cursor *cursor , bson const *fields ) { { #line 1298 cursor->fields = fields; #line 1299 return; } } #line 1301 "src/mongo.c" void mongo_cursor_set_skip(mongo_cursor *cursor , int skip ) { { #line 1302 cursor->skip = skip; #line 1303 return; } } #line 1305 "src/mongo.c" void mongo_cursor_set_limit(mongo_cursor *cursor , int limit ) { { #line 1306 cursor->limit = limit; #line 1307 return; } } #line 1309 "src/mongo.c" void mongo_cursor_set_options(mongo_cursor *cursor , int options ) { { #line 1310 cursor->options = options; #line 1311 return; } } #line 1313 "src/mongo.c" char const *mongo_cursor_data(mongo_cursor *cursor ) { { #line 1314 return ((char const *)cursor->current.data); } } #line 1317 "src/mongo.c" bson const *mongo_cursor_bson(mongo_cursor *cursor ) { { #line 1318 return ((bson const *)(& cursor->current)); } } #line 1321 "src/mongo.c" int mongo_cursor_next(mongo_cursor *cursor ) { char *next_object ; char *message_end ; int tmp ; int tmp___0 ; int tmp___1 ; int tmp___2 ; { #line 1325 if (! (cursor->flags & 2)) { #line 1326 tmp = mongo_cursor_op_query(cursor); #line 1326 if (tmp != 0) { #line 1327 return (-1); } } #line 1329 if (! cursor->reply) { #line 1330 return (-1); } #line 1333 if ((cursor->reply)->fields.num == 0) { #line 1336 if ((cursor->reply)->fields.cursorID) { #line 1337 tmp___0 = mongo_cursor_get_more(cursor); #line 1337 if (tmp___0 != 0) { #line 1339 return (-1); } else #line 1337 if ((cursor->reply)->fields.num == 0) { #line 1339 return (-1); } } else { #line 1344 return (-1); } } #line 1348 if ((unsigned int )cursor->current.data == (unsigned int )((void *)0)) { #line 1349 bson_init_finished_data(& cursor->current, & (cursor->reply)->objs); #line 1350 return (0); } #line 1353 tmp___1 = bson_size((bson const *)(& cursor->current)); #line 1353 next_object = cursor->current.data + tmp___1; #line 1354 message_end = (char *)cursor->reply + (cursor->reply)->head.len; #line 1356 if ((unsigned int )next_object >= (unsigned int )message_end) { #line 1357 tmp___2 = mongo_cursor_get_more(cursor); #line 1357 if (tmp___2 != 0) { #line 1358 return (-1); } #line 1360 if ((cursor->reply)->fields.num == 0) { #line 1362 if ((cursor->reply)->fields.cursorID) { #line 1363 cursor->err = (mongo_cursor_error_t )2; #line 1364 return (-1); } else { #line 1367 return (-1); } } #line 1370 bson_init_finished_data(& cursor->current, & (cursor->reply)->objs); } else { #line 1372 bson_init_finished_data(& cursor->current, next_object); } #line 1375 return (0); } } #line 1378 "src/mongo.c" int mongo_cursor_destroy(mongo_cursor *cursor ) { int result ; mongo *conn ; mongo_message *mm ; mongo_message *tmp ; char *data___0 ; { #line 1379 result = 0; #line 1381 if (! cursor) { #line 1381 return (result); } #line 1384 if (cursor->reply) { #line 1384 if ((cursor->reply)->fields.cursorID) { #line 1385 conn = cursor->conn; #line 1386 tmp = mongo_message_create(32, 0, 0, 2007); #line 1386 mm = tmp; #line 1391 data___0 = & mm->data; #line 1392 data___0 = mongo_data_append32(data___0, (void const *)(& ZERO)); #line 1393 data___0 = mongo_data_append32(data___0, (void const *)(& ONE)); #line 1394 mongo_data_append64(data___0, (void const *)(& (cursor->reply)->fields.cursorID)); #line 1396 result = mongo_message_send(conn, mm); } } #line 1399 bson_free((void *)cursor->reply); #line 1400 bson_free((void *)cursor->ns); #line 1402 if (cursor->flags & 1) { #line 1403 bson_free((void *)cursor); } #line 1405 return (result); } } #line 1410 "src/mongo.c" int mongo_create_index(mongo *conn , char const *ns , bson const *key , int options , bson *out ) { bson b ; bson_iterator it ; char name[255] ; unsigned int tmp ; int i ; char idxns[1024] ; char const *tmp___0 ; char const *tmp___1 ; size_t tmp___2 ; bson_type tmp___3 ; char *tmp___4 ; char *tmp___5 ; int tmp___6 ; { #line 1413 name[0] = (char )'_'; #line 1413 tmp = 1U; #line 1413 while (! (tmp >= 255U)) { #line 1413 name[tmp] = (char)0; #line 1413 tmp ++; } #line 1414 i = 1; #line 1417 bson_iterator_init(& it, key); #line 1418 while (1) { #line 1418 if (i < 255) { #line 1418 tmp___3 = bson_iterator_next(& it); #line 1418 if (! tmp___3) { #line 1418 break; } } else { #line 1418 break; } #line 1419 tmp___0 = bson_iterator_key((bson_iterator const *)(& it)); #line 1419 strncpy(name + i, tmp___0, (size_t )(255 - i)); #line 1420 tmp___1 = bson_iterator_key((bson_iterator const *)(& it)); #line 1420 tmp___2 = strlen(tmp___1); #line 1420 i = (int )((size_t )i + tmp___2); } #line 1422 name[254] = (char )'\000'; #line 1424 bson_init(& b); #line 1425 bson_append_bson(& b, "key", key); #line 1426 bson_append_string(& b, "ns", ns); #line 1427 bson_append_string(& b, "name", (char const *)(name)); #line 1428 if (options & 1) { #line 1429 bson_append_bool(& b, "unique", (bson_bool_t const )1); } #line 1430 if (options & 4) { #line 1431 bson_append_bool(& b, "dropDups", (bson_bool_t const )1); } #line 1432 if (options & 8) { #line 1433 bson_append_bool(& b, "background", (bson_bool_t const )1); } #line 1434 if (options & 16) { #line 1435 bson_append_bool(& b, "sparse", (bson_bool_t const )1); } #line 1436 bson_finish(& b); #line 1438 strncpy(idxns, ns, (size_t )1008); #line 1439 tmp___4 = strchr((char const *)(idxns), '.'); #line 1439 strcpy(tmp___4, ".system.indexes"); #line 1440 mongo_insert(conn, (char const *)(idxns), (bson const *)(& b), (mongo_write_concern *)((void *)0)); #line 1441 bson_destroy(& b); #line 1443 tmp___5 = strchr((char const *)(idxns), '.'); #line 1443 *tmp___5 = (char )'\000'; #line 1444 tmp___6 = mongo_cmd_get_last_error(conn, (char const *)(idxns), out); #line 1444 return (tmp___6); } } #line 1447 "src/mongo.c" bson_bool_t mongo_create_simple_index(mongo *conn , char const *ns , char const *field , int options , bson *out ) { bson b ; bson_bool_t success ; { #line 1451 bson_init(& b); #line 1452 bson_append_int(& b, field, (int const )1); #line 1453 bson_finish(& b); #line 1455 success = mongo_create_index(conn, ns, (bson const *)(& b), options, out); #line 1456 bson_destroy(& b); #line 1457 return (success); } } #line 1460 "src/mongo.c" int mongo_create_capped_collection(mongo *conn , char const *db , char const *collection , int size , int max , bson *out ) { bson b ; int result ; { #line 1466 bson_init(& b); #line 1467 bson_append_string(& b, "create", collection); #line 1468 bson_append_bool(& b, "capped", (bson_bool_t const )1); #line 1469 bson_append_int(& b, "size", (int const )size); #line 1470 if (max > 0) { #line 1471 bson_append_int(& b, "max", (int const )size); } #line 1472 bson_finish(& b); #line 1474 result = mongo_run_command(conn, db, (bson const *)(& b), out); #line 1476 bson_destroy(& b); #line 1478 return (result); } } #line 1481 "src/mongo.c" double mongo_count(mongo *conn , char const *db , char const *ns , bson const *query ) { bson cmd ; bson out ; double count ; int tmp ; bson_iterator it ; bson_type tmp___0 ; int tmp___1 ; { #line 1483 out.data = (char *)((void *)0); #line 1483 out.cur = (char *)0; #line 1483 out.dataSize = 0; #line 1483 out.finished = 0; #line 1483 out.stack[0] = 0; #line 1483 out.stack[1] = 0; #line 1483 out.stack[2] = 0; #line 1483 out.stack[3] = 0; #line 1483 out.stack[4] = 0; #line 1483 out.stack[5] = 0; #line 1483 out.stack[6] = 0; #line 1483 out.stack[7] = 0; #line 1483 out.stack[8] = 0; #line 1483 out.stack[9] = 0; #line 1483 out.stack[10] = 0; #line 1483 out.stack[11] = 0; #line 1483 out.stack[12] = 0; #line 1483 out.stack[13] = 0; #line 1483 out.stack[14] = 0; #line 1483 out.stack[15] = 0; #line 1483 out.stack[16] = 0; #line 1483 out.stack[17] = 0; #line 1483 out.stack[18] = 0; #line 1483 out.stack[19] = 0; #line 1483 out.stack[20] = 0; #line 1483 out.stack[21] = 0; #line 1483 out.stack[22] = 0; #line 1483 out.stack[23] = 0; #line 1483 out.stack[24] = 0; #line 1483 out.stack[25] = 0; #line 1483 out.stack[26] = 0; #line 1483 out.stack[27] = 0; #line 1483 out.stack[28] = 0; #line 1483 out.stack[29] = 0; #line 1483 out.stack[30] = 0; #line 1483 out.stack[31] = 0; #line 1483 out.stackPos = 0; #line 1483 out.err = 0; #line 1483 out.errstr = (char *)0; #line 1484 count = (double )-1; #line 1486 bson_init(& cmd); #line 1487 bson_append_string(& cmd, "count", ns); #line 1488 if (query) { #line 1488 tmp = bson_size(query); #line 1488 if (tmp > 5) { #line 1489 bson_append_bson(& cmd, "query", query); } } #line 1490 bson_finish(& cmd); #line 1492 tmp___1 = mongo_run_command(conn, db, (bson const *)(& cmd), & out); #line 1492 if (tmp___1 == 0) { #line 1494 tmp___0 = bson_find(& it, (bson const *)(& out), "n"); #line 1494 if (tmp___0) { #line 1495 count = bson_iterator_double((bson_iterator const *)(& it)); } #line 1496 bson_destroy(& cmd); #line 1497 bson_destroy(& out); #line 1498 return (count); } else { #line 1500 bson_destroy(& out); #line 1501 bson_destroy(& cmd); #line 1502 return ((double )-1); } } } #line 1506 "src/mongo.c" int mongo_run_command(mongo *conn , char const *db , bson const *command , bson *out ) { int ret ; bson response ; bson fields ; int sl ; size_t tmp ; char *ns ; void *tmp___0 ; int res ; int success ; bson *tmp___1 ; bson_iterator it ; bson_type tmp___2 ; { #line 1508 ret = 0; #line 1509 response.data = (char *)((void *)0); #line 1509 response.cur = (char *)0; #line 1509 response.dataSize = 0; #line 1509 response.finished = 0; #line 1509 response.stack[0] = 0; #line 1509 response.stack[1] = 0; #line 1509 response.stack[2] = 0; #line 1509 response.stack[3] = 0; #line 1509 response.stack[4] = 0; #line 1509 response.stack[5] = 0; #line 1509 response.stack[6] = 0; #line 1509 response.stack[7] = 0; #line 1509 response.stack[8] = 0; #line 1509 response.stack[9] = 0; #line 1509 response.stack[10] = 0; #line 1509 response.stack[11] = 0; #line 1509 response.stack[12] = 0; #line 1509 response.stack[13] = 0; #line 1509 response.stack[14] = 0; #line 1509 response.stack[15] = 0; #line 1509 response.stack[16] = 0; #line 1509 response.stack[17] = 0; #line 1509 response.stack[18] = 0; #line 1509 response.stack[19] = 0; #line 1509 response.stack[20] = 0; #line 1509 response.stack[21] = 0; #line 1509 response.stack[22] = 0; #line 1509 response.stack[23] = 0; #line 1509 response.stack[24] = 0; #line 1509 response.stack[25] = 0; #line 1509 response.stack[26] = 0; #line 1509 response.stack[27] = 0; #line 1509 response.stack[28] = 0; #line 1509 response.stack[29] = 0; #line 1509 response.stack[30] = 0; #line 1509 response.stack[31] = 0; #line 1509 response.stackPos = 0; #line 1509 response.err = 0; #line 1509 response.errstr = (char *)0; #line 1511 tmp = strlen(db); #line 1511 sl = (int )tmp; #line 1512 tmp___0 = bson_malloc((sl + 5) + 1); #line 1512 ns = (char *)tmp___0; #line 1513 success = 0; #line 1515 strcpy(ns, db); #line 1516 strcpy(ns + sl, ".$cmd"); #line 1518 tmp___1 = bson_empty(& fields); #line 1518 res = mongo_find_one(conn, (char const *)ns, command, (bson const *)tmp___1, & response); #line 1519 bson_free((void *)ns); #line 1521 if (res != 0) { #line 1522 ret = -1; } else { #line 1525 tmp___2 = bson_find(& it, (bson const *)(& response), "ok"); #line 1525 if (tmp___2) { #line 1526 success = bson_iterator_bool((bson_iterator const *)(& it)); } #line 1528 if (! success) { #line 1529 conn->err = (mongo_error_t )10; #line 1530 bson_destroy(& response); #line 1531 ret = -1; } else #line 1533 if (out) { #line 1534 *out = response; } else { #line 1536 bson_destroy(& response); } } #line 1539 return (ret); } } #line 1542 "src/mongo.c" int mongo_simple_int_command(mongo *conn , char const *db , char const *cmdstr , int arg , bson *realout ) { bson out ; bson cmd ; int result ; { #line 1545 out.data = (char *)((void *)0); #line 1545 out.cur = (char *)0; #line 1545 out.dataSize = 0; #line 1545 out.finished = 0; #line 1545 out.stack[0] = 0; #line 1545 out.stack[1] = 0; #line 1545 out.stack[2] = 0; #line 1545 out.stack[3] = 0; #line 1545 out.stack[4] = 0; #line 1545 out.stack[5] = 0; #line 1545 out.stack[6] = 0; #line 1545 out.stack[7] = 0; #line 1545 out.stack[8] = 0; #line 1545 out.stack[9] = 0; #line 1545 out.stack[10] = 0; #line 1545 out.stack[11] = 0; #line 1545 out.stack[12] = 0; #line 1545 out.stack[13] = 0; #line 1545 out.stack[14] = 0; #line 1545 out.stack[15] = 0; #line 1545 out.stack[16] = 0; #line 1545 out.stack[17] = 0; #line 1545 out.stack[18] = 0; #line 1545 out.stack[19] = 0; #line 1545 out.stack[20] = 0; #line 1545 out.stack[21] = 0; #line 1545 out.stack[22] = 0; #line 1545 out.stack[23] = 0; #line 1545 out.stack[24] = 0; #line 1545 out.stack[25] = 0; #line 1545 out.stack[26] = 0; #line 1545 out.stack[27] = 0; #line 1545 out.stack[28] = 0; #line 1545 out.stack[29] = 0; #line 1545 out.stack[30] = 0; #line 1545 out.stack[31] = 0; #line 1545 out.stackPos = 0; #line 1545 out.err = 0; #line 1545 out.errstr = (char *)0; #line 1549 bson_init(& cmd); #line 1550 bson_append_int(& cmd, cmdstr, (int const )arg); #line 1551 bson_finish(& cmd); #line 1553 result = mongo_run_command(conn, db, (bson const *)(& cmd), & out); #line 1555 bson_destroy(& cmd); #line 1557 if (realout) { #line 1558 *realout = out; } else { #line 1560 bson_destroy(& out); } #line 1562 return (result); } } #line 1565 "src/mongo.c" int mongo_simple_str_command(mongo *conn , char const *db , char const *cmdstr , char const *arg , bson *realout ) { bson out ; int result ; bson cmd ; { #line 1568 out.data = (char *)((void *)0); #line 1568 out.cur = (char *)0; #line 1568 out.dataSize = 0; #line 1568 out.finished = 0; #line 1568 out.stack[0] = 0; #line 1568 out.stack[1] = 0; #line 1568 out.stack[2] = 0; #line 1568 out.stack[3] = 0; #line 1568 out.stack[4] = 0; #line 1568 out.stack[5] = 0; #line 1568 out.stack[6] = 0; #line 1568 out.stack[7] = 0; #line 1568 out.stack[8] = 0; #line 1568 out.stack[9] = 0; #line 1568 out.stack[10] = 0; #line 1568 out.stack[11] = 0; #line 1568 out.stack[12] = 0; #line 1568 out.stack[13] = 0; #line 1568 out.stack[14] = 0; #line 1568 out.stack[15] = 0; #line 1568 out.stack[16] = 0; #line 1568 out.stack[17] = 0; #line 1568 out.stack[18] = 0; #line 1568 out.stack[19] = 0; #line 1568 out.stack[20] = 0; #line 1568 out.stack[21] = 0; #line 1568 out.stack[22] = 0; #line 1568 out.stack[23] = 0; #line 1568 out.stack[24] = 0; #line 1568 out.stack[25] = 0; #line 1568 out.stack[26] = 0; #line 1568 out.stack[27] = 0; #line 1568 out.stack[28] = 0; #line 1568 out.stack[29] = 0; #line 1568 out.stack[30] = 0; #line 1568 out.stack[31] = 0; #line 1568 out.stackPos = 0; #line 1568 out.err = 0; #line 1568 out.errstr = (char *)0; #line 1572 bson_init(& cmd); #line 1573 bson_append_string(& cmd, cmdstr, arg); #line 1574 bson_finish(& cmd); #line 1576 result = mongo_run_command(conn, db, (bson const *)(& cmd), & out); #line 1578 bson_destroy(& cmd); #line 1580 if (realout) { #line 1581 *realout = out; } else { #line 1583 bson_destroy(& out); } #line 1585 return (result); } } #line 1588 "src/mongo.c" int mongo_cmd_drop_db(mongo *conn , char const *db ) { int tmp ; { #line 1589 tmp = mongo_simple_int_command(conn, db, "dropDatabase", 1, (bson *)((void *)0)); #line 1589 return (tmp); } } #line 1592 "src/mongo.c" int mongo_cmd_drop_collection(mongo *conn , char const *db , char const *collection , bson *out ) { int tmp ; { #line 1593 tmp = mongo_simple_str_command(conn, db, "drop", collection, out); #line 1593 return (tmp); } } #line 1596 "src/mongo.c" void mongo_cmd_reset_error(mongo *conn , char const *db ) { { #line 1597 mongo_simple_int_command(conn, db, "reseterror", 1, (bson *)((void *)0)); #line 1598 return; } } #line 1600 "src/mongo.c" static int mongo_cmd_get_error_helper(mongo *conn , char const *db , bson *realout , char const *cmdtype ) { bson out ; bson_bool_t haserror ; bson_iterator it ; bson_type tmp ; int tmp___0 ; { #line 1603 out.data = (char *)((void *)0); #line 1603 out.cur = (char *)0; #line 1603 out.dataSize = 0; #line 1603 out.finished = 0; #line 1603 out.stack[0] = 0; #line 1603 out.stack[1] = 0; #line 1603 out.stack[2] = 0; #line 1603 out.stack[3] = 0; #line 1603 out.stack[4] = 0; #line 1603 out.stack[5] = 0; #line 1603 out.stack[6] = 0; #line 1603 out.stack[7] = 0; #line 1603 out.stack[8] = 0; #line 1603 out.stack[9] = 0; #line 1603 out.stack[10] = 0; #line 1603 out.stack[11] = 0; #line 1603 out.stack[12] = 0; #line 1603 out.stack[13] = 0; #line 1603 out.stack[14] = 0; #line 1603 out.stack[15] = 0; #line 1603 out.stack[16] = 0; #line 1603 out.stack[17] = 0; #line 1603 out.stack[18] = 0; #line 1603 out.stack[19] = 0; #line 1603 out.stack[20] = 0; #line 1603 out.stack[21] = 0; #line 1603 out.stack[22] = 0; #line 1603 out.stack[23] = 0; #line 1603 out.stack[24] = 0; #line 1603 out.stack[25] = 0; #line 1603 out.stack[26] = 0; #line 1603 out.stack[27] = 0; #line 1603 out.stack[28] = 0; #line 1603 out.stack[29] = 0; #line 1603 out.stack[30] = 0; #line 1603 out.stack[31] = 0; #line 1603 out.stackPos = 0; #line 1603 out.err = 0; #line 1603 out.errstr = (char *)0; #line 1604 haserror = 0; #line 1607 mongo_clear_errors(conn); #line 1610 tmp___0 = mongo_simple_int_command(conn, db, cmdtype, 1, & out); #line 1610 if (tmp___0 == 0) { #line 1612 tmp = bson_find(& it, (bson const *)(& out), "err"); #line 1612 haserror = (unsigned int )tmp != 10U; #line 1613 if (haserror) { #line 1613 mongo_set_last_error(conn, & it, & out); } } #line 1616 if (realout) { #line 1617 *realout = out; } else { #line 1619 bson_destroy(& out); } #line 1621 if (haserror) { #line 1622 return (-1); } else { #line 1624 return (0); } } } #line 1627 "src/mongo.c" int mongo_cmd_get_prev_error(mongo *conn , char const *db , bson *out ) { int tmp ; { #line 1628 tmp = mongo_cmd_get_error_helper(conn, db, out, "getpreverror"); #line 1628 return (tmp); } } #line 1631 "src/mongo.c" int mongo_cmd_get_last_error(mongo *conn , char const *db , bson *out ) { int tmp ; { #line 1632 tmp = mongo_cmd_get_error_helper(conn, db, out, "getlasterror"); #line 1632 return (tmp); } } #line 1635 "src/mongo.c" bson_bool_t mongo_cmd_ismaster(mongo *conn , bson *realout ) { bson out ; bson_bool_t ismaster ; bson_iterator it ; int tmp ; { #line 1636 out.data = (char *)((void *)0); #line 1636 out.cur = (char *)0; #line 1636 out.dataSize = 0; #line 1636 out.finished = 0; #line 1636 out.stack[0] = 0; #line 1636 out.stack[1] = 0; #line 1636 out.stack[2] = 0; #line 1636 out.stack[3] = 0; #line 1636 out.stack[4] = 0; #line 1636 out.stack[5] = 0; #line 1636 out.stack[6] = 0; #line 1636 out.stack[7] = 0; #line 1636 out.stack[8] = 0; #line 1636 out.stack[9] = 0; #line 1636 out.stack[10] = 0; #line 1636 out.stack[11] = 0; #line 1636 out.stack[12] = 0; #line 1636 out.stack[13] = 0; #line 1636 out.stack[14] = 0; #line 1636 out.stack[15] = 0; #line 1636 out.stack[16] = 0; #line 1636 out.stack[17] = 0; #line 1636 out.stack[18] = 0; #line 1636 out.stack[19] = 0; #line 1636 out.stack[20] = 0; #line 1636 out.stack[21] = 0; #line 1636 out.stack[22] = 0; #line 1636 out.stack[23] = 0; #line 1636 out.stack[24] = 0; #line 1636 out.stack[25] = 0; #line 1636 out.stack[26] = 0; #line 1636 out.stack[27] = 0; #line 1636 out.stack[28] = 0; #line 1636 out.stack[29] = 0; #line 1636 out.stack[30] = 0; #line 1636 out.stack[31] = 0; #line 1636 out.stackPos = 0; #line 1636 out.err = 0; #line 1636 out.errstr = (char *)0; #line 1637 ismaster = 0; #line 1639 tmp = mongo_simple_int_command(conn, "admin", "ismaster", 1, & out); #line 1639 if (tmp == 0) { #line 1641 bson_find(& it, (bson const *)(& out), "ismaster"); #line 1642 ismaster = bson_iterator_bool((bson_iterator const *)(& it)); } #line 1645 if (realout) { #line 1646 *realout = out; } else { #line 1648 bson_destroy(& out); } #line 1650 return (ismaster); } } #line 1654 static void digest2hex(mongo_md5_byte_t *digest , char *hex_digest ) ; #line 1654 "src/mongo.c" static char const hex[16] = #line 1654 { (char const )'0', (char const )'1', (char const )'2', (char const )'3', (char const )'4', (char const )'5', (char const )'6', (char const )'7', (char const )'8', (char const )'9', (char const )'a', (char const )'b', (char const )'c', (char const )'d', (char const )'e', (char const )'f'}; #line 1653 "src/mongo.c" static void digest2hex(mongo_md5_byte_t *digest , char *hex_digest ) { int i ; { #line 1656 i = 0; #line 1656 while (i < 16) { #line 1657 *(hex_digest + 2 * i) = (char )hex[((int )*(digest + i) & 240) >> 4]; #line 1658 *(hex_digest + (2 * i + 1)) = (char )hex[(int )*(digest + i) & 15]; #line 1656 i ++; } #line 1660 *(hex_digest + 32) = (char )'\000'; #line 1661 return; } } #line 1663 "src/mongo.c" static void mongo_pass_digest(char const *user , char const *pass , char *hex_digest ) { mongo_md5_state_t st ; mongo_md5_byte_t digest[16] ; size_t tmp ; size_t tmp___0 ; { #line 1667 mongo_md5_init(& st); #line 1668 tmp = strlen(user); #line 1668 mongo_md5_append(& st, (mongo_md5_byte_t const *)user, (int )tmp); #line 1669 mongo_md5_append(& st, (mongo_md5_byte_t const *)":mongo:", 7); #line 1670 tmp___0 = strlen(pass); #line 1670 mongo_md5_append(& st, (mongo_md5_byte_t const *)pass, (int )tmp___0); #line 1671 mongo_md5_finish(& st, (mongo_md5_byte_t *)(digest)); #line 1672 digest2hex((mongo_md5_byte_t *)(digest), hex_digest); #line 1673 return; } } #line 1675 "src/mongo.c" int mongo_cmd_add_user(mongo *conn , char const *db , char const *user , char const *pass ) { bson user_obj ; bson pass_obj ; char hex_digest[33] ; char *ns ; size_t tmp ; size_t tmp___0 ; void *tmp___1 ; int res ; size_t tmp___2 ; { #line 1679 tmp = strlen(db); #line 1679 tmp___0 = strlen(".system.users"); #line 1679 tmp___1 = bson_malloc((int )((tmp + tmp___0) + 1U)); #line 1679 ns = (char *)tmp___1; #line 1682 strcpy(ns, db); #line 1683 tmp___2 = strlen(db); #line 1683 strcpy(ns + tmp___2, ".system.users"); #line 1685 mongo_pass_digest(user, pass, (char *)(hex_digest)); #line 1687 bson_init(& user_obj); #line 1688 bson_append_string(& user_obj, "user", user); #line 1689 bson_finish(& user_obj); #line 1691 bson_init(& pass_obj); #line 1692 bson_append_start_object(& pass_obj, "$set"); #line 1693 bson_append_string(& pass_obj, "pwd", (char const *)(hex_digest)); #line 1694 bson_append_finish_object(& pass_obj); #line 1695 bson_finish(& pass_obj); #line 1697 res = mongo_update(conn, (char const *)ns, (bson const *)(& user_obj), (bson const *)(& pass_obj), 1, (mongo_write_concern *)((void *)0)); #line 1699 bson_free((void *)ns); #line 1700 bson_destroy(& user_obj); #line 1701 bson_destroy(& pass_obj); #line 1703 return (res); } } #line 1706 "src/mongo.c" int mongo_cmd_authenticate(mongo *conn , char const *db , char const *user , char const *pass ) { bson from_db ; bson cmd ; char const *nonce ; int result ; mongo_md5_state_t st ; mongo_md5_byte_t digest[16] ; char hex_digest[33] ; bson_iterator it ; int tmp ; size_t tmp___0 ; size_t tmp___1 ; { #line 1716 tmp = mongo_simple_int_command(conn, db, "getnonce", 1, & from_db); #line 1716 if (tmp == 0) { #line 1718 bson_find(& it, (bson const *)(& from_db), "nonce"); #line 1719 nonce = bson_iterator_string((bson_iterator const *)(& it)); } else { #line 1721 return (-1); } #line 1724 mongo_pass_digest(user, pass, (char *)(hex_digest)); #line 1726 mongo_md5_init(& st); #line 1727 tmp___0 = strlen(nonce); #line 1727 mongo_md5_append(& st, (mongo_md5_byte_t const *)nonce, (int )tmp___0); #line 1728 tmp___1 = strlen(user); #line 1728 mongo_md5_append(& st, (mongo_md5_byte_t const *)user, (int )tmp___1); #line 1729 mongo_md5_append(& st, (mongo_md5_byte_t const *)(hex_digest), 32); #line 1730 mongo_md5_finish(& st, (mongo_md5_byte_t *)(digest)); #line 1731 digest2hex((mongo_md5_byte_t *)(digest), (char *)(hex_digest)); #line 1733 bson_init(& cmd); #line 1734 bson_append_int(& cmd, "authenticate", (int const )1); #line 1735 bson_append_string(& cmd, "user", user); #line 1736 bson_append_string(& cmd, "nonce", nonce); #line 1737 bson_append_string(& cmd, "key", (char const *)(hex_digest)); #line 1738 bson_finish(& cmd); #line 1740 bson_destroy(& from_db); #line 1742 result = mongo_run_command(conn, db, (bson const *)(& cmd), (bson *)((void *)0)); #line 1744 bson_destroy(& cmd); #line 1746 return (result); } } #line 1 "env_win32.o" #pragma merger("0","./env_win32.i","") #line 1037 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/winsock2.h" extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) closesocket)(SOCKET s ) ; #line 1038 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) connect)(SOCKET s , struct sockaddr const *name , int namelen ) ; #line 1050 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) recv)(SOCKET s , char *buf , int len , int flags ) ; #line 1053 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) send)(SOCKET s , char const *buf , int len , int flags ) ; #line 1055 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) setsockopt)(SOCKET s , int level , int optname , char const *optval , int optlen ) ; #line 1057 extern __attribute__((__dllimport__)) SOCKET ( __attribute__((__stdcall__)) socket)(int af , int type , int protocol ) ; #line 1065 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) WSAStartup)(WORD wVersionRequested , LPWSADATA lpWSAData ) ; #line 1068 extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) WSAGetLastError)(void) ; #line 277 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/ws2tcpip.h" extern __attribute__((__dllimport__)) int ( __attribute__((__stdcall__)) getaddrinfo)(char const *nodename , char const *servname , struct addrinfo const *hints , struct addrinfo **res ) ; #line 301 extern __attribute__((__dllimport__)) void ( __attribute__((__stdcall__)) freeaddrinfo)(LPADDRINFO pAddrInfo ) ; #line 36 "src/env_win32.c" int mongo_env_close_socket(int socket___0 ) { int tmp ; { #line 37 tmp = closesocket((SOCKET )socket___0); #line 37 return (tmp); } } #line 40 "src/env_win32.c" int mongo_env_write_socket(mongo *conn , void const *buf , int len ) { char const *cbuf ; int flags ; int sent ; int tmp ; int tmp___0 ; { #line 41 cbuf = (char const *)buf; #line 42 flags = 0; #line 44 while (len) { #line 45 tmp = send((SOCKET )conn->sock, cbuf, len, flags); #line 45 sent = tmp; #line 46 if (sent == -1) { #line 47 tmp___0 = WSAGetLastError(); #line 47 __mongo_set_error(conn, (mongo_error_t )7, (char const *)((void *)0), tmp___0); #line 48 conn->connected = 0; #line 49 return (-1); } #line 51 cbuf += sent; #line 52 len -= sent; } #line 55 return (0); } } #line 58 "src/env_win32.c" int mongo_env_read_socket(mongo *conn , void *buf , int len ) { char *cbuf ; int sent ; int tmp ; int tmp___0 ; { #line 59 cbuf = (char *)buf; #line 61 while (len) { #line 62 tmp = recv((SOCKET )conn->sock, cbuf, len, 0); #line 62 sent = tmp; #line 63 if (sent == 0) { #line 64 tmp___0 = WSAGetLastError(); #line 64 __mongo_set_error(conn, (mongo_error_t )7, (char const *)((void *)0), tmp___0); #line 65 return (-1); } else #line 63 if (sent == -1) { #line 64 tmp___0 = WSAGetLastError(); #line 64 __mongo_set_error(conn, (mongo_error_t )7, (char const *)((void *)0), tmp___0); #line 65 return (-1); } #line 67 cbuf += sent; #line 68 len -= sent; } #line 71 return (0); } } #line 74 "src/env_win32.c" int mongo_env_set_socket_op_timeout(mongo *conn , int millis ) { int tmp ; int tmp___0 ; int tmp___1 ; int tmp___2 ; { #line 75 tmp___0 = setsockopt((SOCKET )conn->sock, 65535, 4102, (char const *)(& millis), (int )sizeof(millis)); #line 75 if (tmp___0 == -1) { #line 77 tmp = WSAGetLastError(); #line 77 __mongo_set_error(conn, (mongo_error_t )7, "setsockopt SO_RCVTIMEO failed.", tmp); #line 79 return (-1); } #line 82 tmp___2 = setsockopt((SOCKET )conn->sock, 65535, 4101, (char const *)(& millis), (int )sizeof(millis)); #line 82 if (tmp___2 == -1) { #line 84 tmp___1 = WSAGetLastError(); #line 84 __mongo_set_error(conn, (mongo_error_t )7, "setsockopt SO_SNDTIMEO failed.", tmp___1); #line 86 return (-1); } #line 89 return (0); } } #line 92 "src/env_win32.c" int mongo_env_socket_connect(mongo *conn , char const *host , int port ) { char port_str[32] ; char errstr[128] ; int status ; struct addrinfo ai_hints ; struct addrinfo *ai_list ; struct addrinfo *ai_ptr ; int tmp ; SOCKET tmp___0 ; int tmp___1 ; int tmp___2 ; int flag ; { #line 98 ai_list = (struct addrinfo *)((void *)0); #line 99 ai_ptr = (struct addrinfo *)((void *)0); #line 101 conn->sock = 0; #line 102 conn->connected = 0; #line 104 (*bson_sprintf)(port_str, "%d", port); #line 106 memset((void *)(& ai_hints), 0, sizeof(ai_hints)); #line 107 ai_hints.ai_family = 0; #line 108 ai_hints.ai_socktype = 1; #line 109 ai_hints.ai_protocol = 6; #line 111 status = getaddrinfo(host, (char const *)(port_str), (struct addrinfo const *)(& ai_hints), & ai_list); #line 112 if (status != 0) { #line 113 (*bson_sprintf)(errstr, "getaddrinfo failed with error %d", status); #line 114 tmp = WSAGetLastError(); #line 114 __mongo_set_error(conn, (mongo_error_t )3, (char const *)(errstr), tmp); #line 115 return (-1); } #line 118 ai_ptr = ai_list; #line 118 while ((unsigned int )ai_ptr != (unsigned int )((void *)0)) { #line 119 tmp___0 = socket(ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); #line 119 conn->sock = (int )tmp___0; #line 122 if (conn->sock < 0) { #line 123 tmp___1 = WSAGetLastError(); #line 123 __mongo_set_error(conn, (mongo_error_t )8, "socket() failed", tmp___1); #line 125 conn->sock = 0; #line 126 goto __Cont; } #line 129 status = connect((SOCKET )conn->sock, (struct sockaddr const *)ai_ptr->ai_addr, (int )ai_ptr->ai_addrlen); #line 130 if (status != 0) { #line 131 tmp___2 = WSAGetLastError(); #line 131 __mongo_set_error(conn, (mongo_error_t )8, "connect() failed", tmp___2); #line 133 mongo_env_close_socket(conn->sock); #line 134 conn->sock = 0; #line 135 goto __Cont; } #line 138 if (ai_ptr->ai_protocol == 6) { #line 139 flag = 1; #line 141 setsockopt((SOCKET )conn->sock, 6, 1, (char const *)((void *)(& flag)), (int )sizeof(flag)); #line 144 if (conn->op_timeout_ms > 0) { #line 145 mongo_env_set_socket_op_timeout(conn, conn->op_timeout_ms); } } #line 148 conn->connected = 1; #line 149 break; __Cont: /* CIL Label */ #line 118 ai_ptr = ai_ptr->ai_next; } #line 152 freeaddrinfo(ai_list); #line 154 if (! conn->connected) { #line 155 conn->err = (mongo_error_t )2; #line 156 return (-1); } else { #line 159 mongo_clear_errors(conn); #line 160 return (0); } } } #line 168 "src/env_win32.c" static int called_once ; #line 169 "src/env_win32.c" static int retval ; #line 164 "src/env_win32.c" int mongo_env_sock_init(void) { WSADATA wsaData ; WORD wVers ; int tmp ; { #line 171 if (called_once) { #line 171 return (retval); } #line 173 called_once = 1; #line 174 wVers = (WORD )(1 | (1 << 8)); #line 175 tmp = WSAStartup(wVers, & wsaData); #line 175 retval = tmp == 0; #line 177 return (retval); } } #line 1 "gridfs.o" #pragma merger("0","./gridfs.i","") #line 222 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/time.h" extern time_t ( __attribute__((__cdecl__)) time)(time_t *_Time ) ; #line 50 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/string.h" extern char *( __attribute__((__cdecl__)) strcat)(char *_Dest , char const *_Source ) ; #line 165 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" extern int ( __attribute__((__cdecl__)) fclose)(FILE *_File ) ; #line 185 extern FILE *( __attribute__((__cdecl__)) fopen)(char const *_Filename , char const *_Mode ) ; #line 191 extern size_t ( __attribute__((__cdecl__)) fread)(void *_DstBuf , size_t _ElementSize , size_t _Count , FILE *_File ) ; #line 201 extern size_t ( __attribute__((__cdecl__)) fwrite)(void const *_Str , size_t _Size , size_t _Count , FILE *_File ) ; #line 254 "src/bson.h" bson_type bson_iterator_type(bson_iterator const *i ) ; #line 301 int64_t bson_iterator_long(bson_iterator const *i ) ; #line 377 bson_oid_t *bson_iterator_oid(bson_iterator const *i ) ; #line 431 bson_date_t bson_iterator_date(bson_iterator const *i ) ; #line 451 int bson_iterator_bin_len(bson_iterator const *i ) ; #line 471 char const *bson_iterator_bin_data(bson_iterator const *i ) ; #line 501 void bson_iterator_subobject(bson_iterator const *i , bson *sub ) ; #line 533 void bson_oid_gen(bson_oid_t *oid ) ; #line 643 int bson_copy(bson *out , bson const *in ) ; #line 654 int bson_append_oid(bson *b , char const *name , bson_oid_t const *oid ) ; #line 686 int bson_append_long(bson *b , char const *name , int64_t const i ) ; #line 805 int bson_append_binary(bson *b , char const *name , char type , char const *str , int len ) ; #line 894 int bson_append_date(bson *b , char const *name , bson_date_t millis ) ; #line 993 void *bson_realloc(void *ptr , int size ) ; #line 54 "src/gridfs.h" gridfs *gridfs_create(void) ; #line 55 void gridfs_dispose(gridfs *gfs ) ; #line 56 gridfile *gridfile_create(void) ; #line 57 void gridfile_dispose(gridfile *gf ) ; #line 58 void gridfile_get_descriptor(gridfile *gf , bson *out ) ; #line 69 int gridfs_init(mongo *client , char const *dbname , char const *prefix , gridfs *gfs ) ; #line 78 void gridfs_destroy(gridfs *gfs ) ; #line 86 void gridfile_writer_init(gridfile *gfile , gridfs *gfs , char const *remote_name , char const *content_type ) ; #line 95 void gridfile_write_buffer(gridfile *gfile , char const *data___0 , gridfs_offset length ) ; #line 105 int gridfile_writer_done(gridfile *gfile ) ; #line 117 int gridfs_store_buffer(gridfs *gfs , char const *data___0 , gridfs_offset length , char const *remotename , char const *contenttype ) ; #line 130 int gridfs_store_file(gridfs *gfs , char const *filename , char const *remotename , char const *contenttype ) ; #line 138 void gridfs_remove_filename(gridfs *gfs , char const *filename ) ; #line 150 int gridfs_find_query(gridfs *gfs , bson *query , gridfile *gfile ) ; #line 161 int gridfs_find_filename(gridfs *gfs , char const *filename , gridfile *gfile ) ; #line 171 int gridfile_init(gridfs *gfs , bson *meta , gridfile *gfile ) ; #line 178 void gridfile_destroy(gridfile *gfile ) ; #line 184 bson_bool_t gridfile_exists(gridfile *gfile ) ; #line 192 char const *gridfile_get_filename(gridfile *gfile ) ; #line 200 int gridfile_get_chunksize(gridfile *gfile ) ; #line 209 gridfs_offset gridfile_get_contentlength(gridfile *gfile ) ; #line 219 char const *gridfile_get_contenttype(gridfile *gfile ) ; #line 228 bson_date_t gridfile_get_uploaddate(gridfile *gfile ) ; #line 237 char const *gridfile_get_md5(gridfile *gfile ) ; #line 248 char const *gridfile_get_field(gridfile *gfile , char const *name ) ; #line 259 bson_bool_t gridfile_get_boolean(gridfile *gfile , char const *name ) ; #line 269 void gridfile_get_metadata(gridfile *gfile , bson *out ) ; #line 277 int gridfile_get_numchunks(gridfile *gfile ) ; #line 285 void gridfile_get_chunk(gridfile *gfile , int n , bson *out ) ; #line 296 mongo_cursor *gridfile_get_chunks(gridfile *gfile , int start , int size ) ; #line 304 gridfs_offset gridfile_write_file(gridfile *gfile , FILE *stream ) ; #line 318 gridfs_offset gridfile_read(gridfile *gfile , gridfs_offset size , char *buf ) ; #line 330 gridfs_offset gridfile_seek(gridfile *gfile , gridfs_offset offset ) ; #line 24 "src/gridfs.c" gridfs *gridfs_create(void) { void *tmp ; { #line 25 tmp = bson_malloc((int )sizeof(gridfs )); #line 25 return ((gridfs *)tmp); } } #line 28 "src/gridfs.c" void gridfs_dispose(gridfs *gfs ) { { #line 29 free((void *)gfs); #line 30 return; } } #line 32 "src/gridfs.c" gridfile *gridfile_create(void) { void *tmp ; { #line 33 tmp = bson_malloc((int )sizeof(gridfile )); #line 33 return ((gridfile *)tmp); } } #line 36 "src/gridfs.c" void gridfile_dispose(gridfile *gf ) { { #line 37 free((void *)gf); #line 38 return; } } #line 40 "src/gridfs.c" void gridfile_get_descriptor(gridfile *gf , bson *out ) { { #line 41 *out = *(gf->meta); #line 42 return; } } #line 45 "src/gridfs.c" static bson *chunk_new(bson_oid_t id , int chunkNumber , char const *data___0 , int len ) { bson *b ; void *tmp ; { #line 47 tmp = bson_malloc((int )sizeof(bson )); #line 47 b = (bson *)tmp; #line 49 bson_init(b); #line 50 bson_append_oid(b, "files_id", (bson_oid_t const *)(& id)); #line 51 bson_append_int(b, "n", (int const )chunkNumber); #line 52 bson_append_binary(b, "data", (char)0, data___0, len); #line 53 bson_finish(b); #line 54 return (b); } } #line 57 "src/gridfs.c" static void chunk_free(bson *oChunk ) { { #line 58 bson_destroy(oChunk); #line 59 bson_free((void *)oChunk); #line 60 return; } } #line 62 "src/gridfs.c" int gridfs_init(mongo *client , char const *dbname , char const *prefix , gridfs *gfs ) { int options ; bson b ; bson_bool_t success ; size_t tmp ; void *tmp___0 ; size_t tmp___1 ; void *tmp___2 ; size_t tmp___3 ; size_t tmp___4 ; size_t tmp___5 ; void *tmp___6 ; size_t tmp___7 ; size_t tmp___8 ; size_t tmp___9 ; void *tmp___10 ; int tmp___11 ; int tmp___12 ; { #line 69 gfs->client = client; #line 72 tmp = strlen(dbname); #line 72 tmp___0 = bson_malloc((int )(tmp + 1U)); #line 72 gfs->dbname = (char const *)tmp___0; #line 73 strcpy((char *)gfs->dbname, dbname); #line 76 if ((unsigned int )prefix == (unsigned int )((void *)0)) { #line 76 prefix = "fs"; } #line 77 tmp___1 = strlen(prefix); #line 77 tmp___2 = bson_malloc((int )(tmp___1 + 1U)); #line 77 gfs->prefix = (char const *)tmp___2; #line 78 strcpy((char *)gfs->prefix, prefix); #line 81 tmp___3 = strlen(prefix); #line 81 tmp___4 = strlen(dbname); #line 81 tmp___5 = strlen(".files"); #line 81 tmp___6 = bson_malloc((int )(((tmp___3 + tmp___4) + tmp___5) + 2U)); #line 81 gfs->files_ns = (char const *)tmp___6; #line 83 strcpy((char *)gfs->files_ns, dbname); #line 84 strcat((char *)gfs->files_ns, "."); #line 85 strcat((char *)gfs->files_ns, prefix); #line 86 strcat((char *)gfs->files_ns, ".files"); #line 89 tmp___7 = strlen(prefix); #line 89 tmp___8 = strlen(dbname); #line 89 tmp___9 = strlen(".chunks"); #line 89 tmp___10 = bson_malloc((int )(((tmp___7 + tmp___8) + tmp___9) + 2U)); #line 89 gfs->chunks_ns = (char const *)tmp___10; #line 91 strcpy((char *)gfs->chunks_ns, dbname); #line 92 strcat((char *)gfs->chunks_ns, "."); #line 93 strcat((char *)gfs->chunks_ns, prefix); #line 94 strcat((char *)gfs->chunks_ns, ".chunks"); #line 96 bson_init(& b); #line 97 bson_append_int(& b, "filename", (int const )1); #line 98 bson_finish(& b); #line 99 options = 0; #line 100 tmp___11 = mongo_create_index(gfs->client, gfs->files_ns, (bson const *)(& b), options, (bson *)((void *)0)); #line 100 success = tmp___11 == 0; #line 101 bson_destroy(& b); #line 102 if (! success) { #line 103 bson_free((void *)((char *)gfs->dbname)); #line 104 bson_free((void *)((char *)gfs->prefix)); #line 105 bson_free((void *)((char *)gfs->files_ns)); #line 106 bson_free((void *)((char *)gfs->chunks_ns)); #line 107 return (-1); } #line 110 bson_init(& b); #line 111 bson_append_int(& b, "files_id", (int const )1); #line 112 bson_append_int(& b, "n", (int const )1); #line 113 bson_finish(& b); #line 114 options = 1; #line 115 tmp___12 = mongo_create_index(gfs->client, gfs->chunks_ns, (bson const *)(& b), options, (bson *)((void *)0)); #line 115 success = tmp___12 == 0; #line 116 bson_destroy(& b); #line 117 if (! success) { #line 118 bson_free((void *)((char *)gfs->dbname)); #line 119 bson_free((void *)((char *)gfs->prefix)); #line 120 bson_free((void *)((char *)gfs->files_ns)); #line 121 bson_free((void *)((char *)gfs->chunks_ns)); #line 122 return (-1); } #line 125 return (0); } } #line 128 "src/gridfs.c" void gridfs_destroy(gridfs *gfs ) { { #line 129 if ((unsigned int )gfs == (unsigned int )((void *)0)) { #line 129 return; } #line 130 if (gfs->dbname) { #line 130 bson_free((void *)((char *)gfs->dbname)); } #line 131 if (gfs->prefix) { #line 131 bson_free((void *)((char *)gfs->prefix)); } #line 132 if (gfs->files_ns) { #line 132 bson_free((void *)((char *)gfs->files_ns)); } #line 133 if (gfs->chunks_ns) { #line 133 bson_free((void *)((char *)gfs->chunks_ns)); } #line 134 return; } } #line 136 "src/gridfs.c" static int gridfs_insert_file(gridfs *gfs , char const *name , bson_oid_t const id , gridfs_offset length , char const *contenttype ) { bson command ; bson ret ; bson res ; bson_iterator it ; int result ; int64_t d ; time_t tmp ; char const *tmp___0 ; { #line 147 bson_init(& command); #line 148 bson_append_oid(& command, "filemd5", & id); #line 149 bson_append_string(& command, "root", gfs->prefix); #line 150 bson_finish(& command); #line 151 result = mongo_run_command(gfs->client, gfs->dbname, (bson const *)(& command), & res); #line 152 bson_destroy(& command); #line 153 if (result != 0) { #line 154 return (result); } #line 157 bson_init(& ret); #line 158 bson_append_oid(& ret, "_id", & id); #line 159 if ((unsigned int )name != (unsigned int )((void *)0)) { #line 159 if ((int const )*name != 0) { #line 160 bson_append_string(& ret, "filename", name); } } #line 162 bson_append_long(& ret, "length", (int64_t const )length); #line 163 bson_append_int(& ret, "chunkSize", (int const )262144); #line 164 tmp = time((time_t *)((void *)0)); #line 164 d = 1000LL * (bson_date_t )tmp; #line 165 bson_append_date(& ret, "uploadDate", d); #line 166 bson_find(& it, (bson const *)(& res), "md5"); #line 167 tmp___0 = bson_iterator_string((bson_iterator const *)(& it)); #line 167 bson_append_string(& ret, "md5", tmp___0); #line 168 bson_destroy(& res); #line 169 if ((unsigned int )contenttype != (unsigned int )((void *)0)) { #line 169 if ((int const )*contenttype != 0) { #line 170 bson_append_string(& ret, "contentType", contenttype); } } #line 172 bson_finish(& ret); #line 173 result = mongo_insert(gfs->client, gfs->files_ns, (bson const *)(& ret), (mongo_write_concern *)((void *)0)); #line 174 bson_destroy(& ret); #line 176 return (result); } } #line 179 "src/gridfs.c" int gridfs_store_buffer(gridfs *gfs , char const *data___0 , gridfs_offset length , char const *remotename , char const *contenttype ) { char const *end ; char const *data_ptr ; bson_oid_t id ; int chunkNumber ; int chunkLen ; bson *oChunk ; int tmp ; { #line 183 end = data___0 + length; #line 184 data_ptr = data___0; #line 186 chunkNumber = 0; #line 194 bson_oid_gen(& id); #line 197 while ((unsigned int )data_ptr < (unsigned int )end) { #line 198 if (262144U < (unsigned int )(end - data_ptr)) { #line 198 chunkLen = 262144; } else { #line 198 chunkLen = (int )((unsigned int )(end - data_ptr)); } #line 200 oChunk = chunk_new(id, chunkNumber, data_ptr, chunkLen); #line 201 mongo_insert(gfs->client, gfs->chunks_ns, (bson const *)oChunk, (mongo_write_concern *)((void *)0)); #line 202 chunk_free(oChunk); #line 203 chunkNumber ++; #line 204 data_ptr += chunkLen; } #line 208 tmp = gridfs_insert_file(gfs, remotename, (bson_oid_t const )id, length, contenttype); #line 208 return (tmp); } } #line 211 "src/gridfs.c" void gridfile_writer_init(gridfile *gfile , gridfs *gfs , char const *remote_name , char const *content_type ) { size_t tmp ; void *tmp___0 ; size_t tmp___1 ; void *tmp___2 ; { #line 213 gfile->gfs = gfs; #line 215 bson_oid_gen(& gfile->id); #line 216 gfile->chunk_num = 0; #line 217 gfile->length = (gridfs_offset )0; #line 218 gfile->pending_len = 0; #line 219 gfile->pending_data = (char *)((void *)0); #line 221 tmp = strlen(remote_name); #line 221 tmp___0 = bson_malloc((int )(tmp + 1U)); #line 221 gfile->remote_name = (char *)tmp___0; #line 222 strcpy(gfile->remote_name, remote_name); #line 224 tmp___1 = strlen(content_type); #line 224 tmp___2 = bson_malloc((int )(tmp___1 + 1U)); #line 224 gfile->content_type = (char *)tmp___2; #line 225 strcpy(gfile->content_type, content_type); #line 226 return; } } #line 228 "src/gridfs.c" void gridfile_write_buffer(gridfile *gfile , char const *data___0 , gridfs_offset length ) { int bytes_left ; int data_partial_len ; int chunks_to_write ; char *buffer ; bson *oChunk ; gridfs_offset to_write ; void *tmp ; void *tmp___0 ; void *tmp___1 ; void *tmp___2 ; { #line 231 bytes_left = 0; #line 232 data_partial_len = 0; #line 233 chunks_to_write = 0; #line 236 to_write = length + (gridfs_offset )gfile->pending_len; #line 238 if (to_write < 262144ULL) { #line 239 if (gfile->pending_data) { #line 240 tmp = bson_realloc((void *)gfile->pending_data, (int )((gridfs_offset )gfile->pending_len + to_write)); #line 240 gfile->pending_data = (char *)tmp; #line 241 memcpy((void *)(gfile->pending_data + gfile->pending_len), (void const *)data___0, (size_t )length); } else #line 242 if (to_write > 0ULL) { #line 243 tmp___0 = bson_malloc((int )to_write); #line 243 gfile->pending_data = (char *)tmp___0; #line 244 memcpy((void *)gfile->pending_data, (void const *)data___0, (size_t )length); } #line 246 gfile->pending_len = (int )((gridfs_offset )gfile->pending_len + length); } else { #line 249 chunks_to_write = (int )(to_write / 262144ULL); #line 250 bytes_left = (int )(to_write % 262144ULL); #line 255 if (gfile->pending_len > 0) { #line 256 data_partial_len = 262144 - gfile->pending_len; #line 257 tmp___1 = bson_malloc(262144); #line 257 buffer = (char *)tmp___1; #line 258 memcpy((void *)buffer, (void const *)gfile->pending_data, (size_t )gfile->pending_len); #line 259 memcpy((void *)(buffer + gfile->pending_len), (void const *)data___0, (size_t )data_partial_len); #line 261 oChunk = chunk_new(gfile->id, gfile->chunk_num, (char const *)buffer, 262144); #line 262 mongo_insert((gfile->gfs)->client, (gfile->gfs)->chunks_ns, (bson const *)oChunk, (mongo_write_concern *)((void *)0)); #line 263 chunk_free(oChunk); #line 264 (gfile->chunk_num) ++; #line 265 gfile->length += 262144ULL; #line 266 data___0 += data_partial_len; #line 268 chunks_to_write --; #line 270 bson_free((void *)buffer); } #line 273 while (chunks_to_write > 0) { #line 274 oChunk = chunk_new(gfile->id, gfile->chunk_num, data___0, 262144); #line 275 mongo_insert((gfile->gfs)->client, (gfile->gfs)->chunks_ns, (bson const *)oChunk, (mongo_write_concern *)((void *)0)); #line 276 chunk_free(oChunk); #line 277 (gfile->chunk_num) ++; #line 278 chunks_to_write --; #line 279 gfile->length += 262144ULL; #line 280 data___0 += 262144; } #line 283 bson_free((void *)gfile->pending_data); #line 286 if (bytes_left == 0) { #line 287 gfile->pending_data = (char *)((void *)0); } else { #line 289 tmp___2 = bson_malloc(bytes_left); #line 289 gfile->pending_data = (char *)tmp___2; #line 290 memcpy((void *)gfile->pending_data, (void const *)data___0, (size_t )bytes_left); } #line 293 gfile->pending_len = bytes_left; } #line 295 return; } } #line 297 "src/gridfs.c" int gridfile_writer_done(gridfile *gfile ) { bson *oChunk ; int response ; { #line 303 if (gfile->pending_data) { #line 304 oChunk = chunk_new(gfile->id, gfile->chunk_num, (char const *)gfile->pending_data, gfile->pending_len); #line 305 mongo_insert((gfile->gfs)->client, (gfile->gfs)->chunks_ns, (bson const *)oChunk, (mongo_write_concern *)((void *)0)); #line 306 chunk_free(oChunk); #line 307 bson_free((void *)gfile->pending_data); #line 308 gfile->length += (gridfs_offset )gfile->pending_len; } #line 312 response = gridfs_insert_file(gfile->gfs, (char const *)gfile->remote_name, (bson_oid_t const )gfile->id, gfile->length, (char const *)gfile->content_type); #line 315 bson_free((void *)gfile->remote_name); #line 316 bson_free((void *)gfile->content_type); #line 318 return (response); } } #line 321 "src/gridfs.c" int gridfs_store_file(gridfs *gfs , char const *filename , char const *remotename , char const *contenttype ) { char buffer[262144] ; FILE *fd ; bson_oid_t id ; int chunkNumber ; gridfs_offset length ; gridfs_offset chunkLen ; bson *oChunk ; int tmp ; size_t tmp___0 ; size_t tmp___1 ; int tmp___2 ; { #line 327 chunkNumber = 0; #line 328 length = (gridfs_offset )0; #line 329 chunkLen = (gridfs_offset )0; #line 333 tmp = strcmp(filename, "-"); #line 333 if (tmp == 0) { #line 333 fd = & (*_imp___iob)[0]; } else { #line 335 fd = fopen(filename, "rb"); #line 336 if ((unsigned int )fd == (unsigned int )((void *)0)) { #line 337 return (-1); } } #line 341 bson_oid_gen(& id); #line 344 tmp___0 = fread((void *)(buffer), (size_t )1, (size_t )262144, fd); #line 344 chunkLen = (gridfs_offset )tmp___0; #line 345 while (1) { #line 346 oChunk = chunk_new(id, chunkNumber, (char const *)(buffer), (int )chunkLen); #line 347 mongo_insert(gfs->client, gfs->chunks_ns, (bson const *)oChunk, (mongo_write_concern *)((void *)0)); #line 348 chunk_free(oChunk); #line 349 length += chunkLen; #line 350 chunkNumber ++; #line 351 tmp___1 = fread((void *)(buffer), (size_t )1, (size_t )262144, fd); #line 351 chunkLen = (gridfs_offset )tmp___1; #line 345 if (! (chunkLen != 0ULL)) { #line 345 break; } } #line 355 if ((unsigned int )fd != (unsigned int )(& (*_imp___iob)[0])) { #line 355 fclose(fd); } #line 361 if ((unsigned int )remotename == (unsigned int )((void *)0)) { #line 362 remotename = filename; } else #line 361 if ((int const )*remotename == 0) { #line 362 remotename = filename; } #line 366 tmp___2 = gridfs_insert_file(gfs, remotename, (bson_oid_t const )id, length, contenttype); #line 366 return (tmp___2); } } #line 369 "src/gridfs.c" void gridfs_remove_filename(gridfs *gfs , char const *filename ) { bson query ; mongo_cursor *files ; bson file ; bson_iterator it ; bson_oid_t id ; bson b ; bson_oid_t *tmp ; int tmp___0 ; { #line 377 bson_init(& query); #line 378 bson_append_string(& query, "filename", filename); #line 379 bson_finish(& query); #line 380 files = mongo_find(gfs->client, gfs->files_ns, (bson const *)(& query), (bson const *)((void *)0), 0, 0, 0); #line 381 bson_destroy(& query); #line 384 while (1) { #line 384 tmp___0 = mongo_cursor_next(files); #line 384 if (! (tmp___0 == 0)) { #line 384 break; } #line 385 file = files->current; #line 386 bson_find(& it, (bson const *)(& file), "_id"); #line 387 tmp = bson_iterator_oid((bson_iterator const *)(& it)); #line 387 id = *tmp; #line 390 bson_init(& b); #line 391 bson_append_oid(& b, "_id", (bson_oid_t const *)(& id)); #line 392 bson_finish(& b); #line 393 mongo_remove(gfs->client, gfs->files_ns, (bson const *)(& b), (mongo_write_concern *)((void *)0)); #line 394 bson_destroy(& b); #line 397 bson_init(& b); #line 398 bson_append_oid(& b, "files_id", (bson_oid_t const *)(& id)); #line 399 bson_finish(& b); #line 400 mongo_remove(gfs->client, gfs->chunks_ns, (bson const *)(& b), (mongo_write_concern *)((void *)0)); #line 401 bson_destroy(& b); } #line 404 mongo_cursor_destroy(files); #line 405 return; } } #line 407 "src/gridfs.c" int gridfs_find_query(gridfs *gfs , bson *query , gridfile *gfile ) { bson uploadDate ; bson finalQuery ; bson out ; int i ; int tmp ; { #line 415 bson_init(& uploadDate); #line 416 bson_append_int(& uploadDate, "uploadDate", (int const )-1); #line 417 bson_finish(& uploadDate); #line 419 bson_init(& finalQuery); #line 420 bson_append_bson(& finalQuery, "query", (bson const *)query); #line 421 bson_append_bson(& finalQuery, "orderby", (bson const *)(& uploadDate)); #line 422 bson_finish(& finalQuery); #line 424 tmp = mongo_find_one(gfs->client, gfs->files_ns, (bson const *)(& finalQuery), (bson const *)((void *)0), & out); #line 424 i = tmp == 0; #line 426 bson_destroy(& uploadDate); #line 427 bson_destroy(& finalQuery); #line 428 if (! i) { #line 429 return (-1); } else { #line 431 gridfile_init(gfs, & out, gfile); #line 432 bson_destroy(& out); #line 433 return (0); } } } #line 437 "src/gridfs.c" int gridfs_find_filename(gridfs *gfs , char const *filename , gridfile *gfile ) { bson query ; int i ; { #line 444 bson_init(& query); #line 445 bson_append_string(& query, "filename", filename); #line 446 bson_finish(& query); #line 447 i = gridfs_find_query(gfs, & query, gfile); #line 448 bson_destroy(& query); #line 449 return (i); } } #line 452 "src/gridfs.c" int gridfile_init(gridfs *gfs , bson *meta , gridfile *gfile ) { void *tmp ; { #line 455 gfile->gfs = gfs; #line 456 gfile->pos = (gridfs_offset )0; #line 457 tmp = bson_malloc((int )sizeof(bson )); #line 457 gfile->meta = (bson *)tmp; #line 458 if ((unsigned int )gfile->meta == (unsigned int )((void *)0)) { #line 458 return (-1); } #line 459 bson_copy(gfile->meta, (bson const *)meta); #line 460 return (0); } } #line 463 "src/gridfs.c" void gridfile_destroy(gridfile *gfile ) { { #line 466 bson_destroy(gfile->meta); #line 467 bson_free((void *)gfile->meta); #line 468 return; } } #line 470 "src/gridfs.c" bson_bool_t gridfile_exists(gridfile *gfile ) { int tmp ; { #line 471 if ((unsigned int )gfile != (unsigned int )((void *)0)) { #line 471 if ((unsigned int )gfile->meta != (unsigned int )((void *)0)) { #line 471 tmp = 1; } else { #line 471 tmp = 0; } } else { #line 471 tmp = 0; } #line 471 return (tmp); } } #line 474 "src/gridfs.c" char const *gridfile_get_filename(gridfile *gfile ) { bson_iterator it ; char const *tmp ; { #line 477 bson_find(& it, (bson const *)gfile->meta, "filename"); #line 478 tmp = bson_iterator_string((bson_iterator const *)(& it)); #line 478 return (tmp); } } #line 481 "src/gridfs.c" int gridfile_get_chunksize(gridfile *gfile ) { bson_iterator it ; int tmp ; { #line 484 bson_find(& it, (bson const *)gfile->meta, "chunkSize"); #line 485 tmp = bson_iterator_int((bson_iterator const *)(& it)); #line 485 return (tmp); } } #line 488 "src/gridfs.c" gridfs_offset gridfile_get_contentlength(gridfile *gfile ) { bson_iterator it ; int tmp ; int64_t tmp___0 ; bson_type tmp___1 ; { #line 491 bson_find(& it, (bson const *)gfile->meta, "length"); #line 493 tmp___1 = bson_iterator_type((bson_iterator const *)(& it)); #line 493 if ((unsigned int )tmp___1 == 16U) { #line 494 tmp = bson_iterator_int((bson_iterator const *)(& it)); #line 494 return ((gridfs_offset )tmp); } else { #line 496 tmp___0 = bson_iterator_long((bson_iterator const *)(& it)); #line 496 return ((gridfs_offset )tmp___0); } } } #line 499 "src/gridfs.c" char const *gridfile_get_contenttype(gridfile *gfile ) { bson_iterator it ; char const *tmp ; bson_type tmp___0 ; { #line 502 tmp___0 = bson_find(& it, (bson const *)gfile->meta, "contentType"); #line 502 if (tmp___0) { #line 503 tmp = bson_iterator_string((bson_iterator const *)(& it)); #line 503 return (tmp); } else { #line 504 return ((char const *)((void *)0)); } } } #line 507 "src/gridfs.c" bson_date_t gridfile_get_uploaddate(gridfile *gfile ) { bson_iterator it ; bson_date_t tmp ; { #line 510 bson_find(& it, (bson const *)gfile->meta, "uploadDate"); #line 511 tmp = bson_iterator_date((bson_iterator const *)(& it)); #line 511 return (tmp); } } #line 514 "src/gridfs.c" char const *gridfile_get_md5(gridfile *gfile ) { bson_iterator it ; char const *tmp ; { #line 517 bson_find(& it, (bson const *)gfile->meta, "md5"); #line 518 tmp = bson_iterator_string((bson_iterator const *)(& it)); #line 518 return (tmp); } } #line 521 "src/gridfs.c" char const *gridfile_get_field(gridfile *gfile , char const *name ) { bson_iterator it ; char const *tmp ; { #line 524 bson_find(& it, (bson const *)gfile->meta, name); #line 525 tmp = bson_iterator_value((bson_iterator const *)(& it)); #line 525 return (tmp); } } #line 528 "src/gridfs.c" bson_bool_t gridfile_get_boolean(gridfile *gfile , char const *name ) { bson_iterator it ; bson_bool_t tmp ; { #line 531 bson_find(& it, (bson const *)gfile->meta, name); #line 532 tmp = bson_iterator_bool((bson_iterator const *)(& it)); #line 532 return (tmp); } } #line 535 "src/gridfs.c" void gridfile_get_metadata(gridfile *gfile , bson *out ) { bson_iterator it ; bson_type tmp ; { #line 538 tmp = bson_find(& it, (bson const *)gfile->meta, "metadata"); #line 538 if (tmp) { #line 539 bson_iterator_subobject((bson_iterator const *)(& it), out); } else { #line 541 bson_empty(out); } #line 542 return; } } #line 544 "src/gridfs.c" int gridfile_get_numchunks(gridfile *gfile ) { bson_iterator it ; gridfs_offset length ; gridfs_offset chunkSize ; double numchunks ; int tmp ; int64_t tmp___0 ; bson_type tmp___1 ; int tmp___2 ; int tmp___3 ; { #line 550 bson_find(& it, (bson const *)gfile->meta, "length"); #line 552 tmp___1 = bson_iterator_type((bson_iterator const *)(& it)); #line 552 if ((unsigned int )tmp___1 == 16U) { #line 553 tmp = bson_iterator_int((bson_iterator const *)(& it)); #line 553 length = (gridfs_offset )tmp; } else { #line 555 tmp___0 = bson_iterator_long((bson_iterator const *)(& it)); #line 555 length = (gridfs_offset )tmp___0; } #line 557 bson_find(& it, (bson const *)gfile->meta, "chunkSize"); #line 558 tmp___2 = bson_iterator_int((bson_iterator const *)(& it)); #line 558 chunkSize = (gridfs_offset )tmp___2; #line 559 numchunks = (double )length / (double )chunkSize; #line 560 if (numchunks - (double )((int )numchunks) > (double )0) { #line 560 tmp___3 = (int )(numchunks + (double )1); } else { #line 560 tmp___3 = (int )numchunks; } #line 560 return (tmp___3); } } #line 565 "src/gridfs.c" void gridfile_get_chunk(gridfile *gfile , int n , bson *out ) { bson query ; bson_iterator it ; bson_oid_t id ; int result ; bson_oid_t *tmp ; int tmp___0 ; bson empty ; { #line 572 bson_init(& query); #line 573 bson_find(& it, (bson const *)gfile->meta, "_id"); #line 574 tmp = bson_iterator_oid((bson_iterator const *)(& it)); #line 574 id = *tmp; #line 575 bson_append_oid(& query, "files_id", (bson_oid_t const *)(& id)); #line 576 bson_append_int(& query, "n", (int const )n); #line 577 bson_finish(& query); #line 579 tmp___0 = mongo_find_one((gfile->gfs)->client, (gfile->gfs)->chunks_ns, (bson const *)(& query), (bson const *)((void *)0), out); #line 579 result = tmp___0 == 0; #line 582 bson_destroy(& query); #line 583 if (! result) { #line 585 bson_empty(& empty); #line 586 bson_copy(out, (bson const *)(& empty)); } #line 588 return; } } #line 590 "src/gridfs.c" mongo_cursor *gridfile_get_chunks(gridfile *gfile , int start , int size ) { bson_iterator it ; bson_oid_t id ; bson gte ; bson query ; bson orderby ; bson command ; mongo_cursor *cursor ; bson_oid_t *tmp ; { #line 599 bson_find(& it, (bson const *)gfile->meta, "_id"); #line 600 tmp = bson_iterator_oid((bson_iterator const *)(& it)); #line 600 id = *tmp; #line 602 bson_init(& query); #line 603 bson_append_oid(& query, "files_id", (bson_oid_t const *)(& id)); #line 604 if (size == 1) { #line 605 bson_append_int(& query, "n", (int const )start); } else { #line 607 bson_init(& gte); #line 608 bson_append_int(& gte, "$gte", (int const )start); #line 609 bson_finish(& gte); #line 610 bson_append_bson(& query, "n", (bson const *)(& gte)); #line 611 bson_destroy(& gte); } #line 613 bson_finish(& query); #line 615 bson_init(& orderby); #line 616 bson_append_int(& orderby, "n", (int const )1); #line 617 bson_finish(& orderby); #line 619 bson_init(& command); #line 620 bson_append_bson(& command, "query", (bson const *)(& query)); #line 621 bson_append_bson(& command, "orderby", (bson const *)(& orderby)); #line 622 bson_finish(& command); #line 624 cursor = mongo_find((gfile->gfs)->client, (gfile->gfs)->chunks_ns, (bson const *)(& command), (bson const *)((void *)0), size, 0, 0); #line 627 bson_destroy(& command); #line 628 bson_destroy(& query); #line 629 bson_destroy(& orderby); #line 631 return (cursor); } } #line 634 "src/gridfs.c" gridfs_offset gridfile_write_file(gridfile *gfile , FILE *stream ) { int i ; size_t len ; bson chunk ; bson_iterator it ; char const *data___0 ; int num ; int tmp ; int tmp___0 ; gridfs_offset tmp___1 ; { #line 640 tmp = gridfile_get_numchunks(gfile); #line 640 num = tmp; #line 642 i = 0; #line 642 while (i < num) { #line 643 gridfile_get_chunk(gfile, i, & chunk); #line 644 bson_find(& it, (bson const *)(& chunk), "data"); #line 645 tmp___0 = bson_iterator_bin_len((bson_iterator const *)(& it)); #line 645 len = (size_t )tmp___0; #line 646 data___0 = bson_iterator_bin_data((bson_iterator const *)(& it)); #line 647 fwrite((void const *)data___0, sizeof(char ), len, stream); #line 648 bson_destroy(& chunk); #line 642 i ++; } #line 651 tmp___1 = gridfile_get_contentlength(gfile); #line 651 return (tmp___1); } } #line 654 "src/gridfs.c" gridfs_offset gridfile_read(gridfile *gfile , gridfs_offset size , char *buf ) { mongo_cursor *chunks ; bson chunk ; int first_chunk ; int last_chunk ; int total_chunks ; gridfs_offset chunksize ; gridfs_offset contentlength ; gridfs_offset bytes_left ; int i ; bson_iterator it ; gridfs_offset chunk_len ; char const *chunk_data ; int tmp ; int tmp___0 ; { #line 669 contentlength = gridfile_get_contentlength(gfile); #line 670 tmp = gridfile_get_chunksize(gfile); #line 670 chunksize = (gridfs_offset )tmp; #line 671 if (contentlength - gfile->pos < size) { #line 671 size = contentlength - gfile->pos; } else { #line 671 size = size; } #line 674 bytes_left = size; #line 676 first_chunk = (int )(gfile->pos / chunksize); #line 677 last_chunk = (int )(((gfile->pos + size) - 1ULL) / chunksize); #line 678 total_chunks = (last_chunk - first_chunk) + 1; #line 679 chunks = gridfile_get_chunks(gfile, first_chunk, total_chunks); #line 681 i = 0; #line 681 while (i < total_chunks) { #line 682 mongo_cursor_next(chunks); #line 683 chunk = chunks->current; #line 684 bson_find(& it, (bson const *)(& chunk), "data"); #line 685 tmp___0 = bson_iterator_bin_len((bson_iterator const *)(& it)); #line 685 chunk_len = (gridfs_offset )tmp___0; #line 686 chunk_data = bson_iterator_bin_data((bson_iterator const *)(& it)); #line 687 if (i == 0) { #line 688 chunk_data += gfile->pos % chunksize; #line 689 chunk_len -= gfile->pos % chunksize; } #line 691 if (bytes_left > chunk_len) { #line 692 memcpy((void *)buf, (void const *)chunk_data, (size_t )chunk_len); #line 693 bytes_left -= chunk_len; #line 694 buf += chunk_len; } else { #line 696 memcpy((void *)buf, (void const *)chunk_data, (size_t )bytes_left); } #line 681 i ++; } #line 700 mongo_cursor_destroy(chunks); #line 701 gfile->pos += size; #line 703 return (size); } } #line 706 "src/gridfs.c" gridfs_offset gridfile_seek(gridfile *gfile , gridfs_offset offset ) { gridfs_offset length ; { #line 709 length = gridfile_get_contentlength(gfile); #line 710 if (length < offset) { #line 710 gfile->pos = length; } else { #line 710 gfile->pos = offset; } #line 711 return (gfile->pos); } } /* compiler builtin: void __builtin_va_end(__builtin_va_list ) ; */ /* compiler builtin: void __builtin_va_start(__builtin_va_list ) ; */ #line 1 "bson.o" #pragma merger("0","./bson.i","") #line 307 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdlib.h" extern __attribute__((__nothrow__, __noreturn__)) void ( __attribute__((__cdecl__)) exit)(int _Code ) ; #line 377 extern void ( __attribute__((__cdecl__)) srand)(unsigned int _Seed ) ; #line 404 extern void *( __attribute__((__cdecl__)) malloc)(size_t _Size ) ; #line 405 extern void *( __attribute__((__cdecl__)) realloc)(void *_Memory , size_t _NewSize ) ; #line 217 "c:/data/eiffelstudio7.1/gcc/windows/mingw/bin/../lib/gcc/i686-w64-mingw32/4.4.5/../../../../i686-w64-mingw32/include/stdio.h" extern int ( __attribute__((__cdecl__)) printf)(char const *_Format , ...) ; #line 251 extern int ( __attribute__((__cdecl__)) vfprintf)(FILE *_File , char const *_Format , va_list _ArgList ) ; #line 282 extern int ( __attribute__((__cdecl__)) sprintf)(char *_Dest , char const *_Format , ...) ; #line 162 "src/bson.h" bson *bson_create(void) ; #line 163 void bson_dispose(bson *b ) ; #line 173 int bson_buffer_size(bson const *b ) ; #line 180 void bson_print(bson const *b ) ; #line 187 char const *bson_data(bson const *b ) ; #line 195 void bson_print_raw(char const *data___0 , int depth ) ; #line 209 bson_iterator *bson_iterator_create(void) ; #line 210 void bson_iterator_dispose(bson_iterator *i ) ; #line 236 bson_bool_t bson_iterator_more(bson_iterator const *i ) ; #line 312 bson_timestamp_t bson_iterator_timestamp(bson_iterator const *i ) ; #line 313 int bson_iterator_timestamp_time(bson_iterator const *i ) ; #line 314 int bson_iterator_timestamp_increment(bson_iterator const *i ) ; #line 337 double bson_iterator_double_raw(bson_iterator const *i ) ; #line 347 int bson_iterator_int_raw(bson_iterator const *i ) ; #line 357 int64_t bson_iterator_long_raw(bson_iterator const *i ) ; #line 367 bson_bool_t bson_iterator_bool_raw(bson_iterator const *i ) ; #line 411 char const *bson_iterator_code(bson_iterator const *i ) ; #line 420 void bson_iterator_code_scope(bson_iterator const *i , bson *scope ) ; #line 441 time_t bson_iterator_time_t(bson_iterator const *i ) ; #line 461 char bson_iterator_bin_type(bson_iterator const *i ) ; #line 481 char const *bson_iterator_regex(bson_iterator const *i ) ; #line 491 char const *bson_iterator_regex_opts(bson_iterator const *i ) ; #line 509 void bson_iterator_subiterator(bson_iterator const *i , bson_iterator *sub ) ; #line 518 void bson_oid_from_string(bson_oid_t *oid , char const *str ) ; #line 526 void bson_oid_to_string(bson_oid_t const *oid , char *str ) ; #line 541 void bson_set_oid_fuzz(int (*func)(void) ) ; #line 550 void bson_set_oid_inc(int (*func)(void) ) ; #line 557 time_t bson_oid_generated_time(bson_oid_t *oid ) ; #line 605 int bson_ensure_space(bson *b , int const bytesNeeded ) ; #line 664 int bson_append_new_oid(bson *b , char const *name ) ; #line 697 int bson_append_double(bson *b , char const *name , double const d ) ; #line 720 int bson_append_string_n(bson *b , char const *name , char const *value , int len ) ; #line 731 int bson_append_symbol(bson *b , char const *name , char const *value ) ; #line 743 int bson_append_symbol_n(bson *b , char const *name , char const *value , int len ) ; #line 755 int bson_append_code(bson *b , char const *name , char const *value ) ; #line 767 int bson_append_code_n(bson *b , char const *name , char const *value , int len ) ; #line 779 int bson_append_code_w_scope(bson *b , char const *name , char const *code , bson const *scope ) ; #line 792 int bson_append_code_w_scope_n(bson *b , char const *name , char const *code , int len , bson const *scope ) ; #line 826 int bson_append_null(bson *b , char const *name ) ; #line 836 int bson_append_undefined(bson *b , char const *name ) ; #line 848 int bson_append_regex(bson *b , char const *name , char const *pattern , char const *opts ) ; #line 870 int bson_append_element(bson *b , char const *name_or_null , bson_iterator const *elem ) ; #line 881 int bson_append_timestamp(bson *b , char const *name , bson_timestamp_t *ts ) ; #line 882 int bson_append_timestamp2(bson *b , char const *name , int time___0 , int increment ) ; #line 905 int bson_append_time_t(bson *b , char const *name , time_t secs ) ; #line 925 int bson_append_start_array(bson *b , char const *name ) ; #line 944 int bson_append_finish_array(bson *b ) ; #line 946 void bson_numstr(char *str , int i ) ; #line 960 void *(*bson_malloc_func)(size_t ) ; #line 961 void *(*bson_realloc_func)(void * , size_t ) ; #line 962 void (*bson_free_func)(void * ) ; #line 964 int (*bson_printf)(char const * , ...) ; #line 965 int (*bson_fprintf)(FILE * , char const * , ...) ; #line 967 int (*bson_errprintf)(char const * , ...) ; #line 1002 bson_err_handler set_bson_err_handler(void (*func)(char const *errmsg ) ) ; #line 1010 void bson_fatal(int ok ) ; #line 1025 void bson_builder_error(bson *b ) ; #line 1032 double bson_int64_to_double(int64_t i64 ) ; #line 1034 void bson_swap_endian32(void *outp , void const *inp ) ; #line 1035 void bson_swap_endian64(void *outp , void const *inp ) ; #line 37 "src/encoding.h" int bson_check_field_name(bson *b , char const *string , int const length ) ; #line 50 int bson_check_string(bson *b , char const *string , int const length ) ; #line 27 "src/bson.c" int const initialBufferSize = (int const )128; #line 30 "src/bson.c" static int const zero = (int const )0; #line 33 "src/bson.c" void *(*bson_malloc_func)(size_t ) = (void *(*)(size_t ))(& malloc); #line 34 "src/bson.c" void *(*bson_realloc_func)(void * , size_t ) = (void *(*)(void * , size_t ))(& realloc); #line 35 "src/bson.c" void (*bson_free_func)(void * ) = (void (*)(void * ))(& free); #line 39 "src/bson.c" int (*bson_printf)(char const * , ...) = (int (*)(char const * , ...))(& printf); #line 41 "src/bson.c" int (*bson_fprintf)(FILE * , char const * , ...) = (int (*)(FILE * , char const * , ...))(& fprintf); #line 42 "src/bson.c" int (*bson_sprintf)(char * , char const * , ...) = (int (*)(char * , char const * , ...))(& sprintf); #line 44 static int _bson_errprintf(char const *format , ...) ; #line 45 "src/bson.c" int (*bson_errprintf)(char const * , ...) = & _bson_errprintf; #line 48 "src/bson.c" static int (*oid_fuzz_func)(void) = (int (*)(void))((void *)0); #line 49 "src/bson.c" static int (*oid_inc_func)(void) = (int (*)(void))((void *)0); #line 55 "src/bson.c" bson *bson_create(void) { void *tmp ; { #line 56 tmp = bson_malloc((int )sizeof(bson )); #line 56 return ((bson *)tmp); } } #line 59 "src/bson.c" void bson_dispose(bson *b ) { { #line 60 bson_free((void *)b); #line 61 return; } } #line 64 "src/bson.c" static char *data = (char *)"\005\000\000\000\000"; #line 63 "src/bson.c" bson *bson_empty(bson *obj ) { { #line 65 bson_init_data(obj, data); #line 66 obj->finished = 1; #line 67 obj->err = 0; #line 68 obj->errstr = (char *)((void *)0); #line 69 obj->stackPos = 0; #line 70 return (obj); } } #line 73 "src/bson.c" int bson_copy(bson *out , bson const *in ) { int tmp ; int tmp___0 ; { #line 74 if (! out) { #line 74 return (-1); } else #line 74 if (! in) { #line 74 return (-1); } #line 75 if (! in->finished) { #line 75 return (-1); } #line 76 tmp = bson_size(in); #line 76 bson_init_size(out, tmp); #line 77 tmp___0 = bson_size(in); #line 77 memcpy((void *)out->data, (void const *)in->data, (size_t )tmp___0); #line 78 out->finished = 1; #line 80 return (0); } } #line 83 "src/bson.c" int bson_init_data(bson *b , char *data___0 ) { { #line 84 b->data = data___0; #line 85 return (0); } } #line 88 "src/bson.c" int bson_init_finished_data(bson *b , char *data___0 ) { { #line 89 bson_init_data(b, data___0); #line 90 b->finished = 1; #line 91 return (0); } } #line 94 "src/bson.c" static void _bson_reset(bson *b ) { { #line 95 b->finished = 0; #line 96 b->stackPos = 0; #line 97 b->err = 0; #line 98 b->errstr = (char *)((void *)0); #line 99 return; } } #line 101 "src/bson.c" int bson_size(bson const *b ) { int i ; { #line 103 if (! b) { #line 104 return (0); } else #line 103 if (! b->data) { #line 104 return (0); } #line 105 memcpy((void *)(& i), (void const *)b->data, (size_t )4); #line 106 return (i); } } #line 109 "src/bson.c" int bson_buffer_size(bson const *b ) { { #line 110 return ((b->cur - b->data) + 1); } } #line 114 "src/bson.c" char const *bson_data(bson const *b ) { { #line 115 return ((char const *)b->data); } } #line 118 "src/bson.c" static char hexbyte(char hex___1 ) { { #line 119 if ((int )hex___1 >= 48) { #line 119 if ((int )hex___1 <= 57) { #line 120 return ((char )((int )hex___1 - 48)); } else { #line 119 goto _L___0; } } else _L___0: /* CIL Label */ #line 121 if ((int )hex___1 >= 65) { #line 121 if ((int )hex___1 <= 70) { #line 122 return ((char )(((int )hex___1 - 65) + 10)); } else { #line 121 goto _L; } } else _L: /* CIL Label */ #line 123 if ((int )hex___1 >= 97) { #line 123 if ((int )hex___1 <= 102) { #line 124 return ((char )(((int )hex___1 - 97) + 10)); } else { #line 126 return ((char)0); } } else { #line 126 return ((char)0); } } } #line 129 "src/bson.c" void bson_oid_from_string(bson_oid_t *oid , char const *str ) { int i ; char tmp ; char tmp___0 ; { #line 131 i = 0; #line 131 while (i < 12) { #line 132 tmp = hexbyte((char )*(str + 2 * i)); #line 132 tmp___0 = hexbyte((char )*(str + (2 * i + 1))); #line 132 oid->bytes[i] = (char )(((int )tmp << 4) | (int )tmp___0); #line 131 i ++; } #line 134 return; } } #line 137 "src/bson.c" static char const hex___0[16] = #line 137 { (char const )'0', (char const )'1', (char const )'2', (char const )'3', (char const )'4', (char const )'5', (char const )'6', (char const )'7', (char const )'8', (char const )'9', (char const )'a', (char const )'b', (char const )'c', (char const )'d', (char const )'e', (char const )'f'}; #line 136 "src/bson.c" void bson_oid_to_string(bson_oid_t const *oid , char *str ) { int i ; { #line 139 i = 0; #line 139 while (i < 12) { #line 140 *(str + 2 * i) = (char )hex___0[((int )oid->bytes[i] & 240) >> 4]; #line 141 *(str + (2 * i + 1)) = (char )hex___0[(int )oid->bytes[i] & 15]; #line 139 i ++; } #line 143 *(str + 24) = (char )'\000'; #line 144 return; } } #line 146 "src/bson.c" void bson_set_oid_fuzz(int (*func)(void) ) { { #line 147 oid_fuzz_func = func; #line 148 return; } } #line 150 "src/bson.c" void bson_set_oid_inc(int (*func)(void) ) { { #line 151 oid_inc_func = func; #line 152 return; } } #line 155 "src/bson.c" static int incr = 0; #line 156 "src/bson.c" static int fuzz = 0; #line 154 "src/bson.c" void bson_oid_gen(bson_oid_t *oid ) { int i ; time_t t ; time_t tmp ; int tmp___0 ; { #line 158 tmp = time((time_t *)((void *)0)); #line 158 t = tmp; #line 160 if (oid_inc_func) { #line 161 i = (*oid_inc_func)(); } else { #line 163 tmp___0 = incr; #line 163 incr ++; #line 163 i = tmp___0; } #line 165 if (! fuzz) { #line 166 if (oid_fuzz_func) { #line 167 fuzz = (*oid_fuzz_func)(); } else { #line 169 srand((unsigned int )((int )t)); #line 170 fuzz = rand(); } } #line 174 bson_swap_endian32((void *)(& oid->ints[0]), (void const *)(& t)); #line 175 oid->ints[1] = fuzz; #line 176 bson_swap_endian32((void *)(& oid->ints[2]), (void const *)(& i)); #line 177 return; } } #line 179 "src/bson.c" time_t bson_oid_generated_time(bson_oid_t *oid ) { time_t out ; { #line 181 bson_swap_endian32((void *)(& out), (void const *)(& oid->ints[0])); #line 183 return (out); } } #line 186 "src/bson.c" void bson_print(bson const *b ) { { #line 187 bson_print_raw((char const *)b->data, 0); #line 188 return; } } #line 190 "src/bson.c" void bson_print_raw(char const *data___0 , int depth ) { bson_iterator i ; char const *key ; int temp ; bson_timestamp_t ts ; char oidhex[25] ; bson scope ; bson_type t ; bson_type tmp ; double tmp___0 ; char const *tmp___1 ; char const *tmp___2 ; bson_oid_t *tmp___3 ; char const *tmp___5 ; bson_bool_t tmp___6 ; bson_date_t tmp___7 ; char const *tmp___8 ; char const *tmp___9 ; char const *tmp___10 ; int tmp___11 ; int64_t tmp___12 ; char const *tmp___13 ; bson_type tmp___14 ; { #line 197 bson_iterator_from_buffer(& i, data___0); #line 199 while (1) { #line 199 tmp___14 = bson_iterator_next(& i); #line 199 if (! tmp___14) { #line 199 break; } #line 200 tmp = bson_iterator_type((bson_iterator const *)(& i)); #line 200 t = tmp; #line 201 if ((unsigned int )t == 0U) { #line 202 break; } #line 203 key = bson_iterator_key((bson_iterator const *)(& i)); #line 205 temp = 0; #line 205 while (temp <= depth) { #line 206 (*bson_printf)("\t"); #line 205 temp ++; } #line 207 (*bson_printf)("%s : %d \t ", key, (unsigned int )t); #line 208 switch ((unsigned int )t) { case 1U: #line 210 tmp___0 = bson_iterator_double((bson_iterator const *)(& i)); #line 210 (*bson_printf)("%f", tmp___0); #line 211 break; case 2U: #line 213 tmp___1 = bson_iterator_string((bson_iterator const *)(& i)); #line 213 (*bson_printf)("%s", tmp___1); #line 214 break; case 14U: #line 216 tmp___2 = bson_iterator_string((bson_iterator const *)(& i)); #line 216 (*bson_printf)("SYMBOL: %s", tmp___2); #line 217 break; case 7U: #line 219 tmp___3 = bson_iterator_oid((bson_iterator const *)(& i)); #line 219 bson_oid_to_string((bson_oid_t const *)tmp___3, oidhex); #line 220 (*bson_printf)("%s", oidhex); #line 221 break; case 8U: #line 223 tmp___6 = bson_iterator_bool((bson_iterator const *)(& i)); #line 223 if (tmp___6) { #line 223 tmp___5 = "true"; } else { #line 223 tmp___5 = "false"; } #line 223 (*bson_printf)("%s", tmp___5); #line 224 break; case 9U: #line 226 tmp___7 = bson_iterator_date((bson_iterator const *)(& i)); #line 226 (*bson_printf)("%ld", (long )tmp___7); #line 227 break; case 5U: #line 229 (*bson_printf)("BSON_BINDATA"); #line 230 break; case 6U: #line 232 (*bson_printf)("BSON_UNDEFINED"); #line 233 break; case 10U: #line 235 (*bson_printf)("BSON_NULL"); #line 236 break; case 11U: #line 238 tmp___8 = bson_iterator_regex((bson_iterator const *)(& i)); #line 238 (*bson_printf)("BSON_REGEX: %s", tmp___8); #line 239 break; case 13U: #line 241 tmp___9 = bson_iterator_code((bson_iterator const *)(& i)); #line 241 (*bson_printf)("BSON_CODE: %s", tmp___9); #line 242 break; case 15U: #line 244 tmp___10 = bson_iterator_code((bson_iterator const *)(& i)); #line 244 (*bson_printf)("BSON_CODE_W_SCOPE: %s", tmp___10); #line 246 bson_iterator_code_scope((bson_iterator const *)(& i), & scope); #line 247 (*bson_printf)("\n\t SCOPE: "); #line 248 bson_print((bson const *)(& scope)); #line 250 break; case 16U: #line 252 tmp___11 = bson_iterator_int((bson_iterator const *)(& i)); #line 252 (*bson_printf)("%d", tmp___11); #line 253 break; case 18U: #line 255 tmp___12 = bson_iterator_long((bson_iterator const *)(& i)); #line 255 (*bson_printf)("%lld", (uint64_t )tmp___12); #line 256 break; case 17U: #line 258 ts = bson_iterator_timestamp((bson_iterator const *)(& i)); #line 259 (*bson_printf)("i: %d, t: %d", ts.i, ts.t); #line 260 break; case 4U: case 3U: #line 263 (*bson_printf)("\n"); #line 264 tmp___13 = bson_iterator_value((bson_iterator const *)(& i)); #line 264 bson_print_raw(tmp___13, depth + 1); #line 265 break; default: #line 267 (*bson_errprintf)("can\'t print type : %d\n", (unsigned int )t); } #line 269 (*bson_printf)("\n"); } #line 271 return; } } #line 277 "src/bson.c" bson_iterator *bson_iterator_create(void) { void *tmp ; { #line 278 tmp = malloc(sizeof(bson_iterator )); #line 278 return ((bson_iterator *)tmp); } } #line 281 "src/bson.c" void bson_iterator_dispose(bson_iterator *i ) { { #line 282 free((void *)i); #line 283 return; } } #line 285 "src/bson.c" void bson_iterator_init(bson_iterator *i , bson const *b ) { { #line 286 i->cur = (char const *)(b->data + 4); #line 287 i->first = 1; #line 288 return; } } #line 290 "src/bson.c" void bson_iterator_from_buffer(bson_iterator *i , char const *buffer ) { { #line 291 i->cur = buffer + 4; #line 292 i->first = 1; #line 293 return; } } #line 295 "src/bson.c" bson_type bson_find(bson_iterator *it , bson const *obj , char const *name ) { char const *tmp ; int tmp___0 ; bson_type tmp___1 ; bson_type tmp___2 ; { #line 296 bson_iterator_init(it, (bson const *)((bson *)obj)); #line 297 while (1) { #line 297 tmp___1 = bson_iterator_next(it); #line 297 if (! tmp___1) { #line 297 break; } #line 298 tmp = bson_iterator_key((bson_iterator const *)it); #line 298 tmp___0 = strcmp(name, tmp); #line 298 if (tmp___0 == 0) { #line 299 break; } } #line 301 tmp___2 = bson_iterator_type((bson_iterator const *)it); #line 301 return (tmp___2); } } #line 304 "src/bson.c" bson_bool_t bson_iterator_more(bson_iterator const *i ) { { #line 305 return ((bson_bool_t )*(i->cur)); } } #line 308 "src/bson.c" bson_type bson_iterator_next(bson_iterator *i ) { int ds ; bson_type tmp ; int tmp___0 ; int tmp___1 ; int tmp___2 ; char const *s ; char const *tmp___3 ; char const *p ; size_t tmp___4 ; size_t tmp___5 ; char msg[27] ; size_t tmp___6 ; { #line 311 if (i->first) { #line 312 i->first = 0; #line 313 return ((bson_type )*(i->cur)); } #line 316 tmp = bson_iterator_type((bson_iterator const *)i); #line 316 switch ((unsigned int )tmp) { case 0U: #line 318 return ((bson_type )0); case 10U: case 6U: #line 321 ds = 0; #line 322 break; case 8U: #line 324 ds = 1; #line 325 break; case 16U: #line 327 ds = 4; #line 328 break; case 9U: case 17U: case 1U: case 18U: #line 333 ds = 8; #line 334 break; case 7U: #line 336 ds = 12; #line 337 break; case 13U: case 14U: case 2U: #line 341 tmp___0 = bson_iterator_int_raw((bson_iterator const *)i); #line 341 ds = 4 + tmp___0; #line 342 break; case 5U: #line 344 tmp___1 = bson_iterator_int_raw((bson_iterator const *)i); #line 344 ds = 5 + tmp___1; #line 345 break; case 15U: case 4U: case 3U: #line 349 ds = bson_iterator_int_raw((bson_iterator const *)i); #line 350 break; case 12U: #line 352 tmp___2 = bson_iterator_int_raw((bson_iterator const *)i); #line 352 ds = 16 + tmp___2; #line 353 break; case 11U: #line 355 tmp___3 = bson_iterator_value((bson_iterator const *)i); #line 355 s = tmp___3; #line 356 p = s; #line 357 tmp___4 = strlen(p); #line 357 p += tmp___4 + 1U; #line 358 tmp___5 = strlen(p); #line 358 p += tmp___5 + 1U; #line 359 ds = p - s; #line 360 break; default: #line 364 msg[0] = (char )'u'; #line 364 msg[1] = (char )'n'; #line 364 msg[2] = (char )'k'; #line 364 msg[3] = (char )'n'; #line 364 msg[4] = (char )'o'; #line 364 msg[5] = (char )'w'; #line 364 msg[6] = (char )'n'; #line 364 msg[7] = (char )' '; #line 364 msg[8] = (char )'t'; #line 364 msg[9] = (char )'y'; #line 364 msg[10] = (char )'p'; #line 364 msg[11] = (char )'e'; #line 364 msg[12] = (char )':'; #line 364 msg[13] = (char )' '; #line 364 msg[14] = (char )'0'; #line 364 msg[15] = (char )'0'; #line 364 msg[16] = (char )'0'; #line 364 msg[17] = (char )'0'; #line 364 msg[18] = (char )'0'; #line 364 msg[19] = (char )'0'; #line 364 msg[20] = (char )'0'; #line 364 msg[21] = (char )'0'; #line 364 msg[22] = (char )'0'; #line 364 msg[23] = (char )'0'; #line 364 msg[24] = (char )'0'; #line 364 msg[25] = (char )'0'; #line 364 msg[26] = (char )'\000'; #line 365 bson_numstr(msg + 14, (int )((unsigned int )*(i->cur + 0))); #line 366 bson_fatal_msg(0, (char const *)(msg)); #line 367 return ((bson_type )0); } #line 371 tmp___6 = strlen(i->cur + 1); #line 371 i->cur += ((1U + tmp___6) + 1U) + (size_t )ds; #line 373 return ((bson_type )*(i->cur)); } } #line 376 "src/bson.c" bson_type bson_iterator_type(bson_iterator const *i ) { { #line 377 return ((bson_type )*(i->cur + 0)); } } #line 380 "src/bson.c" char const *bson_iterator_key(bson_iterator const *i ) { { #line 381 return ((char const *)(i->cur + 1)); } } #line 384 "src/bson.c" char const *bson_iterator_value(bson_iterator const *i ) { char const *t ; size_t tmp ; { #line 385 t = (char const *)(i->cur + 1); #line 386 tmp = strlen(t); #line 386 t += tmp + 1U; #line 387 return (t); } } #line 392 "src/bson.c" int bson_iterator_int_raw(bson_iterator const *i ) { int out ; char const *tmp ; { #line 394 tmp = bson_iterator_value(i); #line 394 memcpy((void *)(& out), (void const *)tmp, (size_t )4); #line 395 return (out); } } #line 398 "src/bson.c" double bson_iterator_double_raw(bson_iterator const *i ) { double out ; char const *tmp ; { #line 400 tmp = bson_iterator_value(i); #line 400 memcpy((void *)(& out), (void const *)tmp, (size_t )8); #line 401 return (out); } } #line 404 "src/bson.c" int64_t bson_iterator_long_raw(bson_iterator const *i ) { int64_t out ; char const *tmp ; { #line 406 tmp = bson_iterator_value(i); #line 406 memcpy((void *)(& out), (void const *)tmp, (size_t )8); #line 407 return (out); } } #line 410 "src/bson.c" bson_bool_t bson_iterator_bool_raw(bson_iterator const *i ) { char const *tmp ; { #line 411 tmp = bson_iterator_value(i); #line 411 return ((bson_bool_t )*(tmp + 0)); } } #line 414 "src/bson.c" bson_oid_t *bson_iterator_oid(bson_iterator const *i ) { char const *tmp ; { #line 415 tmp = bson_iterator_value(i); #line 415 return ((bson_oid_t *)tmp); } } #line 418 "src/bson.c" int bson_iterator_int(bson_iterator const *i ) { bson_type tmp ; int tmp___0 ; int64_t tmp___1 ; double tmp___2 ; { #line 419 tmp = bson_iterator_type(i); #line 419 switch ((unsigned int )tmp) { case 16U: #line 421 tmp___0 = bson_iterator_int_raw(i); #line 421 return (tmp___0); case 18U: #line 423 tmp___1 = bson_iterator_long_raw(i); #line 423 return ((int )tmp___1); case 1U: #line 425 tmp___2 = bson_iterator_double_raw(i); #line 425 return ((int )tmp___2); default: #line 427 return (0); } } } #line 431 "src/bson.c" double bson_iterator_double(bson_iterator const *i ) { bson_type tmp ; int tmp___0 ; int64_t tmp___1 ; double tmp___2 ; { #line 432 tmp = bson_iterator_type(i); #line 432 switch ((unsigned int )tmp) { case 16U: #line 434 tmp___0 = bson_iterator_int_raw(i); #line 434 return ((double )tmp___0); case 18U: #line 436 tmp___1 = bson_iterator_long_raw(i); #line 436 return ((double )tmp___1); case 1U: #line 438 tmp___2 = bson_iterator_double_raw(i); #line 438 return (tmp___2); default: #line 440 return ((double )0); } } } #line 444 "src/bson.c" int64_t bson_iterator_long(bson_iterator const *i ) { bson_type tmp ; int tmp___0 ; int64_t tmp___1 ; double tmp___2 ; { #line 445 tmp = bson_iterator_type(i); #line 445 switch ((unsigned int )tmp) { case 16U: #line 447 tmp___0 = bson_iterator_int_raw(i); #line 447 return ((int64_t )tmp___0); case 18U: #line 449 tmp___1 = bson_iterator_long_raw(i); #line 449 return (tmp___1); case 1U: #line 451 tmp___2 = bson_iterator_double_raw(i); #line 451 return ((int64_t )tmp___2); default: #line 453 return ((int64_t )0); } } } #line 457 "src/bson.c" bson_timestamp_t bson_iterator_timestamp(bson_iterator const *i ) { bson_timestamp_t ts ; char const *tmp ; char const *tmp___0 ; { #line 459 tmp = bson_iterator_value(i); #line 459 memcpy((void *)(& ts.i), (void const *)tmp, (size_t )4); #line 460 tmp___0 = bson_iterator_value(i); #line 460 memcpy((void *)(& ts.t), (void const *)(tmp___0 + 4), (size_t )4); #line 461 return (ts); } } #line 465 "src/bson.c" int bson_iterator_timestamp_time(bson_iterator const *i ) { int time___0 ; char const *tmp ; { #line 467 tmp = bson_iterator_value(i); #line 467 memcpy((void *)(& time___0), (void const *)(tmp + 4), (size_t )4); #line 468 return (time___0); } } #line 472 "src/bson.c" int bson_iterator_timestamp_increment(bson_iterator const *i ) { int increment ; char const *tmp ; { #line 474 tmp = bson_iterator_value(i); #line 474 memcpy((void *)(& increment), (void const *)tmp, (size_t )4); #line 475 return (increment); } } #line 479 "src/bson.c" bson_bool_t bson_iterator_bool(bson_iterator const *i ) { bson_type tmp ; bson_bool_t tmp___0 ; int tmp___1 ; int64_t tmp___2 ; double tmp___3 ; { #line 480 tmp = bson_iterator_type(i); #line 480 switch ((unsigned int )tmp) { case 8U: #line 482 tmp___0 = bson_iterator_bool_raw(i); #line 482 return (tmp___0); case 16U: #line 484 tmp___1 = bson_iterator_int_raw(i); #line 484 return (tmp___1 != 0); case 18U: #line 486 tmp___2 = bson_iterator_long_raw(i); #line 486 return (tmp___2 != 0LL); case 1U: #line 488 tmp___3 = bson_iterator_double_raw(i); #line 488 return (tmp___3 != (double )0); case 10U: case 0U: #line 491 return (0); default: #line 493 return (1); } } } #line 497 "src/bson.c" char const *bson_iterator_string(bson_iterator const *i ) { bson_type tmp ; char const *tmp___0 ; { #line 498 tmp = bson_iterator_type(i); #line 498 switch ((unsigned int )tmp) { case 14U: case 2U: #line 501 tmp___0 = bson_iterator_value(i); #line 501 return (tmp___0 + 4); default: #line 503 return (""); } } } #line 507 "src/bson.c" int bson_iterator_string_len(bson_iterator const *i ) { int tmp ; { #line 508 tmp = bson_iterator_int_raw(i); #line 508 return (tmp); } } #line 511 "src/bson.c" char const *bson_iterator_code(bson_iterator const *i ) { bson_type tmp ; char const *tmp___0 ; char const *tmp___1 ; { #line 512 tmp = bson_iterator_type(i); #line 512 switch ((unsigned int )tmp) { case 13U: case 2U: #line 515 tmp___0 = bson_iterator_value(i); #line 515 return (tmp___0 + 4); case 15U: #line 517 tmp___1 = bson_iterator_value(i); #line 517 return (tmp___1 + 8); default: #line 519 return ((char const *)((void *)0)); } } } #line 523 "src/bson.c" void bson_iterator_code_scope(bson_iterator const *i , bson *scope ) { int code_len ; char const *tmp ; char const *tmp___0 ; bson_type tmp___1 ; { #line 524 tmp___1 = bson_iterator_type(i); #line 524 if ((unsigned int )tmp___1 == 15U) { #line 526 tmp = bson_iterator_value(i); #line 526 memcpy((void *)(& code_len), (void const *)(tmp + 4), (size_t )4); #line 527 tmp___0 = bson_iterator_value(i); #line 527 bson_init_data(scope, (char *)((void *)((tmp___0 + 8) + code_len))); #line 528 _bson_reset(scope); #line 529 scope->finished = 1; } else { #line 531 bson_empty(scope); } #line 533 return; } } #line 535 "src/bson.c" bson_date_t bson_iterator_date(bson_iterator const *i ) { int64_t tmp ; { #line 536 tmp = bson_iterator_long_raw(i); #line 536 return (tmp); } } #line 539 "src/bson.c" time_t bson_iterator_time_t(bson_iterator const *i ) { bson_date_t tmp ; { #line 540 tmp = bson_iterator_date(i); #line 540 return ((time_t )(tmp / 1000LL)); } } #line 543 "src/bson.c" int bson_iterator_bin_len(bson_iterator const *i ) { int tmp___0 ; int tmp___1 ; int tmp___2 ; char tmp___3 ; { #line 544 tmp___3 = bson_iterator_bin_type(i); #line 544 if ((int )tmp___3 == 2) { #line 544 tmp___0 = bson_iterator_int_raw(i); #line 544 tmp___2 = tmp___0 - 4; } else { #line 544 tmp___1 = bson_iterator_int_raw(i); #line 544 tmp___2 = tmp___1; } #line 544 return (tmp___2); } } #line 549 "src/bson.c" char bson_iterator_bin_type(bson_iterator const *i ) { char const *tmp ; { #line 550 tmp = bson_iterator_value(i); #line 550 return ((char )*(tmp + 4)); } } #line 553 "src/bson.c" char const *bson_iterator_bin_data(bson_iterator const *i ) { char const *tmp___0 ; char const *tmp___1 ; char const *tmp___2 ; char tmp___3 ; { #line 554 tmp___3 = bson_iterator_bin_type(i); #line 554 if ((int )tmp___3 == 2) { #line 554 tmp___0 = bson_iterator_value(i); #line 554 tmp___2 = tmp___0 + 9; } else { #line 554 tmp___1 = bson_iterator_value(i); #line 554 tmp___2 = tmp___1 + 5; } #line 554 return (tmp___2); } } #line 559 "src/bson.c" char const *bson_iterator_regex(bson_iterator const *i ) { char const *tmp ; { #line 560 tmp = bson_iterator_value(i); #line 560 return (tmp); } } #line 563 "src/bson.c" char const *bson_iterator_regex_opts(bson_iterator const *i ) { char const *p ; char const *tmp ; size_t tmp___0 ; { #line 564 tmp = bson_iterator_value(i); #line 564 p = tmp; #line 565 tmp___0 = strlen(p); #line 565 return ((p + tmp___0) + 1); } } #line 569 "src/bson.c" void bson_iterator_subobject(bson_iterator const *i , bson *sub ) { char const *tmp ; { #line 570 tmp = bson_iterator_value(i); #line 570 bson_init_data(sub, (char *)tmp); #line 571 _bson_reset(sub); #line 572 sub->finished = 1; #line 573 return; } } #line 575 "src/bson.c" void bson_iterator_subiterator(bson_iterator const *i , bson_iterator *sub ) { char const *tmp ; { #line 576 tmp = bson_iterator_value(i); #line 576 bson_iterator_from_buffer(sub, tmp); #line 577 return; } } #line 583 "src/bson.c" static void _bson_init_size(bson *b , int size ) { void *tmp ; { #line 584 if (size == 0) { #line 585 b->data = (char *)((void *)0); } else { #line 587 tmp = bson_malloc(size); #line 587 b->data = (char *)tmp; } #line 588 b->dataSize = size; #line 589 b->cur = b->data + 4; #line 590 _bson_reset(b); #line 591 return; } } #line 593 "src/bson.c" void bson_init(bson *b ) { { #line 594 _bson_init_size(b, (int )initialBufferSize); #line 595 return; } } #line 597 "src/bson.c" void bson_init_size(bson *b , int size ) { { #line 598 _bson_init_size(b, size); #line 599 return; } } #line 601 "src/bson.c" static void bson_append_byte(bson *b , char c ) { { #line 602 *(b->cur + 0) = c; #line 603 (b->cur) ++; #line 604 return; } } #line 606 "src/bson.c" static void bson_append(bson *b , void const *data___0 , int len ) { { #line 607 memcpy((void *)b->cur, data___0, (size_t )len); #line 608 b->cur += len; #line 609 return; } } #line 611 "src/bson.c" static void bson_append32(bson *b , void const *data___0 ) { { #line 612 memcpy((void *)b->cur, data___0, (size_t )4); #line 613 b->cur += 4; #line 614 return; } } #line 616 "src/bson.c" static void bson_append64(bson *b , void const *data___0 ) { { #line 617 memcpy((void *)b->cur, data___0, (size_t )8); #line 618 b->cur += 8; #line 619 return; } } #line 621 "src/bson.c" int bson_ensure_space(bson *b , int const bytesNeeded ) { int pos ; char *orig ; int new_size ; void *tmp ; { #line 622 pos = b->cur - b->data; #line 623 orig = b->data; #line 626 if (pos + (int )bytesNeeded <= b->dataSize) { #line 627 return (0); } #line 629 new_size = (int )(1.5 * (double )(b->dataSize + (int )bytesNeeded)); #line 631 if (new_size < b->dataSize) { #line 632 if (b->dataSize + (int )bytesNeeded < 2147483647) { #line 633 new_size = 2147483647; } else { #line 635 b->err = 1; #line 636 return (-1); } } #line 640 tmp = bson_realloc((void *)b->data, new_size); #line 640 b->data = (char *)tmp; #line 641 if (! b->data) { #line 642 bson_fatal_msg(! (! b->data), "realloc() failed"); } #line 644 b->dataSize = new_size; #line 645 b->cur += b->data - orig; #line 647 return (0); } } #line 650 "src/bson.c" int bson_finish(bson *b ) { int i ; int tmp ; { #line 653 if (b->err & 2) { #line 654 return (-1); } #line 656 if (! b->finished) { #line 657 tmp = bson_ensure_space(b, (int const )1); #line 657 if (tmp == -1) { #line 657 return (-1); } #line 658 bson_append_byte(b, (char)0); #line 659 i = b->cur - b->data; #line 660 memcpy((void *)b->data, (void const *)(& i), (size_t )4); #line 661 b->finished = 1; } #line 664 return (0); } } #line 667 "src/bson.c" void bson_destroy(bson *b ) { { #line 668 if (b) { #line 669 bson_free((void *)b->data); #line 670 b->err = 0; #line 671 b->data = (char *)0; #line 672 b->cur = (char *)0; #line 673 b->finished = 1; } #line 675 return; } } #line 677 "src/bson.c" static int bson_append_estart(bson *b , int type , char const *name , int const dataSize ) { int len ; size_t tmp ; int tmp___0 ; int tmp___1 ; { #line 678 tmp = strlen(name); #line 678 len = (int )(tmp + 1U); #line 680 if (b->finished) { #line 681 b->err |= 16; #line 682 return (-1); } #line 685 tmp___0 = bson_ensure_space(b, (int const )((1 + len) + (int )dataSize)); #line 685 if (tmp___0 == -1) { #line 686 return (-1); } #line 689 tmp___1 = bson_check_field_name(b, name, (int const )(len - 1)); #line 689 if (tmp___1 == -1) { #line 690 bson_builder_error(b); #line 691 return (-1); } #line 694 bson_append_byte(b, (char )type); #line 695 bson_append(b, (void const *)name, len); #line 696 return (0); } } #line 703 "src/bson.c" int bson_append_int(bson *b , char const *name , int const i ) { int tmp ; { #line 704 tmp = bson_append_estart(b, 16, name, (int const )4); #line 704 if (tmp == -1) { #line 705 return (-1); } #line 706 bson_append32(b, (void const *)(& i)); #line 707 return (0); } } #line 710 "src/bson.c" int bson_append_long(bson *b , char const *name , int64_t const i ) { int tmp ; { #line 711 tmp = bson_append_estart(b, 18, name, (int const )8); #line 711 if (tmp == -1) { #line 712 return (-1); } #line 713 bson_append64(b, (void const *)(& i)); #line 714 return (0); } } #line 717 "src/bson.c" int bson_append_double(bson *b , char const *name , double const d ) { int tmp ; { #line 718 tmp = bson_append_estart(b, 1, name, (int const )8); #line 718 if (tmp == -1) { #line 719 return (-1); } #line 720 bson_append64(b, (void const *)(& d)); #line 721 return (0); } } #line 724 "src/bson.c" int bson_append_bool(bson *b , char const *name , bson_bool_t const i ) { int tmp ; { #line 725 tmp = bson_append_estart(b, 8, name, (int const )1); #line 725 if (tmp == -1) { #line 726 return (-1); } #line 727 bson_append_byte(b, (char )(i != 0)); #line 728 return (0); } } #line 731 "src/bson.c" int bson_append_null(bson *b , char const *name ) { int tmp ; { #line 732 tmp = bson_append_estart(b, 10, name, (int const )0); #line 732 if (tmp == -1) { #line 733 return (-1); } #line 734 return (0); } } #line 737 "src/bson.c" int bson_append_undefined(bson *b , char const *name ) { int tmp ; { #line 738 tmp = bson_append_estart(b, 6, name, (int const )0); #line 738 if (tmp == -1) { #line 739 return (-1); } #line 740 return (0); } } #line 743 "src/bson.c" static int bson_append_string_base(bson *b , char const *name , char const *value , int len , bson_type type ) { int sl ; bson_bool_t tmp ; int tmp___0 ; { #line 746 sl = len + 1; #line 747 tmp = bson_check_string(b, value, (int const )(sl - 1)); #line 747 if (tmp == -1) { #line 748 return (-1); } #line 749 tmp___0 = bson_append_estart(b, (int )type, name, (int const )(4 + sl)); #line 749 if (tmp___0 == -1) { #line 750 return (-1); } #line 752 bson_append32(b, (void const *)(& sl)); #line 753 bson_append(b, (void const *)value, sl - 1); #line 754 bson_append(b, (void const *)"\000", 1); #line 755 return (0); } } #line 758 "src/bson.c" int bson_append_string(bson *b , char const *name , char const *value ) { size_t tmp ; int tmp___0 ; { #line 759 tmp = strlen(value); #line 759 tmp___0 = bson_append_string_base(b, name, value, (int )tmp, (bson_type )2); #line 759 return (tmp___0); } } #line 762 "src/bson.c" int bson_append_symbol(bson *b , char const *name , char const *value ) { size_t tmp ; int tmp___0 ; { #line 763 tmp = strlen(value); #line 763 tmp___0 = bson_append_string_base(b, name, value, (int )tmp, (bson_type )14); #line 763 return (tmp___0); } } #line 766 "src/bson.c" int bson_append_code(bson *b , char const *name , char const *value ) { size_t tmp ; int tmp___0 ; { #line 767 tmp = strlen(value); #line 767 tmp___0 = bson_append_string_base(b, name, value, (int )tmp, (bson_type )13); #line 767 return (tmp___0); } } #line 770 "src/bson.c" int bson_append_string_n(bson *b , char const *name , char const *value , int len ) { int tmp ; { #line 771 tmp = bson_append_string_base(b, name, value, len, (bson_type )2); #line 771 return (tmp); } } #line 774 "src/bson.c" int bson_append_symbol_n(bson *b , char const *name , char const *value , int len ) { int tmp ; { #line 775 tmp = bson_append_string_base(b, name, value, len, (bson_type )14); #line 775 return (tmp); } } #line 778 "src/bson.c" int bson_append_code_n(bson *b , char const *name , char const *value , int len ) { int tmp ; { #line 779 tmp = bson_append_string_base(b, name, value, len, (bson_type )13); #line 779 return (tmp); } } #line 782 "src/bson.c" int bson_append_code_w_scope_n(bson *b , char const *name , char const *code , int len , bson const *scope ) { int sl ; int size ; int tmp ; int tmp___0 ; int tmp___1 ; { #line 786 if (! scope) { #line 786 return (-1); } #line 787 sl = len + 1; #line 788 tmp = bson_size(scope); #line 788 size = (8 + sl) + tmp; #line 789 tmp___0 = bson_append_estart(b, 15, name, (int const )size); #line 789 if (tmp___0 == -1) { #line 790 return (-1); } #line 791 bson_append32(b, (void const *)(& size)); #line 792 bson_append32(b, (void const *)(& sl)); #line 793 bson_append(b, (void const *)code, sl); #line 794 tmp___1 = bson_size(scope); #line 794 bson_append(b, (void const *)scope->data, tmp___1); #line 795 return (0); } } #line 798 "src/bson.c" int bson_append_code_w_scope(bson *b , char const *name , char const *code , bson const *scope ) { size_t tmp ; int tmp___0 ; { #line 799 tmp = strlen(code); #line 799 tmp___0 = bson_append_code_w_scope_n(b, name, code, (int )tmp, scope); #line 799 return (tmp___0); } } #line 802 "src/bson.c" int bson_append_binary(bson *b , char const *name , char type , char const *str , int len ) { int subtwolen ; int tmp ; int tmp___0 ; { #line 803 if ((int )type == 2) { #line 804 subtwolen = len + 4; #line 805 tmp = bson_append_estart(b, 5, name, (int const )(9 + len)); #line 805 if (tmp == -1) { #line 806 return (-1); } #line 807 bson_append32(b, (void const *)(& subtwolen)); #line 808 bson_append_byte(b, type); #line 809 bson_append32(b, (void const *)(& len)); #line 810 bson_append(b, (void const *)str, len); } else { #line 812 tmp___0 = bson_append_estart(b, 5, name, (int const )(5 + len)); #line 812 if (tmp___0 == -1) { #line 813 return (-1); } #line 814 bson_append32(b, (void const *)(& len)); #line 815 bson_append_byte(b, type); #line 816 bson_append(b, (void const *)str, len); } #line 818 return (0); } } #line 821 "src/bson.c" int bson_append_oid(bson *b , char const *name , bson_oid_t const *oid ) { int tmp ; { #line 822 tmp = bson_append_estart(b, 7, name, (int const )12); #line 822 if (tmp == -1) { #line 823 return (-1); } #line 824 bson_append(b, (void const *)oid, 12); #line 825 return (0); } } #line 828 "src/bson.c" int bson_append_new_oid(bson *b , char const *name ) { bson_oid_t oid ; int tmp ; { #line 830 bson_oid_gen(& oid); #line 831 tmp = bson_append_oid(b, name, (bson_oid_t const *)(& oid)); #line 831 return (tmp); } } #line 834 "src/bson.c" int bson_append_regex(bson *b , char const *name , char const *pattern , char const *opts ) { int plen ; size_t tmp ; int olen ; size_t tmp___0 ; int tmp___1 ; bson_bool_t tmp___2 ; { #line 835 tmp = strlen(pattern); #line 835 plen = (int )(tmp + 1U); #line 836 tmp___0 = strlen(opts); #line 836 olen = (int )(tmp___0 + 1U); #line 837 tmp___1 = bson_append_estart(b, 11, name, (int const )(plen + olen)); #line 837 if (tmp___1 == -1) { #line 838 return (-1); } #line 839 tmp___2 = bson_check_string(b, pattern, (int const )(plen - 1)); #line 839 if (tmp___2 == -1) { #line 840 return (-1); } #line 841 bson_append(b, (void const *)pattern, plen); #line 842 bson_append(b, (void const *)opts, olen); #line 843 return (0); } } #line 846 "src/bson.c" int bson_append_bson(bson *b , char const *name , bson const *bson___0 ) { int tmp ; int tmp___0 ; int tmp___1 ; { #line 847 if (! bson___0) { #line 847 return (-1); } #line 848 tmp = bson_size(bson___0); #line 848 tmp___0 = bson_append_estart(b, 3, name, (int const )tmp); #line 848 if (tmp___0 == -1) { #line 849 return (-1); } #line 850 tmp___1 = bson_size(bson___0); #line 850 bson_append(b, (void const *)bson___0->data, tmp___1); #line 851 return (0); } } #line 854 "src/bson.c" int bson_append_element(bson *b , char const *name_or_null , bson_iterator const *elem ) { bson_iterator next ; int size ; int tmp ; int data_size ; char const *tmp___0 ; size_t tmp___1 ; char const *tmp___2 ; { #line 855 next = *elem; #line 858 bson_iterator_next(& next); #line 859 size = next.cur - (char const *)elem->cur; #line 861 if ((unsigned int )name_or_null == (unsigned int )((void *)0)) { #line 862 tmp = bson_ensure_space(b, (int const )size); #line 862 if (tmp == -1) { #line 863 return (-1); } #line 864 bson_append(b, (void const *)elem->cur, size); } else { #line 866 tmp___0 = bson_iterator_key(elem); #line 866 tmp___1 = strlen(tmp___0); #line 866 data_size = (int )((size_t )(size - 2) - tmp___1); #line 867 bson_append_estart(b, (int )*(elem->cur + 0), name_or_null, (int const )data_size); #line 868 tmp___2 = bson_iterator_value(elem); #line 868 bson_append(b, (void const *)tmp___2, data_size); } #line 871 return (0); } } #line 874 "src/bson.c" int bson_append_timestamp(bson *b , char const *name , bson_timestamp_t *ts ) { int tmp ; { #line 875 tmp = bson_append_estart(b, 17, name, (int const )8); #line 875 if (tmp == -1) { #line 875 return (-1); } #line 877 bson_append32(b, (void const *)(& ts->i)); #line 878 bson_append32(b, (void const *)(& ts->t)); #line 880 return (0); } } #line 883 "src/bson.c" int bson_append_timestamp2(bson *b , char const *name , int time___0 , int increment ) { int tmp ; { #line 884 tmp = bson_append_estart(b, 17, name, (int const )8); #line 884 if (tmp == -1) { #line 884 return (-1); } #line 886 bson_append32(b, (void const *)(& increment)); #line 887 bson_append32(b, (void const *)(& time___0)); #line 888 return (0); } } #line 891 "src/bson.c" int bson_append_date(bson *b , char const *name , bson_date_t millis ) { int tmp ; { #line 892 tmp = bson_append_estart(b, 9, name, (int const )8); #line 892 if (tmp == -1) { #line 892 return (-1); } #line 893 bson_append64(b, (void const *)(& millis)); #line 894 return (0); } } #line 897 "src/bson.c" int bson_append_time_t(bson *b , char const *name , time_t secs ) { int tmp ; { #line 898 tmp = bson_append_date(b, name, (bson_date_t )secs * 1000LL); #line 898 return (tmp); } } #line 901 "src/bson.c" int bson_append_start_object(bson *b , char const *name ) { int tmp ; int tmp___0 ; { #line 902 tmp = bson_append_estart(b, 3, name, (int const )5); #line 902 if (tmp == -1) { #line 902 return (-1); } #line 903 tmp___0 = b->stackPos; #line 903 (b->stackPos) ++; #line 903 b->stack[tmp___0] = b->cur - b->data; #line 904 bson_append32(b, (void const *)(& zero)); #line 905 return (0); } } #line 908 "src/bson.c" int bson_append_start_array(bson *b , char const *name ) { int tmp ; int tmp___0 ; { #line 909 tmp = bson_append_estart(b, 4, name, (int const )5); #line 909 if (tmp == -1) { #line 909 return (-1); } #line 910 tmp___0 = b->stackPos; #line 910 (b->stackPos) ++; #line 910 b->stack[tmp___0] = b->cur - b->data; #line 911 bson_append32(b, (void const *)(& zero)); #line 912 return (0); } } #line 915 "src/bson.c" int bson_append_finish_object(bson *b ) { char *start ; int i ; int tmp ; { #line 918 tmp = bson_ensure_space(b, (int const )1); #line 918 if (tmp == -1) { #line 918 return (-1); } #line 919 bson_append_byte(b, (char)0); #line 921 (b->stackPos) --; #line 921 start = b->data + b->stack[b->stackPos]; #line 922 i = b->cur - start; #line 923 memcpy((void *)start, (void const *)(& i), (size_t )4); #line 925 return (0); } } #line 928 "src/bson.c" double bson_int64_to_double(int64_t i64 ) { { #line 929 return ((double )i64); } } #line 932 "src/bson.c" int bson_append_finish_array(bson *b ) { int tmp ; { #line 933 tmp = bson_append_finish_object(b); #line 933 return (tmp); } } #line 938 "src/bson.c" static void (*err_handler)(char const *errmsg ) = (void (*)(char const *errmsg ))((void *)0); #line 940 "src/bson.c" bson_err_handler set_bson_err_handler(void (*func)(char const *errmsg ) ) { void (*old)(char const *errmsg ) ; { #line 941 old = err_handler; #line 942 err_handler = func; #line 943 return (old); } } #line 946 "src/bson.c" void bson_free(void *ptr ) { { #line 947 (*bson_free_func)(ptr); #line 948 return; } } #line 950 "src/bson.c" void *bson_malloc(int size ) { void *p ; { #line 952 p = (*bson_malloc_func)((size_t )size); #line 953 bson_fatal_msg(! (! p), "malloc() failed"); #line 954 return (p); } } #line 957 "src/bson.c" void *bson_realloc(void *ptr , int size ) { void *p ; { #line 959 p = (*bson_realloc_func)(ptr, (size_t )size); #line 960 bson_fatal_msg(! (! p), "realloc() failed"); #line 961 return (p); } } #line 964 "src/bson.c" static int _bson_errprintf(char const *format , ...) { va_list ap ; int ret ; { #line 967 __builtin_va_start(ap, format); #line 969 ret = vfprintf(& (*_imp___iob)[2], format, ap); #line 971 __builtin_va_end(ap); #line 973 return (ret); } } #line 982 "src/bson.c" void bson_builder_error(bson *b ) { { #line 983 if (err_handler) { #line 984 (*err_handler)("BSON error."); } #line 985 return; } } #line 987 "src/bson.c" void bson_fatal(int ok ) { { #line 988 bson_fatal_msg(ok, ""); #line 989 return; } } #line 991 "src/bson.c" void bson_fatal_msg(int ok , char const *msg ) { { #line 992 if (ok) { #line 993 return; } #line 995 if (err_handler) { #line 996 (*err_handler)(msg); } #line 999 (*bson_errprintf)("error: %s\n", msg); #line 1000 exit(-5); } } #line 1006 char const bson_numstrs[1000][4] ; #line 1008 "src/bson.c" void bson_numstr(char *str , int i ) { { #line 1009 if (i < 1000) { #line 1010 memcpy((void *)str, (void const *)(bson_numstrs[i]), (size_t )4); } else { #line 1012 (*bson_sprintf)(str, "%d", i); } #line 1013 return; } } #line 1015 "src/bson.c" void bson_swap_endian64(void *outp , void const *inp ) { char const *in ; char *out ; { #line 1016 in = (char const *)inp; #line 1017 out = (char *)outp; #line 1019 *(out + 0) = (char )*(in + 7); #line 1020 *(out + 1) = (char )*(in + 6); #line 1021 *(out + 2) = (char )*(in + 5); #line 1022 *(out + 3) = (char )*(in + 4); #line 1023 *(out + 4) = (char )*(in + 3); #line 1024 *(out + 5) = (char )*(in + 2); #line 1025 *(out + 6) = (char )*(in + 1); #line 1026 *(out + 7) = (char )*(in + 0); #line 1028 return; } } #line 1030 "src/bson.c" void bson_swap_endian32(void *outp , void const *inp ) { char const *in ; char *out ; { #line 1031 in = (char const *)inp; #line 1032 out = (char *)outp; #line 1034 *(out + 0) = (char )*(in + 3); #line 1035 *(out + 1) = (char )*(in + 2); #line 1036 *(out + 2) = (char )*(in + 1); #line 1037 *(out + 3) = (char )*(in + 0); #line 1038 return; } } #line 1 "numbers.o" #pragma merger("0","./numbers.i","") #line 17 "src/numbers.c" char const bson_numstrs[1000][4] = #line 17 "src/numbers.c" { { (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'1', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'2', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'3', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'4', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'5', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'6', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'7', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'8', (char const )'9', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'0', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'1', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'2', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'3', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'4', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'5', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'6', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'7', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'8', (char const )'9', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'0', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'1', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'2', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'3', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'4', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'5', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'6', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'7', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'8', (char const )'\000'}, { (char const )'9', (char const )'9', (char const )'9', (char const )'\000'}}; #line 1 "encoding.o" #pragma merger("0","./encoding.i","") #line 47 "src/encoding.c" static char const trailingBytesForUTF8[256] = #line 47 "src/encoding.c" { (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )0, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )1, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )2, (char const )3, (char const )3, (char const )3, (char const )3, (char const )3, (char const )3, (char const )3, (char const )3, (char const )4, (char const )4, (char const )4, (char const )4, (char const )5, (char const )5, (char const )5, (char const )5}; #line 70 "src/encoding.c" static int isLegalUTF8(unsigned char const *source , int length ) { unsigned char a ; unsigned char const *srcptr ; { #line 72 srcptr = source + length; #line 73 switch (length) { default: #line 75 return (0); case 4: #line 78 srcptr --; #line 78 a = (unsigned char )*srcptr; #line 78 if ((int )a < 128) { #line 78 return (0); } else #line 78 if ((int )a > 191) { #line 78 return (0); } case 3: #line 80 srcptr --; #line 80 a = (unsigned char )*srcptr; #line 80 if ((int )a < 128) { #line 80 return (0); } else #line 80 if ((int )a > 191) { #line 80 return (0); } case 2: #line 82 srcptr --; #line 82 a = (unsigned char )*srcptr; #line 82 if ((int )a > 191) { #line 82 return (0); } #line 83 switch ((int const )*source) { case 224: #line 86 if ((int )a < 160) { #line 86 return (0); } #line 87 break; case 240: #line 89 if ((int )a < 144) { #line 89 return (0); } #line 90 break; case 244: #line 92 if ((int )a > 143) { #line 92 return (0); } #line 93 break; default: #line 95 if ((int )a < 128) { #line 95 return (0); } } case 1: #line 98 if ((int const )*source >= 128) { #line 98 if ((int const )*source < 194) { #line 98 return (0); } } #line 99 if ((int const )*source > 244) { #line 99 return (0); } } #line 101 return (1); } } #line 105 "src/encoding.c" static int bson_string_is_db_ref(unsigned char const *string , int const length ) { int result ; { #line 106 result = 0; #line 108 if (length >= 4) { #line 109 if ((int const )*(string + 1) == 114) { #line 109 if ((int const )*(string + 2) == 101) { #line 109 if ((int const )*(string + 3) == 102) { #line 110 result = 1; } } } } else #line 112 if (length >= 3) { #line 113 if ((int const )*(string + 1) == 105) { #line 113 if ((int const )*(string + 2) == 100) { #line 114 result = 1; } else { #line 113 goto _L; } } else _L: /* CIL Label */ #line 115 if ((int const )*(string + 1) == 100) { #line 115 if ((int const )*(string + 2) == 98) { #line 116 result = 1; } } } #line 119 return (result); } } #line 122 "src/encoding.c" static int bson_validate_string(bson *b , unsigned char const *string , int const length , char const check_utf8 , char const check_dot , char const check_dollar ) { int position ; int sequence_length ; int tmp ; int tmp___0 ; { #line 126 position = 0; #line 127 sequence_length = 1; #line 129 if (check_dollar) { #line 129 if ((int const )*(string + 0) == 36) { #line 130 tmp = bson_string_is_db_ref(string, length); #line 130 if (! tmp) { #line 131 b->err |= 8; } } } #line 134 while (position < (int )length) { #line 135 if (check_dot) { #line 135 if ((int const )*(string + position) == 46) { #line 136 b->err |= 4; } } #line 139 if (check_utf8) { #line 140 sequence_length = (int )((int const )trailingBytesForUTF8[*(string + position)] + 1); #line 141 if (position + sequence_length > (int )length) { #line 142 b->err |= 2; #line 143 return (-1); } #line 145 tmp___0 = isLegalUTF8(string + position, sequence_length); #line 145 if (! tmp___0) { #line 146 b->err |= 2; #line 147 return (-1); } } #line 150 position += sequence_length; } #line 153 return (0); } } #line 157 "src/encoding.c" int bson_check_string(bson *b , char const *string , int const length ) { int tmp ; { #line 160 tmp = bson_validate_string(b, (unsigned char const *)string, length, (char const )1, (char const )0, (char const )0); #line 160 return (tmp); } } #line 163 "src/encoding.c" int bson_check_field_name(bson *b , char const *string , int const length ) { int tmp ; { #line 166 tmp = bson_validate_string(b, (unsigned char const *)string, length, (char const )1, (char const )1, (char const )1); #line 166 return (tmp); } }