1bdcf3f2bSJohn Marino /* $FreeBSD: head/lib/libc/iconv/citrus_prop.h 263986 2014-04-01 10:36:11Z tijl $ */ 2bdcf3f2bSJohn Marino /* $NetBSD: citrus_prop.h,v 1.5 2011/05/23 14:52:32 joerg Exp $ */ 352347f71SHasso Tepper 452347f71SHasso Tepper /*- 552347f71SHasso Tepper * Copyright (c)2006 Citrus Project, 652347f71SHasso Tepper * All rights reserved. 752347f71SHasso Tepper * 852347f71SHasso Tepper * Redistribution and use in source and binary forms, with or without 952347f71SHasso Tepper * modification, are permitted provided that the following conditions 1052347f71SHasso Tepper * are met: 1152347f71SHasso Tepper * 1. Redistributions of source code must retain the above copyright 1252347f71SHasso Tepper * notice, this list of conditions and the following disclaimer. 1352347f71SHasso Tepper * 2. Redistributions in binary form must reproduce the above copyright 1452347f71SHasso Tepper * notice, this list of conditions and the following disclaimer in the 1552347f71SHasso Tepper * documentation and/or other materials provided with the distribution. 1652347f71SHasso Tepper * 1752347f71SHasso Tepper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1852347f71SHasso Tepper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1952347f71SHasso Tepper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2052347f71SHasso Tepper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2152347f71SHasso Tepper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2252347f71SHasso Tepper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2352347f71SHasso Tepper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2452347f71SHasso Tepper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2552347f71SHasso Tepper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2652347f71SHasso Tepper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2752347f71SHasso Tepper * SUCH DAMAGE. 2852347f71SHasso Tepper * 2952347f71SHasso Tepper */ 3052347f71SHasso Tepper 3152347f71SHasso Tepper #ifndef _CITRUS_PROP_H_ 3252347f71SHasso Tepper #define _CITRUS_PROP_H_ 3352347f71SHasso Tepper 3452347f71SHasso Tepper typedef enum { 3552347f71SHasso Tepper _CITRUS_PROP_BOOL = 0, 3652347f71SHasso Tepper _CITRUS_PROP_STR = 1, 3752347f71SHasso Tepper _CITRUS_PROP_CHR = 2, 3852347f71SHasso Tepper _CITRUS_PROP_NUM = 3, 3952347f71SHasso Tepper } _citrus_prop_type_t; 4052347f71SHasso Tepper 4152347f71SHasso Tepper typedef struct _citrus_prop_hint_t _citrus_prop_hint_t; 4252347f71SHasso Tepper 4352347f71SHasso Tepper #define _CITRUS_PROP_CB0_T(_func_, _type_) \ 4452347f71SHasso Tepper typedef int (*_citrus_prop_##_func_##_cb_func_t) \ 45bdcf3f2bSJohn Marino (void * __restrict, const char *, _type_); \ 4652347f71SHasso Tepper typedef struct { \ 4752347f71SHasso Tepper _citrus_prop_##_func_##_cb_func_t func; \ 4852347f71SHasso Tepper } _citrus_prop_##_func_##_cb_t; 490d5acd74SJohn Marino _CITRUS_PROP_CB0_T(boolean, int) 5052347f71SHasso Tepper _CITRUS_PROP_CB0_T(str, const char *) 5152347f71SHasso Tepper #undef _CITRUS_PROP_CB0_T 5252347f71SHasso Tepper 5352347f71SHasso Tepper #define _CITRUS_PROP_CB1_T(_func_, _type_) \ 5452347f71SHasso Tepper typedef int (*_citrus_prop_##_func_##_cb_func_t) \ 55bdcf3f2bSJohn Marino (void * __restrict, const char *, _type_, _type_); \ 5652347f71SHasso Tepper typedef struct { \ 5752347f71SHasso Tepper _citrus_prop_##_func_##_cb_func_t func; \ 5852347f71SHasso Tepper } _citrus_prop_##_func_##_cb_t; 5952347f71SHasso Tepper _CITRUS_PROP_CB1_T(chr, int) 6052347f71SHasso Tepper _CITRUS_PROP_CB1_T(num, uint64_t) 6152347f71SHasso Tepper #undef _CITRUS_PROP_CB1_T 6252347f71SHasso Tepper 6352347f71SHasso Tepper struct _citrus_prop_hint_t { 6452347f71SHasso Tepper const char *name; 6552347f71SHasso Tepper _citrus_prop_type_t type; 6652347f71SHasso Tepper #define _CITRUS_PROP_CB_T_OPS(_name_) \ 6752347f71SHasso Tepper _citrus_prop_##_name_##_cb_t _name_ 6852347f71SHasso Tepper union { 690d5acd74SJohn Marino _CITRUS_PROP_CB_T_OPS(boolean); 7052347f71SHasso Tepper _CITRUS_PROP_CB_T_OPS(str); 7152347f71SHasso Tepper _CITRUS_PROP_CB_T_OPS(chr); 7252347f71SHasso Tepper _CITRUS_PROP_CB_T_OPS(num); 7352347f71SHasso Tepper } cb; 7452347f71SHasso Tepper }; 7552347f71SHasso Tepper 7652347f71SHasso Tepper #define _CITRUS_PROP_HINT_BOOL(name, cb) \ 770d5acd74SJohn Marino { name, _CITRUS_PROP_BOOL, { .boolean = { cb } } } 7852347f71SHasso Tepper #define _CITRUS_PROP_HINT_STR(name, cb) \ 7952347f71SHasso Tepper { name, _CITRUS_PROP_STR, { .str = { cb } } } 8052347f71SHasso Tepper #define _CITRUS_PROP_HINT_CHR(name, cb) \ 8152347f71SHasso Tepper { name, _CITRUS_PROP_CHR, { .chr = { cb } } } 8252347f71SHasso Tepper #define _CITRUS_PROP_HINT_NUM(name, cb) \ 8352347f71SHasso Tepper { name, _CITRUS_PROP_NUM, { .num = { cb } } } 8452347f71SHasso Tepper #define _CITRUS_PROP_HINT_END \ 85*45203ddbSJohn Marino { .name = NULL } 8652347f71SHasso Tepper 8752347f71SHasso Tepper __BEGIN_DECLS 8852347f71SHasso Tepper int _citrus_prop_parse_variable(const _citrus_prop_hint_t * __restrict, 8952347f71SHasso Tepper void * __restrict, const void *, size_t); 9052347f71SHasso Tepper __END_DECLS 9152347f71SHasso Tepper 9252347f71SHasso Tepper #endif /* !_CITRUS_PROP_H_ */ 93