]> git.sur5r.net Git - openldap/commitdiff
add slap_uuidstr_from_normalized() - any better place to put this ? liblutils ?
authorJong Hyuk Choi <jongchoi@openldap.org>
Wed, 19 Nov 2003 00:45:20 +0000 (00:45 +0000)
committerJong Hyuk Choi <jongchoi@openldap.org>
Wed, 19 Nov 2003 00:45:20 +0000 (00:45 +0000)
servers/slapd/syncrepl.c

index 487c06e6fef199c433a40706db45cf95ffe556d1..22b8d11a22cc62d269ec5156b82d6067317712ff 100644 (file)
@@ -1768,6 +1768,63 @@ slap_create_syncrepl_entry(
        return e;
 }
 
+struct berval *
+slap_uuidstr_from_normalized(
+       struct berval* uuidstr,
+       struct berval* normalized,
+       void *ctx )
+{
+       struct berval *new;
+       unsigned char nibble;
+       int i, d = 0;
+
+       if ( normalized == NULL )
+               return NULL;
+
+       if ( normalized->bv_len != 16 ) {
+               return NULL;
+       }
+
+       if ( uuidstr ) {
+               new = uuidstr;
+       } else {
+               new = (struct berval *)sl_malloc( sizeof(struct berval), ctx );
+       }
+
+       new->bv_len = 36;
+
+       if (( new->bv_val = sl_malloc( new->bv_len + 1, ctx )) == NULL) {
+               if ( !uuidstr )
+                       sl_free( new, ctx );
+               return NULL;
+       }
+
+       for ( i = 0; i < 16; i++ ) {
+               if ( i == 4 || i == 6 || i == 8 || i == 10 ) {
+                       new->bv_val[(i<<1)+d] = '-';
+                       d += 1;
+               }
+
+               nibble = (normalized->bv_val[i] >> 4) & 0xF;
+               if ( nibble < 10 ) {
+                       new->bv_val[(i<<1)+d] = nibble + '0';
+               } else {
+                       new->bv_val[(i<<1)+d] = nibble - 10 + 'a';
+               }
+
+               nibble = (normalized->bv_val[i]) & 0xF;
+               if ( nibble < 10 ) {
+                       new->bv_val[(i<<1)+d+1] = nibble + '0';
+               } else {
+                       new->bv_val[(i<<1)+d+1] = nibble - 10 + 'a';
+               }
+       }
+
+       new->bv_val[new->bv_len] = '\0';
+
+       return new;
+}
+
 static void
 avl_ber_bvfree( void *bv )
 {