view common/strhelp.h @ 856:797aa8d9c785

(issue48) Fallback to HKEY_USERS on hive load failure If the hive can not be loaded it might mean that the user is currently logged on. In that case we can access his registry via HKEY_USERS.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 31 Jul 2014 12:56:26 +0200
parents 17e1c8f37d72
children ffdc8cba139a
line wrap: on
line source
/* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=2)
 * and comes with ABSOLUTELY NO WARRANTY!
 * See LICENSE.txt for details.
 */
#ifndef STRHELP_H
#define STRHELP_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <stddef.h>

/**
 * @file  strhelp.h
 * @brief Helper functions for c strings and memory management
 * @details strhelp contains terminating memory allocation functions and
 * some conveniance functions to work with c strings or arrays of c
 * strings.
 */

void *xmalloc( size_t n );
void *xrealloc( void *a, size_t n );
void *xcalloc( size_t n, size_t m );
char *xstrndup( const char *string, const size_t len );
void xfree ( void *p );

/**
 * @brief Terminating variant of asprintf
 *
 * This function behaves exactly like asprintf(3) but will terminate
 * when an error occures (usally that means that memoy allocation
 * failed).
 */
int xasprintf (char **strp, const char *fmt, ...);

/**
 * @brief Returns the length of the given %NULL-terminated
 * string array str_array.
 * @param[in] str_array a %NULL-terminated array of strings
 * @returns length of str_array.
 */
unsigned int strv_length (char **str_array);

/**
 * @brief append a string to a NULL terminated array of strings.
 *
 * @param[inout] pArray pointer to the NULL terminated list of string pointers.
 * @param[in] string pointer to the string to append to the list.
 * @param[in] len length of the string to append to the list
 */
void strv_append (char ***pArray, const char *string, const size_t len);

/**
 * @brief append a string to another string.
 *
 * @param[inout] pDst pointer to the string to be extended.
 * @param[inout] dst_len length of the dst string. Will be modified.
 * @param[in] appendage pointer to the string to append.
 * @param[in] len length of the string to append.
 */
void str_append_str (char **pDst, size_t *dst_len, const char *appendage,
                    const size_t len);

/**
 * @brief Frees the given %NULL-terminated string array.
 * @param[inout] str_array a %NULL-terminated array of strings
 */
void strv_free (char **str_array);

/**
 * @brief Checks whether two strings exactly match
 * @param[in] s1 the first string
 * @param[in] s2 the second string
 * @returns true if s1 and s2 are equal
 */
bool str_equal (char *s1, char *s2);

/**
 * @brief Checks whether s2 exactly matches the beginning of s1.
 * @param[in] s1 the string who's beginning is searched
 * @param[in] s2 the string which is searched for
 * @returns true if s1 starts with s2, false otherwise
 */
bool str_starts_with (char *s1, char *s2);

/**
 * @brief Trims all white space from the start and end of string.
 * @details the start of the string is trimmed by setting *s to the
 * first non white space character.  The end is trimmed by setting the
 * first character after the last non white space character to \0.
 * @param[inout] s ponter to the string to strip
 */
bool str_trim (char **s);

/** @brief decode base64 encoded data
 *
 * The memory allocated for dest needs to be free'd by the
 * caller.
 *
 * _Input warning:_
 * If the input contains invalid base64 characters an error
 * is returned.
 *
 * If the input is invalid base64 but consists of valid
 * base64 characters _no error_ is returned and dst contains
 * the valid input up to the error.
 *
 * @param [out] dst Pointer to the destination. Needs to be NULL
 * @param [out] dst_size Size allocated for the destination.
 * @param [in] src Pointer to the base64 encoded data.
 * @param [in] src_size Size of the encoded data.
 *
 * @returns 0 on success a polarssl error or -1 otherwise
 */
int str_base64_decode(char **dst, size_t *dst_size, char *src,
                      size_t src_size);

#ifdef WIN32

/** @brief convert a utf8 string to utf16 wchar
 *
 * @param[in] string utf8 string. Must be at least len characters long.
 * @param[in] len number of characters to be converted.
 *
 * @returns pointer to a newly allocated wchar array. NULL on error.
 *
 **/
wchar_t *utf8_to_wchar (const char *string, size_t len);

/** @brief convert a utf16 string to utf8
 *
 * @param[in] string utf16 string. Must be at least len characters long.
 * @param[in] len number of characters to be converted.
 *
 * @returns pointer to a newly allocated char array. NULL on error.
 *
 **/
char *wchar_to_utf8 (const wchar_t *string, size_t len);
#endif

#ifdef __cplusplus
}
#endif

#endif

http://wald.intevation.org/projects/trustbridge/