src/ucx/properties.h

changeset 390
d345541018fa
parent 389
92e482410453
child 391
f094a53c1178
     1.1 --- a/src/ucx/properties.h	Mon Dec 30 09:54:10 2019 +0100
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,221 +0,0 @@
     1.4 -/*
     1.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     1.6 - *
     1.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
     1.8 - *
     1.9 - * Redistribution and use in source and binary forms, with or without
    1.10 - * modification, are permitted provided that the following conditions are met:
    1.11 - *
    1.12 - *   1. Redistributions of source code must retain the above copyright
    1.13 - *      notice, this list of conditions and the following disclaimer.
    1.14 - *
    1.15 - *   2. Redistributions in binary form must reproduce the above copyright
    1.16 - *      notice, this list of conditions and the following disclaimer in the
    1.17 - *      documentation and/or other materials provided with the distribution.
    1.18 - *
    1.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    1.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    1.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    1.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    1.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    1.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    1.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    1.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    1.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    1.29 - * POSSIBILITY OF SUCH DAMAGE.
    1.30 - */
    1.31 -/**
    1.32 - * @file properties.h
    1.33 - * 
    1.34 - * Load / store utilities for properties files.
    1.35 - * 
    1.36 - * @author Mike Becker
    1.37 - * @author Olaf Wintermann
    1.38 - */
    1.39 -
    1.40 -#ifndef UCX_PROPERTIES_H
    1.41 -#define	UCX_PROPERTIES_H
    1.42 -
    1.43 -#include "ucx.h"
    1.44 -#include "map.h"
    1.45 -
    1.46 -#ifdef	__cplusplus
    1.47 -extern "C" {
    1.48 -#endif
    1.49 -
    1.50 -/**
    1.51 - * UcxProperties object for parsing properties data.
    1.52 - * Most of the fields are for internal use only. You may configure the
    1.53 - * properties parser, e.g. by changing the used delimiter or specifying 
    1.54 - * up to three different characters that shall introduce comments.
    1.55 - */
    1.56 -typedef struct {
    1.57 -    /**
    1.58 -     * Input buffer (don't set manually).
    1.59 -     * Automatically set by calls to ucx_properties_fill().
    1.60 -     */
    1.61 -    char   *buffer;
    1.62 -    
    1.63 -    /**
    1.64 -     * Length of the input buffer (don't set manually).
    1.65 -     * Automatically set by calls to ucx_properties_fill().
    1.66 -     */
    1.67 -    size_t buflen;
    1.68 -    
    1.69 -    /**
    1.70 -     * Current buffer position (don't set manually).
    1.71 -     * Used by ucx_properties_next().
    1.72 -     */
    1.73 -    size_t pos;
    1.74 -    
    1.75 -    /**
    1.76 -     * Internal temporary buffer (don't set manually).
    1.77 -     * Used by ucx_properties_next().
    1.78 -     */
    1.79 -    char   *tmp;
    1.80 -    
    1.81 -    /**
    1.82 -     * Internal temporary buffer length (don't set manually).
    1.83 -     * Used by ucx_properties_next().
    1.84 -     */
    1.85 -    size_t tmplen;
    1.86 -    
    1.87 -    /**
    1.88 -     * Internal temporary buffer capacity (don't set manually).
    1.89 -     * Used by ucx_properties_next().
    1.90 -     */
    1.91 -    size_t tmpcap;
    1.92 -    
    1.93 -    /**
    1.94 -     * Parser error code.
    1.95 -     * This is always 0 on success and a nonzero value on syntax errors.
    1.96 -     * The value is set by ucx_properties_next().
    1.97 -     */
    1.98 -    int    error;
    1.99 -    
   1.100 -    /**
   1.101 -     * The delimiter that shall be used.
   1.102 -     * This is '=' by default.
   1.103 -     */
   1.104 -    char   delimiter;
   1.105 -    
   1.106 -    /**
   1.107 -     * The first comment character.
   1.108 -     * This is '#' by default.
   1.109 -     */
   1.110 -    char   comment1;
   1.111 -    
   1.112 -    /**
   1.113 -     * The second comment character.
   1.114 -     * This is not set by default.
   1.115 -     */
   1.116 -    char   comment2;
   1.117 -    
   1.118 -    /**
   1.119 -     * The third comment character.
   1.120 -     * This is not set by default.
   1.121 -     */
   1.122 -    char   comment3;
   1.123 -} UcxProperties;
   1.124 -
   1.125 -
   1.126 -/**
   1.127 - * Constructs a new UcxProperties object.
   1.128 - * @return a pointer to the new UcxProperties object
   1.129 - */
   1.130 -UcxProperties *ucx_properties_new();
   1.131 -
   1.132 -/**
   1.133 - * Destroys a UcxProperties object.
   1.134 - * @param prop the UcxProperties object to destroy
   1.135 - */
   1.136 -void ucx_properties_free(UcxProperties *prop);
   1.137 -
   1.138 -/**
   1.139 - * Sets the input buffer for the properties parser.
   1.140 - * 
   1.141 - * After calling this function, you may parse the data by calling
   1.142 - * ucx_properties_next() until it returns 0. The function ucx_properties2map()
   1.143 - * is a convenience function that reads as much data as possible by using this
   1.144 - * function.
   1.145 - * 
   1.146 - * 
   1.147 - * @param prop the UcxProperties object
   1.148 - * @param buf a pointer to the new buffer
   1.149 - * @param len the payload length of the buffer
   1.150 - * @see ucx_properties_next()
   1.151 - * @see ucx_properties2map()
   1.152 - */
   1.153 -void ucx_properties_fill(UcxProperties *prop, char *buf, size_t len);
   1.154 -
   1.155 -/**
   1.156 - * Retrieves the next key/value-pair.
   1.157 - * 
   1.158 - * This function returns a nonzero value as long as there are key/value-pairs
   1.159 - * found. If no more key/value-pairs are found, you may refill the input buffer
   1.160 - * with ucx_properties_fill().
   1.161 - * 
   1.162 - * <b>Attention:</b> the sstr_t.ptr pointers of the output parameters point to
   1.163 - * memory within the input buffer of the parser and will get invalid some time.
   1.164 - * If you want long term copies of the key/value-pairs, use sstrdup() after
   1.165 - * calling this function.
   1.166 - * 
   1.167 - * @param prop the UcxProperties object
   1.168 - * @param name a pointer to the sstr_t that shall contain the property name
   1.169 - * @param value a pointer to the sstr_t that shall contain the property value
   1.170 - * @return Nonzero, if a key/value-pair was successfully retrieved
   1.171 - * @see ucx_properties_fill()
   1.172 - */
   1.173 -int ucx_properties_next(UcxProperties *prop, sstr_t *name, sstr_t *value);
   1.174 -
   1.175 -/**
   1.176 - * Retrieves all available key/value-pairs and puts them into a UcxMap.
   1.177 - * 
   1.178 - * This is done by successive calls to ucx_properties_next() until no more
   1.179 - * key/value-pairs can be retrieved.
   1.180 - * 
   1.181 - * The memory for the map values is allocated by the map's own allocator.
   1.182 - * 
   1.183 - * @param prop the UcxProperties object
   1.184 - * @param map the target map
   1.185 - * @return The UcxProperties.error code (i.e. 0 on success).
   1.186 - * @see ucx_properties_fill()
   1.187 - * @see UcxMap.allocator
   1.188 - */
   1.189 -int ucx_properties2map(UcxProperties *prop, UcxMap *map);
   1.190 -
   1.191 -/**
   1.192 - * Loads a properties file to a UcxMap.
   1.193 - * 
   1.194 - * This is a convenience function that reads data from an input
   1.195 - * stream until the end of the stream is reached.
   1.196 - * 
   1.197 - * @param map the map object to write the key/value-pairs to
   1.198 - * @param file the <code>FILE*</code> stream to read from
   1.199 - * @return 0 on success, or a non-zero value on error
   1.200 - * 
   1.201 - * @see ucx_properties_fill()
   1.202 - * @see ucx_properties2map()
   1.203 - */
   1.204 -int ucx_properties_load(UcxMap *map, FILE *file);
   1.205 -
   1.206 -/**
   1.207 - * Stores a UcxMap to a file.
   1.208 - * 
   1.209 - * The key/value-pairs are written by using the following format:
   1.210 - * 
   1.211 - * <code>[key] = [value]\\n</code>
   1.212 - * 
   1.213 - * @param map the map to store
   1.214 - * @param file the <code>FILE*</code> stream to write to
   1.215 - * @return 0 on success, or a non-zero value on error
   1.216 - */
   1.217 -int ucx_properties_store(UcxMap *map, FILE *file);
   1.218 -
   1.219 -#ifdef	__cplusplus
   1.220 -}
   1.221 -#endif
   1.222 -
   1.223 -#endif	/* UCX_PROPERTIES_H */
   1.224 -

mercurial