bson_buffer * bson_append_regex( bson_buffer * b , const char * name , const char * pattern, const char * opts ){ const int plen = strlen(pattern)+1; const int olen = strlen(opts)+1; if ( ! bson_append_estart( b , bson_regex , name , plen + olen ) ) return 0; if ( ! bson_check_string( b, pattern, plen - 1 ) ) return 0; bson_append( b , pattern , plen ); bson_append( b , opts , olen ); return b; }
bson_buffer * bson_append_string_base( bson_buffer * b , const char * name , const char * value , int len , bson_type type){ int sl = len + 1; if ( ! bson_append_estart( b , type , name , 4 + sl ) ) return 0; if ( ! bson_check_string( b, value, sl - 1 ) ) return 0; bson_append32( b , &sl); bson_append( b , value , sl - 1 ); bson_append( b , "\0" , 1 ); return b; }
int bson_append_regex( bson *b, const char *name, const char *pattern, const char *opts ) { const int plen = strlen( pattern )+1; const int olen = strlen( opts )+1; if ( bson_append_estart( b, BSON_REGEX, name, plen + olen ) == BSON_ERROR ) return BSON_ERROR; if ( bson_check_string( b, pattern, plen - 1 ) == BSON_ERROR ) return BSON_ERROR; bson_append( b , pattern , plen ); bson_append( b , opts , olen ); return BSON_OK; }
MONGO_EXPORT int bson_append_regex( bson *b, const char *name, const char *pattern, const char *opts ) { const size_t plen = strlen( pattern )+1; const size_t olen = strlen( opts )+1; check_mongo_object( (void*)b ); if ( bson_append_estart( b, BSON_REGEX, name, plen + olen ) == BSON_ERROR ) return BSON_ERROR; if ( bson_check_string( b, pattern, plen - 1 ) == BSON_ERROR ) return BSON_ERROR; bson_append( b , pattern , plen ); bson_append( b , opts , olen ); return BSON_OK; }
int bson_append_string_base( bson *b, const char *name, const char *value, int len, bson_type type ) { int sl = len + 1; if ( bson_check_string( b, ( const char * )value, sl - 1 ) == BSON_ERROR ) return BSON_ERROR; if ( bson_append_estart( b, type, name, 4 + sl ) == BSON_ERROR ) { return BSON_ERROR; } bson_append32( b , &sl ); bson_append( b , value , sl - 1 ); bson_append( b , "\0" , 1 ); return BSON_OK; }
static int bson_append_string_base( bson *b, const char *name, const char *value, size_t len, bson_type type ) { size_t sl = len + 1; if ( sl > INT32_MAX ) { b->err = BSON_SIZE_OVERFLOW; /* string too long */ return BSON_ERROR; } if ( bson_check_string( b, ( const char * )value, sl - 1 ) == BSON_ERROR ) return BSON_ERROR; if ( bson_append_estart( b, type, name, 4 + sl ) == BSON_ERROR ) { return BSON_ERROR; } bson_append32_as_int( b , ( int )sl ); bson_append( b , value , sl - 1 ); bson_append( b , "\0" , 1 ); return BSON_OK; }