Add NULL-safe lookup function
New lh_table_lookup_ex() method protects itself against null pointers and invalid objects being passed in.
This commit is contained in:
17
linkhash.c
17
linkhash.c
@@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
|
* Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
|
||||||
* Michael Clark <michael@metaparadigm.com>
|
* Michael Clark <michael@metaparadigm.com>
|
||||||
|
* Copyright (c) 2009 Hewlett-Packard Development Company, L.P.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the MIT license. See COPYING for details.
|
* it under the terms of the MIT license. See COPYING for details.
|
||||||
@@ -174,11 +175,21 @@ struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k)
|
|||||||
|
|
||||||
const void* lh_table_lookup(struct lh_table *t, const void *k)
|
const void* lh_table_lookup(struct lh_table *t, const void *k)
|
||||||
{
|
{
|
||||||
struct lh_entry *e = lh_table_lookup_entry(t, k);
|
void *result;
|
||||||
if(e) return e->v;
|
lh_table_lookup_ex(t, k, &result);
|
||||||
return NULL;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_bool lh_table_lookup_ex(struct lh_table* t, const void* k, void **v)
|
||||||
|
{
|
||||||
|
struct lh_entry *e = lh_table_lookup_entry(t, k);
|
||||||
|
if (e != NULL) {
|
||||||
|
if (v != NULL) *v = (void *)e->v;
|
||||||
|
return TRUE; /* key found */
|
||||||
|
}
|
||||||
|
if (v != NULL) *v = NULL;
|
||||||
|
return FALSE; /* key not found */
|
||||||
|
}
|
||||||
|
|
||||||
int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e)
|
int lh_table_delete_entry(struct lh_table *t, struct lh_entry *e)
|
||||||
{
|
{
|
||||||
|
|||||||
12
linkhash.h
12
linkhash.h
@@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
|
* Copyright (c) 2004, 2005 Metaparadigm Pte. Ltd.
|
||||||
* Michael Clark <michael@metaparadigm.com>
|
* Michael Clark <michael@metaparadigm.com>
|
||||||
|
* Copyright (c) 2009 Hewlett-Packard Development Company, L.P.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the MIT license. See COPYING for details.
|
* it under the terms of the MIT license. See COPYING for details.
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
#ifndef _linkhash_h_
|
#ifndef _linkhash_h_
|
||||||
#define _linkhash_h_
|
#define _linkhash_h_
|
||||||
|
|
||||||
|
#include "json_object.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -241,9 +244,18 @@ extern struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k)
|
|||||||
* @param t the table to lookup
|
* @param t the table to lookup
|
||||||
* @param k a pointer to the key to lookup
|
* @param k a pointer to the key to lookup
|
||||||
* @return a pointer to the found value or NULL if it does not exist.
|
* @return a pointer to the found value or NULL if it does not exist.
|
||||||
|
* @deprecated Use lh_table_lookup_ex instead.
|
||||||
*/
|
*/
|
||||||
extern const void* lh_table_lookup(struct lh_table *t, const void *k);
|
extern const void* lh_table_lookup(struct lh_table *t, const void *k);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lookup a record in the table
|
||||||
|
* @param t the table to lookup
|
||||||
|
* @param k a pointer to the key to lookup
|
||||||
|
* @param v a pointer to a where to store the found value (set to NULL if it doesn't exist).
|
||||||
|
* @return whether or not the key was found
|
||||||
|
*/
|
||||||
|
extern json_bool lh_table_lookup_ex(struct lh_table *t, const void *k, void **v);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a record from the table.
|
* Delete a record from the table.
|
||||||
|
|||||||
Reference in New Issue
Block a user