src/cx/printf.h

Fri, 21 Apr 2023 20:28:55 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 21 Apr 2023 20:28:55 +0200
changeset 693
494d9b20b99e
parent 635
d4845058239a
child 759
475335643af4
permissions
-rw-r--r--

fix missing const qualifier for allocator

     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
     5  *
     6  * Redistribution and use in source and binary forms, with or without
     7  * modification, are permitted provided that the following conditions are met:
     8  *
     9  *   1. Redistributions of source code must retain the above copyright
    10  *      notice, this list of conditions and the following disclaimer.
    11  *
    12  *   2. Redistributions in binary form must reproduce the above copyright
    13  *      notice, this list of conditions and the following disclaimer in the
    14  *      documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    28 /**
    29  * \file printf.h
    30  * \brief Wrapper for write functions with a printf-like interface.
    31  * \author Mike Becker
    32  * \author Olaf Wintermann
    33  * \version 3.0
    34  * \copyright 2-Clause BSD License
    35  */
    37 #ifndef UCX_PRINTF_H
    38 #define UCX_PRINTF_H
    40 #include "common.h"
    41 #include "string.h"
    42 #include <stdarg.h>
    44 #ifdef __cplusplus
    45 extern "C" {
    46 #endif
    48 /**
    49  * A \c fprintf like function which writes the output to a stream by
    50  * using a write_func.
    51  *
    52  * @param stream the stream the data is written to
    53  * @param wfc the write function
    54  * @param fmt format string
    55  * @param ... additional arguments
    56  * @return the total number of bytes written
    57  */
    58 __attribute__((__nonnull__(1, 2, 3), __format__(printf, 3, 4)))
    59 int cx_fprintf(
    60         void *stream,
    61         cx_write_func wfc,
    62         char const *fmt,
    63         ...
    64 );
    66 /**
    67  * A \c vfprintf like function which writes the output to a stream by
    68  * using a write_func.
    69  *
    70  * @param stream the stream the data is written to
    71  * @param wfc the write function
    72  * @param fmt format string
    73  * @param ap argument list
    74  * @return the total number of bytes written
    75  * @see cx_fprintf()
    76  */
    77 __attribute__((__nonnull__))
    78 int cx_vfprintf(
    79         void *stream,
    80         cx_write_func wfc,
    81         char const *fmt,
    82         va_list ap
    83 );
    85 /**
    86  * A \c asprintf like function which allocates space for a string
    87  * the result is written to.
    88  *
    89  * \note The resulting string is guaranteed to be zero-terminated.
    90  *
    91  * @param allocator the CxAllocator used for allocating the string
    92  * @param fmt format string
    93  * @param ... additional arguments
    94  * @return the formatted string
    95  * @see cx_strfree_a()
    96  */
    97 __attribute__((__nonnull__(1, 2), __format__(printf, 2, 3)))
    98 cxmutstr cx_asprintf_a(
    99         CxAllocator const *allocator,
   100         char const *fmt,
   101         ...
   102 );
   104 /**
   105  * A \c asprintf like function which allocates space for a string
   106  * the result is written to.
   107  *
   108  * \note The resulting string is guaranteed to be zero-terminated.
   109  *
   110  * @param fmt format string
   111  * @param ... additional arguments
   112  * @return the formatted string
   113  * @see cx_strfree()
   114  */
   115 #define cx_asprintf(fmt, ...) \
   116     cx_asprintf_a(cxDefaultAllocator, fmt, __VA_ARGS__)
   118 /**
   119 * A \c vasprintf like function which allocates space for a string
   120  * the result is written to.
   121  *
   122  * \note The resulting string is guaranteed to be zero-terminated.
   123  *
   124  * @param allocator the CxAllocator used for allocating the string
   125  * @param fmt format string
   126  * @param ap argument list
   127  * @return the formatted string
   128  * @see cx_asprintf_a()
   129  */
   130 __attribute__((__nonnull__))
   131 cxmutstr cx_vasprintf_a(
   132         CxAllocator const *allocator,
   133         char const *fmt,
   134         va_list ap
   135 );
   137 /**
   138 * A \c vasprintf like function which allocates space for a string
   139  * the result is written to.
   140  *
   141  * \note The resulting string is guaranteed to be zero-terminated.
   142  *
   143  * @param fmt format string
   144  * @param ap argument list
   145  * @return the formatted string
   146  * @see cx_asprintf()
   147  */
   148 #define cx_vasprintf(fmt, ap) cx_vasprintf_a(cxDefaultAllocator, fmt, ap)
   150 /**
   151  * A \c printf like function which writes the output to a CxBuffer.
   152  *
   153  * @param buffer a pointer to the buffer the data is written to
   154  * @param fmt the format string
   155  * @param ... additional arguments
   156  * @return the total number of bytes written
   157  * @see ucx_fprintf()
   158  */
   159 #define cx_bprintf(buffer, fmt, ...) cx_fprintf((CxBuffer*)buffer, \
   160     (cx_write_func) cxBufferWrite, fmt, __VA_ARGS__)
   162 #ifdef __cplusplus
   163 } // extern "C"
   164 #endif
   166 #endif //UCX_PRINTF_H

mercurial