]> git.sur5r.net Git - openldap/commitdiff
Use time_t not char * to represent timestamps.
authorKurt Zeilenga <kurt@openldap.org>
Sun, 9 Sep 2001 21:16:17 +0000 (21:16 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Sun, 9 Sep 2001 21:16:17 +0000 (21:16 +0000)
Fixes billionth second since epoch bug.

servers/slurpd/re.c
servers/slurpd/ri.c
servers/slurpd/rq.c
servers/slurpd/slurp.h
servers/slurpd/st.c

index b5195b2f5be1b6d623cb512b9f4684f6e6ec86a8..1f351a27535718a8afbe993da3fa1192e64c5d10 100644 (file)
@@ -88,7 +88,6 @@ Re_free(
 
     ldap_pvt_thread_mutex_destroy( &re->re_mutex );
 
-    ch_free( re->re_timestamp );
     if (( rh = re->re_replicas ) != NULL ) {
        for ( i = 0; rh[ i ].rh_hostname != NULL; i++ ) {
            free( rh[ i ].rh_hostname );
@@ -180,7 +179,7 @@ Re_parse(
                /* there was a sequence number */
                *p++ = '\0';
            }
-           re->re_timestamp = strdup( value );
+           re->re_timestamp = atol( value );
            if ( p != NULL && isdigit( (unsigned char) *p )) {
                re->re_seq = atoi( p );
            }
@@ -463,7 +462,7 @@ Re_dump(
     }
     fprintf( fp, "Re_dump: ******\n" );
     fprintf( fp, "re_refcnt: %d\n", re->re_refcnt );
-    fprintf( fp, "re_timestamp: %s\n", re->re_timestamp );
+    fprintf( fp, "re_timestamp: %ld\n", (long) re->re_timestamp );
     fprintf( fp, "re_seq: %d\n", re->re_seq );
     for ( i = 0; re->re_replicas && re->re_replicas[ i ].rh_hostname != NULL;
                i++ ) {
@@ -549,7 +548,7 @@ Re_write(
            }
        }
     }
-    if ( fprintf( fp, "time: %s.%d\n", re->re_timestamp, re->re_seq ) < 0 ) {
+    if ( fprintf( fp, "time: %ld.%d\n", (long) re->re_timestamp, re->re_seq ) < 0 ) {
        rc = -1;
        goto bad;
     }
@@ -713,7 +712,7 @@ Re_init(
 
     /* Initialize private data */
    (*re)->re_refcnt = sglob->num_replicas;
-   (*re)->re_timestamp = NULL;
+   (*re)->re_timestamp = (time_t) 0L;
    (*re)->re_replicas = NULL;
    (*re)->re_dn = NULL;
    (*re)->re_changetype = 0;
index 86a32b716af7a2579f4266aa7b33a784efec685b..3bfaab5870e06ee5ea674dbfc7e58780590cb15a 100644 (file)
@@ -238,12 +238,12 @@ isnew(
     Re *re
 )
 {
-    int        x;
+    long x;
     int        ret;
 
     /* Lock the St struct to avoid a race */
     sglob->st->st_lock( sglob->st );
-    x = strcmp( re->re_timestamp, ri->ri_stel->last );
+    x = re->re_timestamp - ri->ri_stel->last;
     if ( x > 0 ) {
        /* re timestamp is newer */
        ret = 1;
index dbbb5212a685a5e7b531328a95f34ac776a40e55..efd17426228b166b1c8397dd696f36a2a6126deb 100644 (file)
@@ -187,7 +187,7 @@ Rq_add(
 
     /* set the sequence number */
     re->re_seq = 0;
-    if ( !wasempty && !strcmp(rq->rq_tail->re_timestamp, re->re_timestamp )) {
+    if ( !wasempty && ( rq->rq_tail->re_timestamp == re->re_timestamp )) {
        /*
         * Our new re has the same timestamp as the tail's timestamp.
         * Increment the seq number in the tail and use it as our seq number.
index 6dcd42554f001182394137ce000cbaa1ddc49414..c5c405c2e35e533c4d3e908aea00aa5dad2c39c4 100644 (file)
@@ -255,7 +255,7 @@ struct re {
     ldap_pvt_thread_mutex_t
                re_mutex;               /* mutex for this Re */
     int                re_refcnt;              /* ref count, 0 = done */
-    char       *re_timestamp;          /* timestamp of this re */
+    time_t     re_timestamp;           /* timestamp of this re */
     int                re_seq;                 /* sequence number */
     Rh         *re_replicas;           /* array of replica info */
     char       *re_dn;                 /* dn of entry being modified */
@@ -325,7 +325,7 @@ struct rq {
 typedef struct stel {
     char       *hostname;              /* host name of replica */
     int                port;                   /* port number of replica */
-    char       last[ 64 ];             /* timestamp of last successful repl */
+    time_t     last;                   /* timestamp of last successful repl */
     int                seq;                    /* Sequence number of last repl */
 } Stel;
 
index 032705f86583a715ce2e5072dcbbb2813f365a64..5d2be8d2fac6851d8eb20b0fd594147690866c40 100644 (file)
@@ -67,7 +67,7 @@ St_add(
 
     st->st_data[ ind ]->hostname = strdup( ri->ri_hostname );
     st->st_data[ ind ]->port = ri->ri_port;
-    memset( st->st_data[ ind ]->last, '\0', sizeof( st->st_data[ ind ]->last ))
+    st->st_data[ ind ]->last = 0
     st->st_data[ ind ]->seq = 0;
 
     ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
@@ -114,8 +114,9 @@ St_write (
     fseek( st->st_fp, 0L, 0 );
     for ( i = 0; i < st->st_nreplicas; i++ ) {
        stel = st->st_data[ i ];
-       fprintf( st->st_fp, "%s:%d:%s:%d\n", stel->hostname, stel->port,
-               stel->last, stel->seq );
+       fprintf( st->st_fp, "%s:%d:%ld:%d\n",
+               stel->hostname, stel->port,
+               (long) stel->last, stel->seq );
     }
     fflush( st->st_fp );
 
@@ -142,7 +143,7 @@ St_update(
     }
 
     ldap_pvt_thread_mutex_lock( &(st->st_mutex ));
-    strcpy( stel->last, re->re_timestamp );
+    stel->last = re->re_timestamp;
     stel->seq = re->re_seq;
     ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
     return 0;
@@ -220,7 +221,7 @@ St_read(
            if ( !strcmp( hostname, sglob->st->st_data[ i ]->hostname ) &&
                    atoi( port ) == sglob->st->st_data[ i ]->port ) {
                found = 1;
-               strcpy( sglob->st->st_data[ i ]->last, timestamp );
+               sglob->st->st_data[ i ]->last = atol( timestamp );
                sglob->st->st_data[ i ]->seq = atoi( seq );
                break;
            }