-/* $Id$ */
-
/* xbt_str.c - various helping functions to deal with strings */
-/* Copyright (C) 2005-2008 The SimGrid Team. */
-/* All rights reserved. */
+/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package.
- */
+ * 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,
xbt_strbuff_t buff = xbt_strbuff_new();
char *res;
char bread[1024];
+ memset(bread,0,1024);
while (!feof(file)) {
- fread(bread, 1, 1023, file);
- bread[1023] = '\0';
+ int got = fread(bread, 1, 1023, file);
+ bread[got] = '\0';
xbt_strbuff_append(buff,bread);
}