Exemple #1
0
void vdl_memmove (void *dst, const void *src, size_t len)
{
  uint8_t *ss = (uint8_t *)src;
  uint8_t *se = ss + len;
  uint8_t *ds = (uint8_t *)dst;
  uint8_t *de = ds + len;
  if (ss > de || se <= ds)
    {
      // no overlap
      vdl_memcpy (dst, src, len);
    }
  else if (de > se)
    {
      // overlap
      unsigned long size = (unsigned long)de - (unsigned long)se;
      vdl_memcpy (de - size, se - size, size);
      // recursively finish the copy
      vdl_memmove (dst, src, len - size);
    }
  else if (ds < ss)
    {
      // overlap
      unsigned long size = (unsigned long)ss - (unsigned long)ds;
      vdl_memcpy (ds, ss, size);
      // recursively finish the copy
      vdl_memmove (ds+size, ss+size, len - size);
    }
  else
    {
      int *p = 0;
      *p = 0;
    }
}
Exemple #2
0
void glibc_initialize (void)
{
  void **(*fn) (void) = vdl_dl_error_catch_tsd;
  char *dst = &_rtld_local[CONFIG_DL_ERROR_CATCH_TSD_OFFSET];
  vdl_memcpy ((void*)dst, &fn, sizeof (fn));
  char *off = &_rtld_local_ro[CONFIG_RTLD_DL_PAGESIZE_OFFSET];
  int pgsz = system_getpagesize ();
  vdl_memcpy (off, &pgsz, sizeof (pgsz));
}
Exemple #3
0
struct VdlList *
vdl_utils_strsplit (const char *value, char separator)
{
  VDL_LOG_FUNCTION ("value=%s, separator=%d", (value == 0) ? "" : value,
                    separator);
  struct VdlList *list = vdl_list_new ();
  const char *prev = value;
  const char *cur = value;

  if (value == 0)
    {
      return list;
    }
  while (1)
    {
      size_t prev_len;
      char *str;
      while (*cur != separator && *cur != 0)
        {
          cur++;
        }
      prev_len = cur - prev;
      str = vdl_alloc_malloc (prev_len + 1);
      vdl_memcpy (str, prev, prev_len);
      str[prev_len] = 0;
      vdl_list_push_back (list, str);
      if (*cur == 0)
        {
          break;
        }
      cur++;
      prev = cur;
    }
  return list;
}
Exemple #4
0
char *
vdl_utils_strdup (const char *str)
{
  if (str == 0)
    {
      return 0;
    }
  //VDL_LOG_FUNCTION ("str=%s", str);
  int len = vdl_utils_strlen (str);
  char *retval = vdl_alloc_malloc (len + 1);
  vdl_memcpy (retval, str, len + 1);
  return retval;
}
Exemple #5
0
char *
vdl_utils_strconcat (const char *str, ...)
{
  VDL_LOG_FUNCTION ("str=%s", str);
  va_list l1, l2;
  uint32_t size;
  char *cur, *retval, *tmp;
  size = vdl_utils_strlen (str);
  va_start (l1, str);
  va_copy (l2, l1);
  // calculate size of final string
  cur = va_arg (l1, char *);
  while (cur != 0)
    {
      size += vdl_utils_strlen (cur);
      cur = va_arg (l1, char *);
    }
  va_end (l1);
  retval = vdl_alloc_malloc (size + 1);
  // copy first string
  tmp = retval;
  vdl_memcpy (tmp, str, vdl_utils_strlen (str));
  tmp += vdl_utils_strlen (str);
  // concatenate the other strings.
  cur = va_arg (l2, char *);
  while (cur != 0)
    {
      vdl_memcpy (tmp, cur, vdl_utils_strlen (cur));
      tmp += vdl_utils_strlen (cur);
      cur = va_arg (l2, char *);
    }
  // append final 0
  *tmp = 0;
  va_end (l2);
  return retval;
}