コード例 #1
0
ファイル: tar.c プロジェクト: imcleod/libguestfs
/* Turn list 'excludes' into list of " --excludes=..." strings, all
 * properly quoted.  Caller must free the returned string.
 */
static char *
make_excludes_args (char *const *excludes)
{
  DECLARE_STRINGSBUF (strings);
  size_t i;
  char *s, *ret;

  for (i = 0; excludes[i] != NULL; ++i) {
    if (asprintf_nowarn (&s, " --exclude=%Q", excludes[i]) == -1) {
      reply_with_perror ("asprintf");
      free_stringslen (strings.argv, strings.size);
      return NULL;
    }
    if (add_string_nodup (&strings, s) == -1) {
      free (s);
      return NULL;
    }
  }

  if (end_stringsbuf (&strings) == -1)
    return NULL;

  ret = concat_strings (strings.argv);
  if (!ret) {
    reply_with_perror ("concat");
    free_stringslen (strings.argv, strings.size);
    return NULL;
  }

  free_stringslen (strings.argv, strings.size);

  return ret;
}
コード例 #2
0
ファイル: guestfsd.c プロジェクト: yumingfei/libguestfs
int
add_string (struct stringsbuf *sb, const char *str)
{
  char *new_str = NULL;

  if (str) {
    new_str = strdup (str);
    if (new_str == NULL) {
      reply_with_perror ("strdup");
      free_stringslen (sb->argv, sb->size);
      sb->argv = NULL;
      return -1;
    }
  }

  return add_string_nodup (sb, new_str);
}
コード例 #3
0
ファイル: guestfsd.c プロジェクト: gaowanlong/libguestfs
int
add_string (char ***argv, int *size, int *alloc, const char *str)
{
  char *new_str;

  if (str) {
    new_str = strdup (str);
    if (new_str == NULL) {
      reply_with_perror ("strdup");
      free_strings (*argv);
      *argv = NULL;
      return -1;
    }
  } else {
    new_str = NULL;
  }

  return add_string_nodup (argv, size, alloc, new_str);
}
コード例 #4
0
ファイル: guestfsd.c プロジェクト: FengYang/libguestfs
int
add_sprintf (struct stringsbuf *sb, const char *fs, ...)
{
  va_list args;
  char *str;
  int r;

  va_start (args, fs);
  r = vasprintf (&str, fs, args);
  va_end (args);
  if (r == -1) {
    reply_with_perror ("vasprintf");
    free_stringslen (sb->argv, sb->size);
    sb->argv = NULL;
    return -1;
  }

  return add_string_nodup (sb, str);
}
コード例 #5
0
ファイル: guestfsd.c プロジェクト: yumingfei/libguestfs
int
end_stringsbuf (struct stringsbuf *sb)
{
  return add_string_nodup (sb, NULL);
}