Merge portable proplib 0.6.3.
This commit is contained in:
parent
84745dfe33
commit
fe922ace4c
2
3RDPARTY
2
3RDPARTY
@ -17,5 +17,5 @@ internal use in the code:
|
|||||||
|
|
||||||
- libfetch-2.34 from NetBSD (pkgsrc/net/libfetch): lib/fetch
|
- libfetch-2.34 from NetBSD (pkgsrc/net/libfetch): lib/fetch
|
||||||
|
|
||||||
- portableproplib-0.6.2 (lib/portableproplib) from
|
- portableproplib-0.6.3 (lib/portableproplib) from
|
||||||
http://code.google.com/p/portableproplib
|
http://code.google.com/p/portableproplib
|
||||||
|
2
NEWS
2
NEWS
@ -1,5 +1,7 @@
|
|||||||
xbps-0.21 (???):
|
xbps-0.21 (???):
|
||||||
|
|
||||||
|
* Imported Portable proplib 0.6.3 from http://code.google.com/p/portableproplib.
|
||||||
|
|
||||||
* xbps-query(8): a full dependency tree can now be shown in the
|
* xbps-query(8): a full dependency tree can now be shown in the
|
||||||
show-deps mode, by specifying -x twice (--show-deps), e.g:
|
show-deps mode, by specifying -x twice (--show-deps), e.g:
|
||||||
|
|
||||||
|
1
configure
vendored
1
configure
vendored
@ -495,6 +495,7 @@ if $XCC -lprop _$func.c -o _$func 2>/dev/null; then
|
|||||||
else
|
else
|
||||||
PROPLIB=no
|
PROPLIB=no
|
||||||
echo "CPPFLAGS += -I\$(TOPDIR)/lib/portableproplib" >>$CONFIG_MK
|
echo "CPPFLAGS += -I\$(TOPDIR)/lib/portableproplib" >>$CONFIG_MK
|
||||||
|
echo "CPPFLAGS += -I\$(TOPDIR)/lib/portableproplib/prop" >>$CONFIG_MK
|
||||||
echo "LDFLAGS += -lpthread" >>$CONFIG_MK
|
echo "LDFLAGS += -lpthread" >>$CONFIG_MK
|
||||||
echo "STATIC_LIBS += -lpthread" >>$CONFIG_MK
|
echo "STATIC_LIBS += -lpthread" >>$CONFIG_MK
|
||||||
fi
|
fi
|
||||||
|
@ -37,7 +37,10 @@
|
|||||||
|
|
||||||
typedef struct _prop_array *prop_array_t;
|
typedef struct _prop_array *prop_array_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_array_t prop_array_create(void);
|
prop_array_t prop_array_create(void);
|
||||||
prop_array_t prop_array_create_with_capacity(unsigned int);
|
prop_array_t prop_array_create_with_capacity(unsigned int);
|
||||||
|
|
||||||
@ -140,6 +143,8 @@ bool prop_array_set_cstring_nocopy(prop_array_t,
|
|||||||
const char *);
|
const char *);
|
||||||
bool prop_array_add_and_rel(prop_array_t, prop_object_t);
|
bool prop_array_add_and_rel(prop_array_t, prop_object_t);
|
||||||
|
|
||||||
__END_DECLS
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_ARRAY_H_ */
|
#endif /* _PROPLIB_PROP_ARRAY_H_ */
|
||||||
|
@ -37,13 +37,19 @@
|
|||||||
|
|
||||||
typedef struct _prop_bool *prop_bool_t;
|
typedef struct _prop_bool *prop_bool_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_bool_t prop_bool_create(bool);
|
prop_bool_t prop_bool_create(bool);
|
||||||
prop_bool_t prop_bool_copy(prop_bool_t);
|
prop_bool_t prop_bool_copy(prop_bool_t);
|
||||||
|
|
||||||
bool prop_bool_true(prop_bool_t);
|
bool prop_bool_true(prop_bool_t);
|
||||||
|
|
||||||
bool prop_bool_equals(prop_bool_t, prop_bool_t);
|
bool prop_bool_equals(prop_bool_t, prop_bool_t);
|
||||||
__END_DECLS
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_BOOL_H_ */
|
#endif /* _PROPLIB_PROP_BOOL_H_ */
|
||||||
|
@ -38,7 +38,10 @@
|
|||||||
|
|
||||||
typedef struct _prop_data *prop_data_t;
|
typedef struct _prop_data *prop_data_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_data_t prop_data_create_data(const void *, size_t);
|
prop_data_t prop_data_create_data(const void *, size_t);
|
||||||
prop_data_t prop_data_create_data_nocopy(const void *, size_t);
|
prop_data_t prop_data_create_data_nocopy(const void *, size_t);
|
||||||
|
|
||||||
@ -51,6 +54,9 @@ const void * prop_data_data_nocopy(prop_data_t);
|
|||||||
|
|
||||||
bool prop_data_equals(prop_data_t, prop_data_t);
|
bool prop_data_equals(prop_data_t, prop_data_t);
|
||||||
bool prop_data_equals_data(prop_data_t, const void *, size_t);
|
bool prop_data_equals_data(prop_data_t, const void *, size_t);
|
||||||
__END_DECLS
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_DATA_H_ */
|
#endif /* _PROPLIB_PROP_DATA_H_ */
|
||||||
|
@ -39,7 +39,10 @@
|
|||||||
typedef struct _prop_dictionary *prop_dictionary_t;
|
typedef struct _prop_dictionary *prop_dictionary_t;
|
||||||
typedef struct _prop_dictionary_keysym *prop_dictionary_keysym_t;
|
typedef struct _prop_dictionary_keysym *prop_dictionary_keysym_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_dictionary_t prop_dictionary_create(void);
|
prop_dictionary_t prop_dictionary_create(void);
|
||||||
prop_dictionary_t prop_dictionary_create_with_capacity(unsigned int);
|
prop_dictionary_t prop_dictionary_create_with_capacity(unsigned int);
|
||||||
|
|
||||||
@ -148,6 +151,8 @@ bool prop_dictionary_set_and_rel(prop_dictionary_t,
|
|||||||
const char *,
|
const char *,
|
||||||
prop_object_t);
|
prop_object_t);
|
||||||
|
|
||||||
__END_DECLS
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_DICTIONARY_H_ */
|
#endif /* _PROPLIB_PROP_DICTIONARY_H_ */
|
||||||
|
@ -72,7 +72,10 @@ typedef struct {
|
|||||||
#define PROP_INGEST_END \
|
#define PROP_INGEST_END \
|
||||||
{ .pite_key = NULL }
|
{ .pite_key = NULL }
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_ingest_context_t
|
prop_ingest_context_t
|
||||||
prop_ingest_context_alloc(void *);
|
prop_ingest_context_alloc(void *);
|
||||||
void prop_ingest_context_free(prop_ingest_context_t);
|
void prop_ingest_context_free(prop_ingest_context_t);
|
||||||
@ -86,6 +89,8 @@ void * prop_ingest_context_private(prop_ingest_context_t);
|
|||||||
bool prop_dictionary_ingest(prop_dictionary_t,
|
bool prop_dictionary_ingest(prop_dictionary_t,
|
||||||
const prop_ingest_table_entry[],
|
const prop_ingest_table_entry[],
|
||||||
prop_ingest_context_t);
|
prop_ingest_context_t);
|
||||||
__END_DECLS
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_INGEST_H_ */
|
#endif /* _PROPLIB_PROP_INGEST_H_ */
|
||||||
|
@ -37,7 +37,10 @@
|
|||||||
|
|
||||||
typedef struct _prop_number *prop_number_t;
|
typedef struct _prop_number *prop_number_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_number_t prop_number_create_integer(int64_t);
|
prop_number_t prop_number_create_integer(int64_t);
|
||||||
prop_number_t prop_number_create_unsigned_integer(uint64_t);
|
prop_number_t prop_number_create_unsigned_integer(uint64_t);
|
||||||
|
|
||||||
@ -52,6 +55,9 @@ uint64_t prop_number_unsigned_integer_value(prop_number_t);
|
|||||||
bool prop_number_equals(prop_number_t, prop_number_t);
|
bool prop_number_equals(prop_number_t, prop_number_t);
|
||||||
bool prop_number_equals_integer(prop_number_t, int64_t);
|
bool prop_number_equals_integer(prop_number_t, int64_t);
|
||||||
bool prop_number_equals_unsigned_integer(prop_number_t, uint64_t);
|
bool prop_number_equals_unsigned_integer(prop_number_t, uint64_t);
|
||||||
__END_DECLS
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_NUMBER_H_ */
|
#endif /* _PROPLIB_PROP_NUMBER_H_ */
|
||||||
|
@ -48,7 +48,10 @@ typedef enum {
|
|||||||
PROP_TYPE_DICT_KEYSYM = 0x646b6579 /* 'dkey' */
|
PROP_TYPE_DICT_KEYSYM = 0x646b6579 /* 'dkey' */
|
||||||
} prop_type_t;
|
} prop_type_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
void prop_object_retain(prop_object_t);
|
void prop_object_retain(prop_object_t);
|
||||||
void prop_object_release(prop_object_t);
|
void prop_object_release(prop_object_t);
|
||||||
|
|
||||||
@ -62,6 +65,9 @@ typedef struct _prop_object_iterator *prop_object_iterator_t;
|
|||||||
prop_object_t prop_object_iterator_next(prop_object_iterator_t);
|
prop_object_t prop_object_iterator_next(prop_object_iterator_t);
|
||||||
void prop_object_iterator_reset(prop_object_iterator_t);
|
void prop_object_iterator_reset(prop_object_iterator_t);
|
||||||
void prop_object_iterator_release(prop_object_iterator_t);
|
void prop_object_iterator_release(prop_object_iterator_t);
|
||||||
__END_DECLS
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_OBJECT_H_ */
|
#endif /* _PROPLIB_PROP_OBJECT_H_ */
|
||||||
|
@ -38,7 +38,10 @@
|
|||||||
|
|
||||||
typedef struct _prop_string *prop_string_t;
|
typedef struct _prop_string *prop_string_t;
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
prop_string_t prop_string_create(void);
|
prop_string_t prop_string_create(void);
|
||||||
prop_string_t prop_string_create_cstring(const char *);
|
prop_string_t prop_string_create_cstring(const char *);
|
||||||
prop_string_t prop_string_create_cstring_nocopy(const char *);
|
prop_string_t prop_string_create_cstring_nocopy(const char *);
|
||||||
@ -57,6 +60,9 @@ bool prop_string_append_cstring(prop_string_t, const char *);
|
|||||||
|
|
||||||
bool prop_string_equals(prop_string_t, prop_string_t);
|
bool prop_string_equals(prop_string_t, prop_string_t);
|
||||||
bool prop_string_equals_cstring(prop_string_t, const char *);
|
bool prop_string_equals_cstring(prop_string_t, const char *);
|
||||||
__END_DECLS
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_STRING_H_ */
|
#endif /* _PROPLIB_PROP_STRING_H_ */
|
||||||
|
@ -39,10 +39,16 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/cdefs.h>
|
|
||||||
#include <queue.h>
|
#include <queue.h>
|
||||||
|
|
||||||
|
/* GCC version checking borrowed from glibc. */
|
||||||
|
#if defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||||
|
# define __GNUC_PREREQ(maj,min) \
|
||||||
|
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||||
|
#else
|
||||||
|
# define __GNUC_PREREQ(maj,min) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __GNUC_PREREQ(2, 96)
|
#if __GNUC_PREREQ(2, 96)
|
||||||
# ifndef __predict_true
|
# ifndef __predict_true
|
||||||
# define __predict_true(exp) __builtin_expect((exp), 1)
|
# define __predict_true(exp) __builtin_expect((exp), 1)
|
||||||
@ -59,7 +65,9 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__BEGIN_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct rb_node {
|
typedef struct rb_node {
|
||||||
struct rb_node *rb_nodes[2];
|
struct rb_node *rb_nodes[2];
|
||||||
@ -207,6 +215,8 @@ void rb_tree_check(const rb_tree_t *, bool);
|
|||||||
void rb_tree_depths(const rb_tree_t *, size_t *);
|
void rb_tree_depths(const rb_tree_t *, size_t *);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__END_DECLS
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _SYS_RBTREE_H_*/
|
#endif /* _SYS_RBTREE_H_*/
|
||||||
|
@ -31,10 +31,7 @@
|
|||||||
|
|
||||||
#include <prop/prop_array.h>
|
#include <prop/prop_array.h>
|
||||||
#include "prop_object_impl.h"
|
#include "prop_object_impl.h"
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
struct _prop_array {
|
struct _prop_array {
|
||||||
struct _prop_object pa_obj;
|
struct _prop_object pa_obj;
|
||||||
@ -50,8 +47,6 @@ struct _prop_array {
|
|||||||
#define PA_F_IMMUTABLE 0x01 /* array is immutable */
|
#define PA_F_IMMUTABLE 0x01 /* array is immutable */
|
||||||
|
|
||||||
_PROP_POOL_INIT(_prop_array_pool, sizeof(struct _prop_array), "proparay")
|
_PROP_POOL_INIT(_prop_array_pool, sizeof(struct _prop_array), "proparay")
|
||||||
_PROP_MALLOC_DEFINE(M_PROP_ARRAY, "prop array",
|
|
||||||
"property array container object")
|
|
||||||
|
|
||||||
static _prop_object_free_rv_t
|
static _prop_object_free_rv_t
|
||||||
_prop_array_free(prop_stack_t, prop_object_t *);
|
_prop_array_free(prop_stack_t, prop_object_t *);
|
||||||
@ -340,7 +335,7 @@ static prop_object_t
|
|||||||
_prop_array_iterator_next_object(void *v)
|
_prop_array_iterator_next_object(void *v)
|
||||||
{
|
{
|
||||||
struct _prop_array_iterator *pai = v;
|
struct _prop_array_iterator *pai = v;
|
||||||
prop_array_t pa __unused = pai->pai_base.pi_obj;
|
prop_array_t pa = pai->pai_base.pi_obj;
|
||||||
prop_object_t po;
|
prop_object_t po;
|
||||||
|
|
||||||
_PROP_ASSERT(prop_object_is_array(pa));
|
_PROP_ASSERT(prop_object_is_array(pa));
|
||||||
@ -367,7 +362,7 @@ static void
|
|||||||
_prop_array_iterator_reset(void *v)
|
_prop_array_iterator_reset(void *v)
|
||||||
{
|
{
|
||||||
struct _prop_array_iterator *pai = v;
|
struct _prop_array_iterator *pai = v;
|
||||||
prop_array_t pa __unused = pai->pai_base.pi_obj;
|
prop_array_t pa = pai->pai_base.pi_obj;
|
||||||
|
|
||||||
_PROP_ASSERT(prop_object_is_array(pa));
|
_PROP_ASSERT(prop_object_is_array(pa));
|
||||||
|
|
||||||
@ -865,7 +860,6 @@ prop_array_internalize(const char *xml)
|
|||||||
return _prop_generic_internalize(xml, "array");
|
return _prop_generic_internalize(xml, "array");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
/*
|
/*
|
||||||
* prop_array_externalize_to_file --
|
* prop_array_externalize_to_file --
|
||||||
* Externalize an array to the specified file.
|
* Externalize an array to the specified file.
|
||||||
@ -908,4 +902,3 @@ prop_array_internalize_from_file(const char *fname)
|
|||||||
|
|
||||||
return (array);
|
return (array);
|
||||||
}
|
}
|
||||||
#endif /* _KERNEL && !_STANDALONE */
|
|
||||||
|
@ -52,9 +52,6 @@ struct _prop_data {
|
|||||||
|
|
||||||
_PROP_POOL_INIT(_prop_data_pool, sizeof(struct _prop_data), "propdata")
|
_PROP_POOL_INIT(_prop_data_pool, sizeof(struct _prop_data), "propdata")
|
||||||
|
|
||||||
_PROP_MALLOC_DEFINE(M_PROP_DATA, "prop data",
|
|
||||||
"property data container object")
|
|
||||||
|
|
||||||
static _prop_object_free_rv_t
|
static _prop_object_free_rv_t
|
||||||
_prop_data_free(prop_stack_t, prop_object_t *);
|
_prop_data_free(prop_stack_t, prop_object_t *);
|
||||||
static bool _prop_data_externalize(
|
static bool _prop_data_externalize(
|
||||||
|
@ -35,9 +35,7 @@
|
|||||||
#include "prop_object_impl.h"
|
#include "prop_object_impl.h"
|
||||||
#include "prop_rb_impl.h"
|
#include "prop_rb_impl.h"
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We implement these like arrays, but we keep them sorted by key.
|
* We implement these like arrays, but we keep them sorted by key.
|
||||||
@ -97,8 +95,6 @@ struct _prop_dictionary {
|
|||||||
|
|
||||||
_PROP_POOL_INIT(_prop_dictionary_pool, sizeof(struct _prop_dictionary),
|
_PROP_POOL_INIT(_prop_dictionary_pool, sizeof(struct _prop_dictionary),
|
||||||
"propdict")
|
"propdict")
|
||||||
_PROP_MALLOC_DEFINE(M_PROP_DICT, "prop dictionary",
|
|
||||||
"property dictionary container object")
|
|
||||||
|
|
||||||
static _prop_object_free_rv_t
|
static _prop_object_free_rv_t
|
||||||
_prop_dictionary_free(prop_stack_t, prop_object_t *);
|
_prop_dictionary_free(prop_stack_t, prop_object_t *);
|
||||||
@ -173,7 +169,7 @@ struct _prop_dictionary_iterator {
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
_prop_dict_keysym_rb_compare_nodes(void *ctx __unused,
|
_prop_dict_keysym_rb_compare_nodes(void *ctx,
|
||||||
const void *n1, const void *n2)
|
const void *n1, const void *n2)
|
||||||
{
|
{
|
||||||
const struct _prop_dictionary_keysym *pdk1 = n1;
|
const struct _prop_dictionary_keysym *pdk1 = n1;
|
||||||
@ -184,7 +180,7 @@ _prop_dict_keysym_rb_compare_nodes(void *ctx __unused,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
_prop_dict_keysym_rb_compare_key(void *ctx __unused,
|
_prop_dict_keysym_rb_compare_key(void *ctx,
|
||||||
const void *n, const void *v)
|
const void *n, const void *v)
|
||||||
{
|
{
|
||||||
const struct _prop_dictionary_keysym *pdk = n;
|
const struct _prop_dictionary_keysym *pdk = n;
|
||||||
@ -628,7 +624,7 @@ static prop_object_t
|
|||||||
_prop_dictionary_iterator_next_object(void *v)
|
_prop_dictionary_iterator_next_object(void *v)
|
||||||
{
|
{
|
||||||
struct _prop_dictionary_iterator *pdi = v;
|
struct _prop_dictionary_iterator *pdi = v;
|
||||||
prop_dictionary_t pd __unused = pdi->pdi_base.pi_obj;
|
prop_dictionary_t pd = pdi->pdi_base.pi_obj;
|
||||||
prop_dictionary_keysym_t pdk;
|
prop_dictionary_keysym_t pdk;
|
||||||
|
|
||||||
_PROP_ASSERT(prop_object_is_dictionary(pd));
|
_PROP_ASSERT(prop_object_is_dictionary(pd));
|
||||||
@ -655,7 +651,7 @@ static void
|
|||||||
_prop_dictionary_iterator_reset(void *v)
|
_prop_dictionary_iterator_reset(void *v)
|
||||||
{
|
{
|
||||||
struct _prop_dictionary_iterator *pdi = v;
|
struct _prop_dictionary_iterator *pdi = v;
|
||||||
prop_dictionary_t pd __unused = pdi->pdi_base.pi_obj;
|
prop_dictionary_t pd = pdi->pdi_base.pi_obj;
|
||||||
|
|
||||||
_PROP_RWLOCK_RDLOCK(pd->pd_rwlock);
|
_PROP_RWLOCK_RDLOCK(pd->pd_rwlock);
|
||||||
_prop_dictionary_iterator_reset_locked(pdi);
|
_prop_dictionary_iterator_reset_locked(pdi);
|
||||||
@ -1374,7 +1370,6 @@ prop_dictionary_internalize(const char *xml)
|
|||||||
return _prop_generic_internalize(xml, "dict");
|
return _prop_generic_internalize(xml, "dict");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
/*
|
/*
|
||||||
* prop_dictionary_externalize_to_file --
|
* prop_dictionary_externalize_to_file --
|
||||||
* Externalize a dictionary to the specified file.
|
* Externalize a dictionary to the specified file.
|
||||||
@ -1418,4 +1413,3 @@ prop_dictionary_internalize_from_file(const char *fname)
|
|||||||
|
|
||||||
return (dict);
|
return (dict);
|
||||||
}
|
}
|
||||||
#endif /* !_KERNEL && !_STANDALONE */
|
|
||||||
|
@ -33,15 +33,8 @@
|
|||||||
#include "prop_object_impl.h"
|
#include "prop_object_impl.h"
|
||||||
#include "prop_rb_impl.h"
|
#include "prop_rb_impl.h"
|
||||||
|
|
||||||
#if defined(_KERNEL)
|
|
||||||
#include <sys/systm.h>
|
|
||||||
#elif defined(_STANDALONE)
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <lib/libkern/libkern.h>
|
|
||||||
#else
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
struct _prop_number {
|
struct _prop_number {
|
||||||
struct _prop_object pn_obj;
|
struct _prop_object pn_obj;
|
||||||
@ -119,7 +112,7 @@ _prop_number_compare_values(const struct _prop_number_value *pnv1,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
_prop_number_rb_compare_nodes(void *ctx __unused,
|
_prop_number_rb_compare_nodes(void *ctx,
|
||||||
const void *n1, const void *n2)
|
const void *n1, const void *n2)
|
||||||
{
|
{
|
||||||
const struct _prop_number *pn1 = n1;
|
const struct _prop_number *pn1 = n1;
|
||||||
@ -130,7 +123,7 @@ _prop_number_rb_compare_nodes(void *ctx __unused,
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
_prop_number_rb_compare_key(void *ctx __unused, const void *n, const void *v)
|
_prop_number_rb_compare_key(void *ctx, const void *n, const void *v)
|
||||||
{
|
{
|
||||||
const struct _prop_number *pn = n;
|
const struct _prop_number *pn = n;
|
||||||
const struct _prop_number_value *pnv = v;
|
const struct _prop_number_value *pnv = v;
|
||||||
@ -511,14 +504,11 @@ _prop_number_internalize_unsigned(struct _prop_object_internalize_context *ctx,
|
|||||||
_PROP_ASSERT(/*CONSTCOND*/sizeof(unsigned long long) ==
|
_PROP_ASSERT(/*CONSTCOND*/sizeof(unsigned long long) ==
|
||||||
sizeof(uint64_t));
|
sizeof(uint64_t));
|
||||||
|
|
||||||
#ifndef _KERNEL
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
#endif
|
|
||||||
pnv->pnv_unsigned = (uint64_t) strtoull(ctx->poic_cp, &cp, 0);
|
pnv->pnv_unsigned = (uint64_t) strtoull(ctx->poic_cp, &cp, 0);
|
||||||
#ifndef _KERNEL /* XXX can't check for ERANGE in the kernel */
|
|
||||||
if (pnv->pnv_unsigned == UINT64_MAX && errno == ERANGE)
|
if (pnv->pnv_unsigned == UINT64_MAX && errno == ERANGE)
|
||||||
return (false);
|
return (false);
|
||||||
#endif
|
|
||||||
pnv->pnv_is_unsigned = true;
|
pnv->pnv_is_unsigned = true;
|
||||||
ctx->poic_cp = cp;
|
ctx->poic_cp = cp;
|
||||||
|
|
||||||
@ -533,15 +523,12 @@ _prop_number_internalize_signed(struct _prop_object_internalize_context *ctx,
|
|||||||
|
|
||||||
_PROP_ASSERT(/*CONSTCOND*/sizeof(long long) == sizeof(int64_t));
|
_PROP_ASSERT(/*CONSTCOND*/sizeof(long long) == sizeof(int64_t));
|
||||||
|
|
||||||
#ifndef _KERNEL
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
#endif
|
|
||||||
pnv->pnv_signed = (int64_t) strtoll(ctx->poic_cp, &cp, 0);
|
pnv->pnv_signed = (int64_t) strtoll(ctx->poic_cp, &cp, 0);
|
||||||
#ifndef _KERNEL /* XXX can't check for ERANGE in the kernel */
|
|
||||||
if ((pnv->pnv_signed == INT64_MAX || pnv->pnv_signed == INT64_MIN) &&
|
if ((pnv->pnv_signed == INT64_MAX || pnv->pnv_signed == INT64_MIN) &&
|
||||||
errno == ERANGE)
|
errno == ERANGE)
|
||||||
return (false);
|
return (false);
|
||||||
#endif
|
|
||||||
pnv->pnv_is_unsigned = false;
|
pnv->pnv_is_unsigned = false;
|
||||||
ctx->poic_cp = cp;
|
ctx->poic_cp = cp;
|
||||||
|
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <prop/prop_object.h>
|
||||||
|
#include "prop_object_impl.h"
|
||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -37,9 +40,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
#include <prop/prop_object.h>
|
|
||||||
#include "prop_object_impl.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* _prop_object_init --
|
* _prop_object_init --
|
||||||
@ -61,7 +61,7 @@ _prop_object_init(struct _prop_object *po, const struct _prop_object_type *pot)
|
|||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
/*ARGSUSED*/
|
||||||
void
|
void
|
||||||
_prop_object_fini(struct _prop_object *po _PROP_ARG_UNUSED)
|
_prop_object_fini(struct _prop_object *po)
|
||||||
{
|
{
|
||||||
/* Nothing to do, currently. */
|
/* Nothing to do, currently. */
|
||||||
}
|
}
|
||||||
@ -812,10 +812,7 @@ _prop_object_externalize_write_file(const char *fname, const char *xml,
|
|||||||
size_t len, bool do_compress)
|
size_t len, bool do_compress)
|
||||||
{
|
{
|
||||||
gzFile gzf = NULL;
|
gzFile gzf = NULL;
|
||||||
char tname[PATH_MAX];
|
char tname[PATH_MAX], *otname;
|
||||||
#ifndef HAVE_STRLCAT
|
|
||||||
char *otname;
|
|
||||||
#endif
|
|
||||||
int fd;
|
int fd;
|
||||||
int save_errno;
|
int save_errno;
|
||||||
mode_t myumask;
|
mode_t myumask;
|
||||||
|
@ -32,12 +32,7 @@
|
|||||||
#ifndef _PROPLIB_PROP_OBJECT_IMPL_H_
|
#ifndef _PROPLIB_PROP_OBJECT_IMPL_H_
|
||||||
#define _PROPLIB_PROP_OBJECT_IMPL_H_
|
#define _PROPLIB_PROP_OBJECT_IMPL_H_
|
||||||
|
|
||||||
#if defined(_KERNEL) || defined(_STANDALONE)
|
|
||||||
#include <lib/libkern/libkern.h>
|
|
||||||
#else
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "prop_stack.h"
|
#include "prop_stack.h"
|
||||||
|
|
||||||
struct _prop_object_externalize_context {
|
struct _prop_object_externalize_context {
|
||||||
@ -147,7 +142,6 @@ struct _prop_object_internalize_context *
|
|||||||
void _prop_object_internalize_context_free(
|
void _prop_object_internalize_context_free(
|
||||||
struct _prop_object_internalize_context *);
|
struct _prop_object_internalize_context *);
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
bool _prop_object_externalize_write_file(const char *,
|
bool _prop_object_externalize_write_file(const char *,
|
||||||
const char *, size_t, bool);
|
const char *, size_t, bool);
|
||||||
|
|
||||||
@ -160,7 +154,6 @@ struct _prop_object_internalize_mapped_file *
|
|||||||
_prop_object_internalize_map_file(const char *);
|
_prop_object_internalize_map_file(const char *);
|
||||||
void _prop_object_internalize_unmap_file(
|
void _prop_object_internalize_unmap_file(
|
||||||
struct _prop_object_internalize_mapped_file *);
|
struct _prop_object_internalize_mapped_file *);
|
||||||
#endif /* !_KERNEL && !_STANDALONE */
|
|
||||||
|
|
||||||
typedef bool (*prop_object_internalizer_t)(prop_stack_t, prop_object_t *,
|
typedef bool (*prop_object_internalizer_t)(prop_stack_t, prop_object_t *,
|
||||||
struct _prop_object_internalize_context *);
|
struct _prop_object_internalize_context *);
|
||||||
@ -231,110 +224,6 @@ struct _prop_object_iterator {
|
|||||||
uint32_t pi_version;
|
uint32_t pi_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _PROP_NOTHREAD_ONCE_DECL(x) static bool x = false;
|
|
||||||
#define _PROP_NOTHREAD_ONCE_RUN(x,f) \
|
|
||||||
do { \
|
|
||||||
if ((x) == false) { \
|
|
||||||
f(); \
|
|
||||||
x = true; \
|
|
||||||
} \
|
|
||||||
} while (/*CONSTCOND*/0)
|
|
||||||
|
|
||||||
#if defined(_KERNEL)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* proplib in the kernel...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/malloc.h>
|
|
||||||
#include <sys/pool.h>
|
|
||||||
#include <sys/systm.h>
|
|
||||||
#include <sys/rwlock.h>
|
|
||||||
#include <sys/once.h>
|
|
||||||
|
|
||||||
#define _PROP_ASSERT(x) KASSERT(x)
|
|
||||||
|
|
||||||
#define _PROP_MALLOC(s, t) malloc((s), (t), M_WAITOK)
|
|
||||||
#define _PROP_CALLOC(s, t) malloc((s), (t), M_WAITOK | M_ZERO)
|
|
||||||
#define _PROP_REALLOC(v, s, t) realloc((v), (s), (t), M_WAITOK)
|
|
||||||
#define _PROP_FREE(v, t) free((v), (t))
|
|
||||||
|
|
||||||
#define _PROP_POOL_GET(p) pool_get(&(p), PR_WAITOK)
|
|
||||||
#define _PROP_POOL_PUT(p, v) pool_put(&(p), (v))
|
|
||||||
|
|
||||||
struct prop_pool_init {
|
|
||||||
struct pool *pp;
|
|
||||||
size_t size;
|
|
||||||
const char *wchan;
|
|
||||||
};
|
|
||||||
#define _PROP_POOL_INIT(pp, size, wchan) \
|
|
||||||
struct pool pp; \
|
|
||||||
static const struct prop_pool_init _link_ ## pp[1] = { \
|
|
||||||
{ &pp, size, wchan } \
|
|
||||||
}; \
|
|
||||||
__link_set_add_rodata(prop_linkpools, _link_ ## pp);
|
|
||||||
|
|
||||||
#define _PROP_MALLOC_DEFINE(t, s, l) \
|
|
||||||
MALLOC_DEFINE(t, s, l);
|
|
||||||
|
|
||||||
#define _PROP_MUTEX_DECL_STATIC(x) static kmutex_t x;
|
|
||||||
#define _PROP_MUTEX_INIT(x) mutex_init(&(x),MUTEX_DEFAULT,IPL_NONE)
|
|
||||||
#define _PROP_MUTEX_LOCK(x) mutex_enter(&(x))
|
|
||||||
#define _PROP_MUTEX_UNLOCK(x) mutex_exit(&(x))
|
|
||||||
|
|
||||||
#define _PROP_RWLOCK_DECL(x) krwlock_t x ;
|
|
||||||
#define _PROP_RWLOCK_INIT(x) rw_init(&(x))
|
|
||||||
#define _PROP_RWLOCK_RDLOCK(x) rw_enter(&(x), RW_READER)
|
|
||||||
#define _PROP_RWLOCK_WRLOCK(x) rw_enter(&(x), RW_WRITER)
|
|
||||||
#define _PROP_RWLOCK_UNLOCK(x) rw_exit(&(x))
|
|
||||||
#define _PROP_RWLOCK_DESTROY(x) rw_destroy(&(x))
|
|
||||||
|
|
||||||
#define _PROP_ONCE_DECL(x) static ONCE_DECL(x);
|
|
||||||
#define _PROP_ONCE_RUN(x,f) RUN_ONCE(&(x), f)
|
|
||||||
|
|
||||||
#elif defined(_STANDALONE)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* proplib in a standalone environment...
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <lib/libsa/stand.h>
|
|
||||||
|
|
||||||
void * _prop_standalone_calloc(size_t);
|
|
||||||
void * _prop_standalone_realloc(void *, size_t);
|
|
||||||
|
|
||||||
#define _PROP_ASSERT(x) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_MALLOC(s, t) alloc((s))
|
|
||||||
#define _PROP_CALLOC(s, t) _prop_standalone_calloc((s))
|
|
||||||
#define _PROP_REALLOC(v, s, t) _prop_standalone_realloc((v), (s))
|
|
||||||
#define _PROP_FREE(v, t) dealloc((v), 0) /* XXX */
|
|
||||||
|
|
||||||
#define _PROP_POOL_GET(p) alloc((p))
|
|
||||||
#define _PROP_POOL_PUT(p, v) dealloc((v), (p))
|
|
||||||
|
|
||||||
#define _PROP_POOL_INIT(p, s, d) static const size_t p = s;
|
|
||||||
|
|
||||||
#define _PROP_MALLOC_DEFINE(t, s, l) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_MUTEX_DECL_STATIC(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_INIT(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_LOCK(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_UNLOCK(x) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_RWLOCK_DECL(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_INIT(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_RDLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_WRLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_UNLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_DESTROY(x) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_ONCE_DECL(x) _PROP_NOTHREAD_ONCE_DECL(x)
|
|
||||||
#define _PROP_ONCE_RUN(x,f) _PROP_NOTHREAD_ONCE_RUN(x,f)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* proplib in user space...
|
* proplib in user space...
|
||||||
*/
|
*/
|
||||||
@ -357,49 +246,6 @@ void * _prop_standalone_realloc(void *, size_t);
|
|||||||
|
|
||||||
#define _PROP_POOL_INIT(p, s, d) static const size_t p = s;
|
#define _PROP_POOL_INIT(p, s, d) static const size_t p = s;
|
||||||
|
|
||||||
#define _PROP_MALLOC_DEFINE(t, s, l) /* nothing */
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) && defined(_LIBPROP)
|
|
||||||
/*
|
|
||||||
* Use the same mechanism as libc; we get pthread mutexes for threaded
|
|
||||||
* programs and do-nothing stubs for non-threaded programs.
|
|
||||||
*/
|
|
||||||
#include "reentrant.h"
|
|
||||||
#define _PROP_MUTEX_DECL_STATIC(x) static mutex_t x;
|
|
||||||
#define _PROP_MUTEX_INIT(x) mutex_init(&(x), NULL)
|
|
||||||
#define _PROP_MUTEX_LOCK(x) mutex_lock(&(x))
|
|
||||||
#define _PROP_MUTEX_UNLOCK(x) mutex_unlock(&(x))
|
|
||||||
|
|
||||||
#define _PROP_RWLOCK_DECL(x) rwlock_t x ;
|
|
||||||
#define _PROP_RWLOCK_INIT(x) rwlock_init(&(x), NULL)
|
|
||||||
#define _PROP_RWLOCK_RDLOCK(x) rwlock_rdlock(&(x))
|
|
||||||
#define _PROP_RWLOCK_WRLOCK(x) rwlock_wrlock(&(x))
|
|
||||||
#define _PROP_RWLOCK_UNLOCK(x) rwlock_unlock(&(x))
|
|
||||||
#define _PROP_RWLOCK_DESTROY(x) rwlock_destroy(&(x))
|
|
||||||
|
|
||||||
#define _PROP_ONCE_DECL(x) \
|
|
||||||
static pthread_once_t x = PTHREAD_ONCE_INIT;
|
|
||||||
#define _PROP_ONCE_RUN(x,f) thr_once(&(x), (void(*)(void))f);
|
|
||||||
|
|
||||||
#elif defined(HAVE_NBTOOL_CONFIG_H)
|
|
||||||
/*
|
|
||||||
* None of NetBSD's build tools are multi-threaded.
|
|
||||||
*/
|
|
||||||
#define _PROP_MUTEX_DECL_STATIC(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_INIT(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_LOCK(x) /* nothing */
|
|
||||||
#define _PROP_MUTEX_UNLOCK(x) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_RWLOCK_DECL(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_INIT(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_RDLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_WRLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_UNLOCK(x) /* nothing */
|
|
||||||
#define _PROP_RWLOCK_DESTROY(x) /* nothing */
|
|
||||||
|
|
||||||
#define _PROP_ONCE_DECL(x) _PROP_NOTHREAD_ONCE_DECL(x)
|
|
||||||
#define _PROP_ONCE_RUN(x,f) _PROP_NOTHREAD_ONCE_RUN(x,f)
|
|
||||||
#else
|
|
||||||
/*
|
/*
|
||||||
* Use pthread mutexes everywhere else.
|
* Use pthread mutexes everywhere else.
|
||||||
*/
|
*/
|
||||||
@ -419,21 +265,5 @@ void * _prop_standalone_realloc(void *, size_t);
|
|||||||
#define _PROP_ONCE_DECL(x) \
|
#define _PROP_ONCE_DECL(x) \
|
||||||
static pthread_once_t x = PTHREAD_ONCE_INIT;
|
static pthread_once_t x = PTHREAD_ONCE_INIT;
|
||||||
#define _PROP_ONCE_RUN(x,f) pthread_once(&(x),(void(*)(void))f)
|
#define _PROP_ONCE_RUN(x,f) pthread_once(&(x),(void(*)(void))f)
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _KERNEL */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Language features.
|
|
||||||
*/
|
|
||||||
#if defined(__NetBSD__)
|
|
||||||
#include <sys/cdefs.h>
|
|
||||||
#define _PROP_ARG_UNUSED __unused
|
|
||||||
#else
|
|
||||||
#ifndef __unused
|
|
||||||
#define __unused /* delete */
|
|
||||||
#endif
|
|
||||||
#define _PROP_ARG_UNUSED /* delete */
|
|
||||||
#endif /* __NetBSD__ */
|
|
||||||
|
|
||||||
#endif /* _PROPLIB_PROP_OBJECT_IMPL_H_ */
|
#endif /* _PROPLIB_PROP_OBJECT_IMPL_H_ */
|
||||||
|
@ -32,11 +32,7 @@
|
|||||||
#ifndef _PROP_RB_IMPL_H_
|
#ifndef _PROP_RB_IMPL_H_
|
||||||
#define _PROP_RB_IMPL_H_
|
#define _PROP_RB_IMPL_H_
|
||||||
|
|
||||||
#ifdef __NetBSD__
|
#include <rbtree.h>
|
||||||
#include <sys/rbtree.h>
|
|
||||||
#else
|
|
||||||
#include <prop/rbtree.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define local names for common rb_tree functions.
|
* Define local names for common rb_tree functions.
|
||||||
|
@ -48,8 +48,6 @@ struct _prop_string {
|
|||||||
|
|
||||||
_PROP_POOL_INIT(_prop_string_pool, sizeof(struct _prop_string), "propstng")
|
_PROP_POOL_INIT(_prop_string_pool, sizeof(struct _prop_string), "propstng")
|
||||||
|
|
||||||
_PROP_MALLOC_DEFINE(M_PROP_STRING, "prop string",
|
|
||||||
"property string container object")
|
|
||||||
|
|
||||||
static _prop_object_free_rv_t
|
static _prop_object_free_rv_t
|
||||||
_prop_string_free(prop_stack_t, prop_object_t *);
|
_prop_string_free(prop_stack_t, prop_object_t *);
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#define _READ_CHUNK 8192
|
#define _READ_CHUNK 8192
|
||||||
|
|
||||||
#define TEMPLATE(type) \
|
#define TEMPLATE(type, objtype) \
|
||||||
bool \
|
bool \
|
||||||
prop ## type ## _externalize_to_zfile(prop ## type ## _t obj, const char *fname) \
|
prop ## type ## _externalize_to_zfile(prop ## type ## _t obj, const char *fname) \
|
||||||
{ \
|
{ \
|
||||||
@ -56,7 +56,7 @@ prop ## type ## _t \
|
|||||||
prop ## type ## _internalize_from_zfile(const char *fname) \
|
prop ## type ## _internalize_from_zfile(const char *fname) \
|
||||||
{ \
|
{ \
|
||||||
struct _prop_object_internalize_mapped_file *mf; \
|
struct _prop_object_internalize_mapped_file *mf; \
|
||||||
prop ## type ## _t obj; \
|
prop ## type ## _t obj = NULL; \
|
||||||
z_stream strm; \
|
z_stream strm; \
|
||||||
unsigned char *out; \
|
unsigned char *out; \
|
||||||
char *uncomp_xml = NULL; \
|
char *uncomp_xml = NULL; \
|
||||||
@ -68,19 +68,21 @@ prop ## type ## _internalize_from_zfile(const char *fname) \
|
|||||||
if (mf == NULL) \
|
if (mf == NULL) \
|
||||||
return NULL; \
|
return NULL; \
|
||||||
\
|
\
|
||||||
|
/* If it's an ordinary uncompressed plist we are done */ \
|
||||||
|
obj = prop ## type ## _internalize(mf->poimf_xml); \
|
||||||
|
if (prop_object_type(obj) == PROP_TYPE_## objtype) \
|
||||||
|
goto out; \
|
||||||
|
\
|
||||||
/* Output buffer (uncompressed) */ \
|
/* Output buffer (uncompressed) */ \
|
||||||
uncomp_xml = _PROP_MALLOC(_READ_CHUNK, M_TEMP); \
|
uncomp_xml = _PROP_MALLOC(_READ_CHUNK, M_TEMP); \
|
||||||
if (uncomp_xml == NULL) { \
|
if (uncomp_xml == NULL) \
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
goto out; \
|
||||||
return NULL; \
|
|
||||||
} \
|
|
||||||
\
|
\
|
||||||
/* temporary output buffer for inflate */ \
|
/* temporary output buffer for inflate */ \
|
||||||
out = _PROP_MALLOC(_READ_CHUNK, M_TEMP); \
|
out = _PROP_MALLOC(_READ_CHUNK, M_TEMP); \
|
||||||
if (out == NULL) { \
|
if (out == NULL) { \
|
||||||
_PROP_FREE(uncomp_xml, M_TEMP); \
|
_PROP_FREE(uncomp_xml, M_TEMP); \
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
goto out; \
|
||||||
return NULL; \
|
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
/* Decompress the mmap'ed buffer with zlib */ \
|
/* Decompress the mmap'ed buffer with zlib */ \
|
||||||
@ -91,12 +93,9 @@ prop ## type ## _internalize_from_zfile(const char *fname) \
|
|||||||
strm.next_in = Z_NULL; \
|
strm.next_in = Z_NULL; \
|
||||||
\
|
\
|
||||||
/* 15+16 to use gzip method */ \
|
/* 15+16 to use gzip method */ \
|
||||||
if (inflateInit2(&strm, 15+16) != Z_OK) { \
|
if (inflateInit2(&strm, 15+16) != Z_OK) \
|
||||||
_PROP_FREE(out, M_TEMP); \
|
goto out2; \
|
||||||
_PROP_FREE(uncomp_xml, M_TEMP); \
|
\
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
|
||||||
return NULL; \
|
|
||||||
} \
|
|
||||||
strm.avail_in = mf->poimf_mapsize; \
|
strm.avail_in = mf->poimf_mapsize; \
|
||||||
strm.next_in = (unsigned char *)mf->poimf_xml; \
|
strm.next_in = (unsigned char *)mf->poimf_xml; \
|
||||||
\
|
\
|
||||||
@ -107,22 +106,11 @@ prop ## type ## _internalize_from_zfile(const char *fname) \
|
|||||||
rv = inflate(&strm, Z_NO_FLUSH); \
|
rv = inflate(&strm, Z_NO_FLUSH); \
|
||||||
switch (rv) { \
|
switch (rv) { \
|
||||||
case Z_DATA_ERROR: \
|
case Z_DATA_ERROR: \
|
||||||
/* Wrong compressed data or uncompressed, try normal method. */ \
|
|
||||||
(void)inflateEnd(&strm); \
|
|
||||||
_PROP_FREE(out, M_TEMP); \
|
|
||||||
_PROP_FREE(uncomp_xml, M_TEMP); \
|
|
||||||
obj = prop ## type ## _internalize(mf->poimf_xml); \
|
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
|
||||||
return obj; \
|
|
||||||
case Z_STREAM_ERROR: \
|
case Z_STREAM_ERROR: \
|
||||||
case Z_NEED_DICT: \
|
case Z_NEED_DICT: \
|
||||||
case Z_MEM_ERROR: \
|
case Z_MEM_ERROR: \
|
||||||
(void)inflateEnd(&strm); \
|
errno = EINVAL; \
|
||||||
_PROP_FREE(out, M_TEMP); \
|
goto out1; \
|
||||||
_PROP_FREE(uncomp_xml, M_TEMP); \
|
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
|
||||||
errno = rv; \
|
|
||||||
return NULL; \
|
|
||||||
} \
|
} \
|
||||||
have = _READ_CHUNK - strm.avail_out; \
|
have = _READ_CHUNK - strm.avail_out; \
|
||||||
totalsize += have; \
|
totalsize += have; \
|
||||||
@ -131,16 +119,19 @@ prop ## type ## _internalize_from_zfile(const char *fname) \
|
|||||||
} while (strm.avail_out == 0); \
|
} while (strm.avail_out == 0); \
|
||||||
\
|
\
|
||||||
/* we are done */ \
|
/* we are done */ \
|
||||||
|
out2: \
|
||||||
(void)inflateEnd(&strm); \
|
(void)inflateEnd(&strm); \
|
||||||
|
out1: \
|
||||||
obj = prop ## type ## _internalize(uncomp_xml); \
|
obj = prop ## type ## _internalize(uncomp_xml); \
|
||||||
_PROP_FREE(out, M_TEMP); \
|
_PROP_FREE(out, M_TEMP); \
|
||||||
_PROP_FREE(uncomp_xml, M_TEMP); \
|
_PROP_FREE(uncomp_xml, M_TEMP); \
|
||||||
|
out: \
|
||||||
_prop_object_internalize_unmap_file(mf); \
|
_prop_object_internalize_unmap_file(mf); \
|
||||||
\
|
\
|
||||||
return obj; \
|
return obj; \
|
||||||
}
|
}
|
||||||
|
|
||||||
TEMPLATE(_array)
|
TEMPLATE(_array, ARRAY)
|
||||||
TEMPLATE(_dictionary)
|
TEMPLATE(_dictionary, DICTIONARY)
|
||||||
|
|
||||||
#undef TEMPLATE
|
#undef TEMPLATE
|
||||||
|
@ -29,7 +29,6 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined(_KERNEL) && !defined(_STANDALONE)
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -39,30 +38,11 @@
|
|||||||
#else
|
#else
|
||||||
#define KASSERT(s) do { } while (/*CONSTCOND*/ 0)
|
#define KASSERT(s) do { } while (/*CONSTCOND*/ 0)
|
||||||
#endif
|
#endif
|
||||||
#else
|
|
||||||
#include <lib/libkern/libkern.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
|
||||||
__weak_alias(rb_tree_init, _rb_tree_init)
|
|
||||||
__weak_alias(rb_tree_find_node, _rb_tree_find_node)
|
|
||||||
__weak_alias(rb_tree_find_node_geq, _rb_tree_find_node_geq)
|
|
||||||
__weak_alias(rb_tree_find_node_leq, _rb_tree_find_node_leq)
|
|
||||||
__weak_alias(rb_tree_insert_node, _rb_tree_insert_node)
|
|
||||||
__weak_alias(rb_tree_remove_node, _rb_tree_remove_node)
|
|
||||||
__weak_alias(rb_tree_iterate, _rb_tree_iterate)
|
|
||||||
#ifdef RBDEBUG
|
|
||||||
__weak_alias(rb_tree_check, _rb_tree_check)
|
|
||||||
__weak_alias(rb_tree_depths, _rb_tree_depths)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "namespace.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef RBTEST
|
#ifdef RBTEST
|
||||||
#include "rbtree.h"
|
#include "rbtree.h"
|
||||||
#else
|
#else
|
||||||
#include <prop/rbtree.h>
|
#include <rbtree.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void rb_tree_insert_rebalance(struct rb_tree *, struct rb_node *);
|
static void rb_tree_insert_rebalance(struct rb_tree *, struct rb_node *);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user