예제 #1
0
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 );
}
예제 #2
0
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;
}
예제 #3
0
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);
}
예제 #4
0
파일: bson.c 프로젝트: halayudha/kdengine
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 );
}
예제 #5
0
/* 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;
}
예제 #6
0
파일: bson.c 프로젝트: halayudha/kdengine
time_t bson_oid_generated_time( bson_oid_t *oid ) {
    time_t out;
    bson_big_endian32( &out, &oid->ints[0] );

    return out;
}