Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef _CPR_STRING_H_
#define _CPR_STRING_H_
#include <stdarg.h>
#include "cpr_types.h"
#include "cpr_strings.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* sstrncpy
*
* @brief The CPR wrapper for strncpy
*
* This is Cisco's *safe* version of strncpy. The string will always
* be NUL terminated (which is not ANSI compliant).
*
* @param[in] dst - The destination string
* @param[in] src - The source
* @param[in] max - maximum length in octets to concatenate
*
* @return Pointer to the @b end of the string
*
* @note Modified to be explicitly safe for all inputs.
* Also return the number of characters copied excluding the
* NUL terminator vs. the original string s1. This simplifies
* code where sstrncat functions follow.
*/
unsigned long
sstrncpy(char *dst, const char *src, unsigned long max);
/**
* sstrncat
*
* @brief The CPR wrapper for strncat
*
* This is Cisco's *safe* version of strncat. The string will always
* be NUL terminated (which is not ANSI compliant).
*
* @param[in] s1 - first string
* @param[in] s2 - second string
* @param[in] max - maximum length in octets to concatenate
*
* @return Pointer to the @b end of the string
*
* @note Modified to be explicitly safe for all inputs.
* Also return the end vs. the beginning of the string s1
* which is useful for multiple sstrncat calls.
*/
char *
sstrncat(char *s1, const char *s2, unsigned long max);
/*
* flex_string
*/
#define FLEX_STRING_CHUNK_SIZE 256
typedef struct {
char *buffer;
size_t buffer_length;
size_t string_length;
} flex_string;
/*
* flex_string_init
*
* Not thread-safe
*/
void flex_string_init(flex_string *fs);
/*
* flex_string_free
*
* Not thread-safe
*/
void flex_string_free(flex_string *fs);
/*
* flex_string_check_alloc
*
* Allocate enough chunks to hold the new minimum size.
*
* Not thread-safe
*/
void flex_string_check_alloc(flex_string *fs, size_t new_min_length);
/*
* flex_string_append
*
* Not thread-safe
*/
void flex_string_append(flex_string *fs, const char *more);
/*
* flex_string_sprintf
*
* Not thread-safe
*/
void flex_string_vsprintf(flex_string *fs, const char *format, va_list original_ap);
/*
* flex_string_sprintf
*
* Not thread-safe
*/
void flex_string_sprintf(flex_string *fs, const char *format, ...);
/* From cpr_linux_string.h */
/* cpr_strdup
*
* @brief The CPR wrapper for strdup
* The cpr_strdup shall return a pointer to a new string, which is a duplicate
* of the string pointed to by "str" argument. A null pointer is returned if the
* new string cannot be created.
*
* @param[in] str - The string that needs to be duplicated
*
* @return The duplicated string or NULL in case of no memory
*
*/
char *
cpr_strdup(const char *str);
#ifdef __cplusplus
}
#endif
#endif