зеркало из https://github.com/mozilla/gecko-dev.git
140 строки
3.0 KiB
C
140 строки
3.0 KiB
C
|
/* 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
|