Home | History | Annotate | Line # | Download | only in librewrite
params.c revision 1.1.1.2
      1 /*	$NetBSD: params.c,v 1.1.1.2 2010/03/08 02:14:20 lukem Exp $	*/
      2 
      3 /* OpenLDAP: pkg/ldap/libraries/librewrite/params.c,v 1.9.2.5 2009/01/22 00:00:58 kurt Exp */
      4 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
      5  *
      6  * Copyright 2000-2009 The OpenLDAP Foundation.
      7  * All rights reserved.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted only as authorized by the OpenLDAP
     11  * Public License.
     12  *
     13  * A copy of this license is available in the file LICENSE in the
     14  * top-level directory of the distribution or, alternatively, at
     15  * <http://www.OpenLDAP.org/license.html>.
     16  */
     17 /* ACKNOWLEDGEMENT:
     18  * This work was initially developed by Pierangelo Masarati for
     19  * inclusion in OpenLDAP Software.
     20  */
     21 
     22 #include <portable.h>
     23 
     24 #include "rewrite-int.h"
     25 
     26 /*
     27  * Defines and inits a variable with global scope
     28  */
     29 int
     30 rewrite_param_set(
     31 		struct rewrite_info *info,
     32 		const char *name,
     33 		const char *value
     34 )
     35 {
     36 	struct rewrite_var *var;
     37 	int rc = REWRITE_SUCCESS;
     38 
     39 	assert( info != NULL );
     40 	assert( name != NULL );
     41 	assert( value != NULL );
     42 
     43 #ifdef USE_REWRITE_LDAP_PVT_THREADS
     44 	ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
     45 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     46 
     47 	var = rewrite_var_find( info->li_params, name );
     48 	if ( var != NULL ) {
     49 		assert( var->lv_value.bv_val != NULL );
     50 		free( var->lv_value.bv_val );
     51 		var->lv_value.bv_val = strdup( value );
     52 		var->lv_value.bv_len = strlen( value );
     53 
     54 	} else {
     55 		var = rewrite_var_insert( &info->li_params, name, value );
     56 	}
     57 
     58 	if ( var == NULL || var->lv_value.bv_val == NULL ) {
     59 		rc = REWRITE_ERR;
     60 	}
     61 
     62 #ifdef USE_REWRITE_LDAP_PVT_THREADS
     63 	ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
     64 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     65 
     66 	return rc;
     67 }
     68 
     69 /*
     70  * Gets a var with global scope
     71  */
     72 int
     73 rewrite_param_get(
     74 		struct rewrite_info *info,
     75 		const char *name,
     76 		struct berval *value
     77 )
     78 {
     79 	struct rewrite_var *var;
     80 	int rc = REWRITE_SUCCESS;
     81 
     82 	assert( info != NULL );
     83 	assert( name != NULL );
     84 	assert( value != NULL );
     85 
     86 	value->bv_val = NULL;
     87 	value->bv_len = 0;
     88 
     89 #ifdef USE_REWRITE_LDAP_PVT_THREADS
     90 	ldap_pvt_thread_rdwr_rlock( &info->li_params_mutex );
     91 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
     92 
     93 	var = rewrite_var_find( info->li_params, name );
     94 	if ( var != NULL ) {
     95 		value->bv_val = strdup( var->lv_value.bv_val );
     96 		value->bv_len = var->lv_value.bv_len;
     97 	}
     98 
     99 	if ( var == NULL || value->bv_val == NULL ) {
    100 		rc = REWRITE_ERR;
    101 	}
    102 
    103 #ifdef USE_REWRITE_LDAP_PVT_THREADS
    104 	ldap_pvt_thread_rdwr_runlock( &info->li_params_mutex );
    105 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    106 
    107 	return REWRITE_SUCCESS;
    108 }
    109 
    110 static void
    111 rewrite_param_free(
    112 		void *tmp
    113 )
    114 {
    115 	struct rewrite_var *var = ( struct rewrite_var * )tmp;
    116 	assert( var != NULL );
    117 
    118 	assert( var->lv_name != NULL );
    119 	assert( var->lv_value.bv_val != NULL );
    120 
    121 	free( var->lv_name );
    122 	free( var->lv_value.bv_val );
    123 	free( var );
    124 }
    125 
    126 /*
    127  * Destroys the parameter tree
    128  */
    129 int
    130 rewrite_param_destroy(
    131 		struct rewrite_info *info
    132 )
    133 {
    134 	int count;
    135 
    136 	assert( info != NULL );
    137 
    138 #ifdef USE_REWRITE_LDAP_PVT_THREADS
    139 	ldap_pvt_thread_rdwr_wlock( &info->li_params_mutex );
    140 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    141 
    142 	count = avl_free( info->li_params, rewrite_param_free );
    143 	info->li_params = NULL;
    144 
    145 #ifdef USE_REWRITE_LDAP_PVT_THREADS
    146 	ldap_pvt_thread_rdwr_wunlock( &info->li_params_mutex );
    147 #endif /* USE_REWRITE_LDAP_PVT_THREADS */
    148 
    149 	return REWRITE_SUCCESS;
    150 }
    151 
    152