2010-08-16 22:28:34 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
2010-07-27 08:15:45 -07:00
|
|
|
#endif
|
2010-01-27 12:47:47 -08:00
|
|
|
|
2010-08-16 22:28:34 -07:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
2010-04-14 23:16:59 -07:00
|
|
|
|
2010-08-21 10:25:46 -07:00
|
|
|
#ifdef HAVE_EVIL
|
|
|
|
# include <Evil.h>
|
|
|
|
#endif
|
|
|
|
|
2010-08-16 22:28:34 -07:00
|
|
|
#include "eina_private.h"
|
|
|
|
#include "eina_str.h"
|
2010-07-27 02:05:41 -07:00
|
|
|
#include "eina_strbuf_common.h"
|
|
|
|
#include "eina_unicode.h"
|
2010-02-26 12:09:36 -08:00
|
|
|
|
2010-08-16 23:05:21 -07:00
|
|
|
/*============================================================================*
|
|
|
|
* Local *
|
|
|
|
*============================================================================*/
|
|
|
|
|
2010-08-16 23:58:26 -07:00
|
|
|
/**
|
|
|
|
* @cond LOCAL
|
|
|
|
*/
|
|
|
|
|
2010-08-17 00:39:53 -07:00
|
|
|
#ifdef _STRBUF_DATA_TYPE
|
|
|
|
# undef _STRBUF_DATA_TYPE
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_CSIZE
|
|
|
|
# undef _STRBUF_CSIZE
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_STRUCT_NAME
|
|
|
|
# undef _STRBUF_STRUCT_NAME
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_STRLEN_FUNC
|
|
|
|
# undef _STRBUF_STRLEN_FUNC
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_STRESCAPE_FUNC
|
|
|
|
# undef _STRBUF_STRESCAPE_FUNC
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_MAGIC
|
|
|
|
# undef _STRBUF_MAGIC
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _STRBUF_MAGIC_STR
|
|
|
|
# undef _STRBUF_MAGIC_STR
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _FUNC_EXPAND
|
|
|
|
# undef _FUNC_EXPAND
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2010-08-16 23:58:26 -07:00
|
|
|
#define _STRBUF_DATA_TYPE char
|
|
|
|
#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE)
|
|
|
|
#define _STRBUF_STRUCT_NAME Eina_Strbuf
|
|
|
|
#define _STRBUF_STRLEN_FUNC(x) strlen(x)
|
|
|
|
#define _STRBUF_STRESCAPE_FUNC(x) eina_str_escape(x)
|
|
|
|
#define _STRBUF_MAGIC EINA_MAGIC_STRBUF
|
|
|
|
#define _STRBUF_MAGIC_STR __STRBUF_MAGIC_STR
|
|
|
|
static const char __STRBUF_MAGIC_STR[] = "Eina Strbuf";
|
|
|
|
|
|
|
|
#define _FUNC_EXPAND(y) eina_strbuf_ ## y
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @endcond
|
|
|
|
*/
|
|
|
|
|
2010-08-16 23:05:21 -07:00
|
|
|
|
|
|
|
/*============================================================================*
|
|
|
|
* Global *
|
|
|
|
*============================================================================*/
|
|
|
|
|
|
|
|
|
|
|
|
/*============================================================================*
|
|
|
|
* API *
|
|
|
|
*============================================================================*/
|
|
|
|
|
2010-08-16 23:58:26 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @addtogroup Eina_String_Buffer_Group String Buffer
|
|
|
|
*
|
|
|
|
* @brief These functions provide string buffers management.
|
|
|
|
*
|
|
|
|
* The String Buffer data type is designed to be a mutable string,
|
|
|
|
* allowing to append, prepend or insert a string to a buffer.
|
|
|
|
*
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2010-04-09 08:56:20 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
char *str;
|
2010-04-12 11:30:07 -07:00
|
|
|
size_t len;
|
2010-04-09 08:56:20 -07:00
|
|
|
Eina_Bool ret;
|
|
|
|
|
|
|
|
va_start(args, fmt);
|
2010-04-12 11:30:07 -07:00
|
|
|
len = vasprintf(&str, fmt, args);
|
2010-04-09 08:56:20 -07:00
|
|
|
va_end(args);
|
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
if (len <= 0 || !str)
|
2010-07-27 19:37:05 -07:00
|
|
|
return EINA_FALSE;
|
2010-04-09 08:56:20 -07:00
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
ret = eina_strbuf_append_length(buf, str, len);
|
2010-04-09 08:56:20 -07:00
|
|
|
free(str);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args)
|
|
|
|
{
|
|
|
|
char *str;
|
2010-04-12 11:30:07 -07:00
|
|
|
size_t len;
|
2010-04-09 08:56:20 -07:00
|
|
|
Eina_Bool ret;
|
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
len = vasprintf(&str, fmt, args);
|
2010-04-09 08:56:20 -07:00
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
if (len <= 0 || !str)
|
2010-07-27 19:37:05 -07:00
|
|
|
return EINA_FALSE;
|
2010-04-09 08:56:20 -07:00
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
ret = eina_strbuf_append_length(buf, str, len);
|
2010-04-09 08:56:20 -07:00
|
|
|
free(str);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
char *str;
|
2010-04-12 11:30:07 -07:00
|
|
|
size_t len;
|
2010-04-09 08:56:20 -07:00
|
|
|
Eina_Bool ret;
|
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
va_start(args, pos);
|
|
|
|
len = vasprintf(&str, fmt, args);
|
2010-04-09 08:56:20 -07:00
|
|
|
va_end(args);
|
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
if (len <= 0 || !str)
|
2010-07-27 19:37:05 -07:00
|
|
|
return EINA_FALSE;
|
2010-04-09 08:56:20 -07:00
|
|
|
|
|
|
|
ret = eina_strbuf_insert(buf, str, pos);
|
|
|
|
free(str);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
2010-07-27 19:37:05 -07:00
|
|
|
eina_strbuf_insert_vprintf(Eina_Strbuf *buf,
|
|
|
|
const char *fmt,
|
|
|
|
size_t pos,
|
|
|
|
va_list args)
|
2010-04-09 08:56:20 -07:00
|
|
|
{
|
|
|
|
char *str;
|
2010-04-12 11:30:07 -07:00
|
|
|
size_t len;
|
2010-04-09 08:56:20 -07:00
|
|
|
Eina_Bool ret;
|
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
len = vasprintf(&str, fmt, args);
|
2010-04-09 08:56:20 -07:00
|
|
|
|
2010-04-12 11:30:07 -07:00
|
|
|
if (len <= 0 || !str)
|
2010-07-27 19:37:05 -07:00
|
|
|
return EINA_FALSE;
|
2010-04-09 08:56:20 -07:00
|
|
|
|
|
|
|
ret = eina_strbuf_insert(buf, str, pos);
|
|
|
|
free(str);
|
|
|
|
return ret;
|
2010-08-16 06:52:34 -07:00
|
|
|
}
|
2010-08-16 22:28:34 -07:00
|
|
|
|
|
|
|
/* Unicode */
|
|
|
|
|
|
|
|
#include "eina_strbuf_template_c.x"
|
2010-08-16 23:58:26 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|