Example #1
0
void xdebug_explode(char *delim, char *str, xdebug_arg *args, int limit) 
{
	char *p1, *p2, *endp;

	endp = str + strlen(str);

	p1 = str;
	p2 = xdebug_memnstr(str, delim, strlen(delim), endp);

	if (p2 == NULL) {
		args->c++;
		args->args = (char**) xdrealloc(args->args, sizeof(char*) * args->c);
		args->args[args->c - 1] = (char*) xdmalloc(strlen(str) + 1);
		memcpy(args->args[args->c - 1], p1, strlen(str));
		args->args[args->c - 1][strlen(str)] = '\0';
	} else {
		do {
			args->c++;
			args->args = (char**) xdrealloc(args->args, sizeof(char*) * args->c);
			args->args[args->c - 1] = (char*) xdmalloc(p2 - p1 + 1);
			memcpy(args->args[args->c - 1], p1, p2 - p1);
			args->args[args->c - 1][p2 - p1] = '\0';
			p1 = p2 + strlen(delim);
		} while ((p2 = xdebug_memnstr(p1, delim, strlen(delim), endp)) != NULL && (limit == -1 || --limit > 1));

		if (p1 <= endp) {
			args->c++;
			args->args = (char**) xdrealloc(args->args, sizeof(char*) * args->c);
			args->args[args->c - 1] = (char*) xdmalloc(endp - p1 + 1);
			memcpy(args->args[args->c - 1], p1, endp - p1);
			args->args[args->c - 1][endp - p1] = '\0';
		}
	}
}
Example #2
0
char* xdebug_sprintf(const char* fmt, ...) {
  int size = 1;
  va_list args;

  auto const orig_locale = setlocale(LC_ALL, nullptr);
  setlocale(LC_ALL, "C");
  SCOPE_EXIT { setlocale(LC_ALL, orig_locale); };
  auto new_str = (char*)xdmalloc(size);
  for (;;) {
    va_start(args, fmt);
    auto const n = vsnprintf(new_str, size, fmt, args);
    va_end(args);

    if (n > -1 && n < size) {
      break;
    }
    if (n < 0) {
      size *= 2;
    } else {
      size = n + 1;
    }
    new_str = (char*)xdrealloc(new_str, size);
  }
  return new_str;
}
Example #3
0
char *xdebug_sprintf(const char* fmt, ...)
{
	char   *new_str;
	int     size = 1;
	va_list args;
	char   *orig_locale;

	orig_locale = xdstrdup(setlocale(LC_ALL, NULL));
	setlocale(LC_ALL, "C");
	new_str = (char *) xdmalloc(size);

	for (;;) {
		int n;

		va_start(args, fmt);
		n = vsnprintf(new_str, size, fmt, args);
		va_end(args);

		if (n > -1 && n < size) {
			break;
		}
		if (n < 0) {
			size *= 2;
		} else {
			size = n + 1;
		}
		new_str = (char *) xdrealloc(new_str, size);
	}
	setlocale(LC_ALL, orig_locale);
	xdfree(orig_locale);

	return new_str;
}
Example #4
0
void xdebug_str_addl(xdebug_str *xs, char *str, int le, int f) {
  if (xs->l + le > xs->a - 1) {
    xs->d = (char*) xdrealloc(xs->d, xs->a + le + XDEBUG_STR_PREALLOC);
    xs->a = xs->a + le + XDEBUG_STR_PREALLOC;
  }
  if (!xs->l) {
    xs->d[0] = '\0';
  }
  memcpy(xs->d + xs->l, str, le);
  xs->d[xs->l + le] = '\0';
  xs->l = xs->l + le;

  if (f) {
    xdfree(str);
  }
}
Example #5
0
void xdebug_str_add(xdebug_str *xs, char *str, int f) {
  int l = strlen(str);
  if (xs->l + l > xs->a - 1) {
    xs->d = (char*) xdrealloc(xs->d, xs->a + l + XDEBUG_STR_PREALLOC);
    xs->a = xs->a + l + XDEBUG_STR_PREALLOC;
  }
  if (!xs->l) {
    xs->d[0] = '\0';
  }
  memcpy(xs->d + xs->l, str, l);
  xs->d[xs->l + l] = '\0';
  xs->l = xs->l + l;
  if (f) {
    xdfree(str);
  }
}