mhonek / rpms / openldap

Forked from rpms/openldap 3 years ago
Clone
Blob Blame History Raw
--- openldap-2.4.18/servers/slapd/back-ldif/ldif.c.orig	2009-09-24 09:46:01.000000000 +0200
+++ openldap-2.4.18/servers/slapd/back-ldif/ldif.c	2009-09-24 13:40:07.000000000 +0200
@@ -593,9 +593,7 @@ typedef struct bvlist {
 	char *trunc;	/* filename was truncated here */
 	int  inum;		/* num from "attr={num}" in filename, or INT_MIN */
 	char savech;	/* original char at *trunc */
-	char fname;		/* variable length array BVL_NAME(bvl) = &fname */
-#	define BVL_NAME(bvl) ((char *) (bvl) + offsetof(bvlist, fname))
-#	define BVL_SIZE(namelen) (sizeof(bvlist) + (namelen))
+	char *fname;		/* variable length array */
 } bvlist;
 
 static int
@@ -709,17 +707,18 @@ ldif_readdir(
 			if ( *fname_maxlenp < fname_len )
 				*fname_maxlenp = fname_len;
 
-			bvl = SLAP_MALLOC( BVL_SIZE( fname_len ) );
+			bvl = SLAP_MALLOC( sizeof( bvlist ) );
+			bvl->fname = SLAP_MALLOC( fname_len+1 );
 			if ( bvl == NULL ) {
 				rc = LDAP_OTHER;
 				save_errno = errno;
 				break;
 			}
-			strcpy( BVL_NAME( bvl ), dir->d_name );
+			strcpy( bvl->fname, dir->d_name );
 
 			/* Make it sortable by ("attr=val" or <preceding {num}, num>) */
-			trunc = BVL_NAME( bvl ) + fname_len - STRLENOF( LDIF );
-			if ( (idxp = strchr( BVL_NAME( bvl ) + 2, IX_FSL )) != NULL &&
+			trunc = bvl->fname + fname_len - STRLENOF( LDIF );
+			if ( (idxp = strchr( bvl->fname + 2, IX_FSL )) != NULL &&
 				 (endp = strchr( ++idxp, IX_FSR )) != NULL && endp > idxp &&
 				 (eq_unsafe || idxp[-2] == '=' || endp + 1 == trunc) )
 			{
@@ -737,7 +736,7 @@ ldif_readdir(
 			*trunc = '\0';
 
 			for ( prev = listp; (ptr = *prev) != NULL; prev = &ptr->next ) {
-				int cmp = strcmp( BVL_NAME( bvl ), BVL_NAME( ptr ));
+				int cmp = strcmp( bvl->fname, ptr->fname );
 				if ( cmp < 0 || (cmp == 0 && bvl->inum < ptr->inum) )
 					break;
 			}
@@ -826,7 +825,7 @@ ldif_search_entry(
 
 				if ( rc == LDAP_SUCCESS ) {
 					*ptr->trunc = ptr->savech;
-					FILL_PATH( &fpath, dir_end, BVL_NAME( ptr ));
+					FILL_PATH( &fpath, dir_end, ptr->fname );
 
 					rc = ldif_read_entry( op, fpath.bv_val, &dn, &ndn,
 						&e, text );