MONGO_EXPORT void bson_oid_gen( bson_oid_t *oid ) { static int incr = 0; static int fuzz = 0; int i; time_t t = time( NULL ); int ti; if( sizeof (time_t) != 4 ) ti = (int) ( t & INT32_MAX ); if( oid_inc_func ) i = oid_inc_func(); else i = incr++; if ( !fuzz ) { if ( oid_fuzz_func ) fuzz = oid_fuzz_func(); else { srand( ( sizeof( time_t ) == 4 ) ? (int) t : ti); fuzz = rand(); } } bson_big_endian32( &oid->ints[0], ( sizeof( time_t ) == 4) ? (void *) &t : (void *) &ti ); oid->ints[1] = fuzz; bson_big_endian32( &oid->ints[2], &i ); }
MONGO_EXPORT time_t bson_oid_generated_time( bson_oid_t *oid ) { time_t out; if ( sizeof( time_t ) == 4 ) bson_big_endian32( &out, &oid->ints[0] ); else { int i; bson_big_endian32( &i, &oid->ints[0] ); out = (time_t) i; } return out; }
void bson_oid_gen(bson_oid_t* oid){ static int incr = 0; static int fuzz = 0; int i = incr++; /*TODO make atomic*/ int t = time(NULL); /* TODO rand sucks. find something better */ if (!fuzz){ srand(t); fuzz = rand(); } bson_big_endian32(&oid->ints[0], &t); oid->ints[1] = fuzz; bson_big_endian32(&oid->ints[2], &i); }
void bson_oid_gen( bson_oid_t *oid ) { static int incr = 0; static int fuzz = 0; int i; int t = time( NULL ); if( oid_inc_func ) i = oid_inc_func(); else i = incr++; if ( !fuzz ) { if ( oid_fuzz_func ) fuzz = oid_fuzz_func(); else { srand( t ); fuzz = rand(); } } bson_big_endian32( &oid->ints[0], &t ); oid->ints[1] = fuzz; bson_big_endian32( &oid->ints[2], &i ); }
/* Test custom increment and fuzz functions. */ int main() { bson_oid_t o; int res; char bigendian_i[4] = {0}; bson_set_oid_inc( increment ); bson_set_oid_fuzz( fuzz ); bson_oid_gen( &o ); memcpy(bigendian_i + 1, o.bytes + 9, 3); bson_big_endian32(&res, bigendian_i); ASSERT( !strncmp(o.bytes + 4, "hostid_and_pid", 5)); ASSERT( res == 1001 ); return 0; }
time_t bson_oid_generated_time( bson_oid_t *oid ) { time_t out; bson_big_endian32( &out, &oid->ints[0] ); return out; }