* under the terms of the license (GNU LGPL) which comes with this package.
*/
+#include "portable.h"
#include "xbt/misc.h"
#include "xbt/sysdep.h"
#include "xbt/str.h" /* headers of these functions */
#include "xbt/strbuff.h"
-#include "portable.h"
#include "xbt/matrix.h" /* for the diff */
/** @brief Strip whitespace (or other characters) from the end of a string.
xbt_dynar_t xbt_str_split(const char *s, const char *sep)
{
- xbt_dynar_t res = xbt_dynar_new(sizeof(char *), xbt_free_ref);
+ xbt_dynar_t res = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
const char *p, *q;
int done;
const char *sep_dflt = " \t\n\r\x0B";
*/
xbt_dynar_t xbt_str_split_str(const char *s, const char *sep)
{
- xbt_dynar_t res = xbt_dynar_new(sizeof(char *), xbt_free_ref);
+ xbt_dynar_t res = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
int done;
const char *p, *q;
xbt_dynar_t xbt_str_split_quoted(const char *s)
{
- xbt_dynar_t res = xbt_dynar_new(sizeof(char *), xbt_free_ref);
+ xbt_dynar_t res = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
char *str_to_free; /* we have to copy the string before, to handle backslashes */
char *beg, *end; /* pointers around the parsed chunk */
int in_simple_quote = 0, in_double_quote = 0;
}
}
free(str_to_free);
+ xbt_dynar_shrink(res,0);
return res;
}
xbt_dynar_free(&d);
XBT_TEST_SUITE("xbt_str", "String Handling");
-XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted,
- "test the function xbt_str_split_quoted")
+XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted,"test the function xbt_str_split_quoted")
{
xbt_dynar_t d;
char *s;
free(s); \
xbt_dynar_free(&d);
-XBT_TEST_UNIT("xbt_str_split_str", test_split_str,
- "test the function xbt_str_split_str")
+XBT_TEST_UNIT("xbt_str_split_str", test_split_str,"test the function xbt_str_split_str")
{
xbt_dynar_t d;
char *s;
return res;
}
-#if !defined(HAVE_GETLINE) || defined(DOXYGEN)
-/* prototype here, just in case */
-long getline(char **buf, size_t * n, FILE * stream);
-
+#if defined(SIMGRID_NEED_GETLINE) || defined(DOXYGEN)
/** @brief Get a single line from the stream (reimplementation of the GNU getline)
*
* This is a redefinition of the GNU getline function, used on platforms where it does not exists.
xbt_dynar_t db = xbt_str_split(b, "\n");
xbt_matrix_t C = diff_build_LCS(da, db);
- xbt_dynar_t diff = xbt_dynar_new(sizeof(char *), xbt_free_ref);
+ xbt_dynar_t diff = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
char *res = NULL;
diff_build_diff(diff, C, da, db, xbt_dynar_length(da) - 1,
return res;
}
+
+
+/** @brief creates a new string containing what can be read on a fd
+ *
+ */
+char* xbt_str_from_file(FILE *file) {
+ xbt_strbuff_t buff = xbt_strbuff_new();
+ char *res;
+ char bread[1024];
+ memset(bread,0,1024);
+
+ while (!feof(file)) {
+ int got = fread(bread, 1, 1023, file);
+ bread[got] = '\0';
+ xbt_strbuff_append(buff,bread);
+ }
+
+ res = buff->data;
+ xbt_strbuff_free_container(buff);
+ return res;
+}