1/*	$NetBSD: value.c,v 1.2 2021/08/14 16:14:58 christos Exp $	*/
2
3/* value.c - routines for dealing with values */
4/* $OpenLDAP$ */
5/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
6 *
7 * Copyright 1998-2021 The OpenLDAP Foundation.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted only as authorized by the OpenLDAP
12 * Public License.
13 *
14 * A copy of this license is available in the file LICENSE in the
15 * top-level directory of the distribution or, alternatively, at
16 * <http://www.OpenLDAP.org/license.html>.
17 */
18/*
19 * Copyright (c) 1995 Regents of the University of Michigan.
20 * All rights reserved.
21 *
22 * Redistribution and use in source and binary forms are permitted
23 * provided that this notice is preserved and that due credit is given
24 * to the University of Michigan at Ann Arbor. The name of the University
25 * may not be used to endorse or promote products derived from this
26 * software without specific prior written permission. This software
27 * is provided ``as is'' without express or implied warranty.
28 */
29
30#include <sys/cdefs.h>
31__RCSID("$NetBSD: value.c,v 1.2 2021/08/14 16:14:58 christos Exp $");
32
33#include "portable.h"
34
35#include "lload.h"
36
37int
38value_add_one( BerVarray *vals, struct berval *addval )
39{
40    int n;
41    BerVarray v2;
42
43    if ( *vals == NULL ) {
44        *vals = (BerVarray)SLAP_MALLOC( 2 * sizeof(struct berval) );
45        if ( *vals == NULL ) {
46            Debug( LDAP_DEBUG_TRACE, "value_add_one: "
47                    "SLAP_MALLOC failed.\n" );
48            return LBER_ERROR_MEMORY;
49        }
50        n = 0;
51
52    } else {
53        for ( n = 0; !BER_BVISNULL( &(*vals)[n] ); n++ ) {
54            ; /* Empty */
55        }
56        *vals = (BerVarray)SLAP_REALLOC(
57                (char *)*vals, ( n + 2 ) * sizeof(struct berval) );
58        if ( *vals == NULL ) {
59            Debug( LDAP_DEBUG_TRACE, "value_add_one: "
60                    "SLAP_MALLOC failed.\n" );
61            return LBER_ERROR_MEMORY;
62        }
63    }
64
65    v2 = &(*vals)[n];
66    ber_dupbv( v2, addval );
67
68    v2++;
69    BER_BVZERO( v2 );
70
71    return LDAP_SUCCESS;
72}
73