Browse Source

Add NULL-safe lookup function

New lh_table_lookup_ex() method protects itself against null pointers
and invalid objects being passed in.
tags/json-c-0.10-20120530
Keith Derrick 13 years ago
parent
commit
4a2cd966f5
2 changed files with 26 additions and 3 deletions
  1. +14
    -3
      linkhash.c
  2. +12
    -0
      linkhash.h

+ 14
- 3
linkhash.c View File

@@ -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);
if(e) return e->v;
return NULL;
void *result;
lh_table_lookup_ex(t, k, &result);
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
- 0
linkhash.h View File

@@ -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.


Loading…
Cancel
Save