X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foidm.c;h=f8976077c0362f186c045d99e5cb1af482b1d913;hb=12d5c6bba210de4a03363567be1c19a37f8e806b;hp=d779496a412177901ae6b5f9ab5edfbfa49de0c0;hpb=6ed15e335069a6dd7cd30971066d6be69a4b1e42;p=openldap diff --git a/servers/slapd/oidm.c b/servers/slapd/oidm.c index d779496a41..f8976077c0 100644 --- a/servers/slapd/oidm.c +++ b/servers/slapd/oidm.c @@ -1,8 +1,17 @@ -/* schemaparse.c - routines to parse config file objectclass definitions */ +/* oidm.c - object identifier macro routines */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #include "portable.h" @@ -15,7 +24,8 @@ #include "slap.h" -static OidMacro *om_list = NULL; +static LDAP_SLIST_HEAD(OidMacroList, slap_oid_macro) om_list + = LDAP_SLIST_HEAD_INITIALIZER(om_list); /* Replace an OID Macro invocation with its full numeric OID. * If the macro is used with "macroname:suffix" append ".suffix" @@ -31,7 +41,7 @@ oidm_find(char *oid) return oid; } - for (om = om_list; om; om=om->som_next) { + LDAP_SLIST_FOREACH( om, &om_list, som_next ) { char **names = om->som_names; if( names == NULL ) { @@ -43,8 +53,18 @@ oidm_find(char *oid) if( pos ) { int suflen = strlen(oid + pos); - char *tmp = ch_malloc( om->som_oid.bv_len + char *tmp = SLAP_MALLOC( om->som_oid.bv_len + suflen + 1); + if( tmp == NULL ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, ERR, + "oidm_find: SLAP_MALLOC failed", 0, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "oidm_find: SLAP_MALLOC failed", 0, 0, 0 ); +#endif + return NULL; + } strcpy(tmp, om->som_oid.bv_val); if( suflen ) { suflen = om->som_oid.bv_len; @@ -61,13 +81,15 @@ oidm_find(char *oid) void oidm_destroy() { - OidMacro *om, *n; + OidMacro *om; + while( !LDAP_SLIST_EMPTY( &om_list )) { + om = LDAP_SLIST_FIRST( &om_list ); + LDAP_SLIST_REMOVE_HEAD( &om_list, som_next ); - for (om = om_list; om; om = n) { - n = om->som_next; - charray_free(om->som_names); + ldap_charray_free(om->som_names); free(om->som_oid.bv_val); free(om); + } } @@ -76,8 +98,7 @@ parse_oidm( const char *fname, int lineno, int argc, - char **argv -) + char **argv ) { char *oid; OidMacro *om; @@ -98,10 +119,19 @@ usage: fprintf( stderr, "\tObjectIdentifier \n"); return 1; } - om = (OidMacro *) ch_malloc( sizeof(OidMacro) ); + om = (OidMacro *) SLAP_MALLOC( sizeof(OidMacro) ); + if( om == NULL ) { +#ifdef NEW_LOGGING + LDAP_LOG( OPERATION, ERR, "parse_oidm: SLAP_MALLOC failed", 0, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, "parse_oidm: SLAP_MALLOC failed", 0, 0, 0 ); +#endif + return 1; + } + LDAP_SLIST_NEXT( om, som_next ) = NULL; om->som_names = NULL; - charray_add( &om->som_names, argv[1] ); + ldap_charray_add( &om->som_names, argv[1] ); om->som_oid.bv_val = oidm_find( argv[2] ); if (!om->som_oid.bv_val) { @@ -115,8 +145,7 @@ usage: fprintf( stderr, "\tObjectIdentifier \n"); } om->som_oid.bv_len = strlen( om->som_oid.bv_val ); - om->som_next = om_list; - om_list = om; + LDAP_SLIST_INSERT_HEAD( &om_list, om, som_next ); return 0; }