Blame ext/tools_util.h

Packit Service ff689b
/*
Packit Service ff689b
 * Copyright (c) 2007, Novell Inc.
Packit Service ff689b
 *
Packit Service ff689b
 * This program is licensed under the BSD license, read LICENSE.BSD
Packit Service ff689b
 * for further information
Packit Service ff689b
 */
Packit Service ff689b
Packit Service ff689b
/*
Packit Service ff689b
 * util.h
Packit Service ff689b
 *
Packit Service ff689b
 */
Packit Service ff689b
Packit Service ff689b
#ifndef LIBSOLV_TOOLS_UTIL_H
Packit Service ff689b
#define LIBSOLV_TOOLS_UTIL_H
Packit Service ff689b
Packit Service ff689b
static inline Id
Packit Service ff689b
makeevr(Pool *pool, const char *s)
Packit Service ff689b
{
Packit Service ff689b
  if (!strncmp(s, "0:", 2) && s[2])
Packit Service ff689b
    s += 2;
Packit Service ff689b
  return pool_str2id(pool, s, 1);
Packit Service ff689b
}
Packit Service ff689b
Packit Service ff689b
/**
Packit Service ff689b
 * split a string
Packit Service ff689b
 */
Packit Service ff689b
#ifndef DISABLE_SPLIT
Packit Service ff689b
static int
Packit Service ff689b
split(char *l, char **sp, int m)
Packit Service ff689b
{
Packit Service ff689b
  int i;
Packit Service ff689b
  for (i = 0; i < m;)
Packit Service ff689b
    {
Packit Service ff689b
      while (*l == ' ')
Packit Service ff689b
        l++;
Packit Service ff689b
      if (!*l)
Packit Service ff689b
        break;
Packit Service ff689b
      sp[i++] = l;
Packit Service ff689b
      while (*l && *l != ' ')
Packit Service ff689b
        l++;
Packit Service ff689b
      if (!*l)
Packit Service ff689b
        break;
Packit Service ff689b
      *l++ = 0;
Packit Service ff689b
    }
Packit Service ff689b
  return i;
Packit Service ff689b
}
Packit Service ff689b
#endif
Packit Service ff689b
Packit Service ff689b
#ifndef DISABLE_JOIN2
Packit Service ff689b
Packit Service ff689b
struct joindata {
Packit Service ff689b
  char *tmp;
Packit Service ff689b
  int tmpl;
Packit Service ff689b
};
Packit Service ff689b
Packit Service ff689b
/* this join does not depend on parsedata */
Packit Service ff689b
static char *
Packit Service ff689b
join2(struct joindata *jd, const char *s1, const char *s2, const char *s3)
Packit Service ff689b
{
Packit Service ff689b
  int l = 1;
Packit Service ff689b
  char *p;
Packit Service ff689b
Packit Service ff689b
  if (s1)
Packit Service ff689b
    l += strlen(s1);
Packit Service ff689b
  if (s2)
Packit Service ff689b
    l += strlen(s2);
Packit Service ff689b
  if (s3)
Packit Service ff689b
    l += strlen(s3);
Packit Service ff689b
  if (l > jd->tmpl)
Packit Service ff689b
    {
Packit Service ff689b
      jd->tmpl = l + 256;
Packit Service ff689b
      jd->tmp = solv_realloc(jd->tmp, jd->tmpl);
Packit Service ff689b
    }
Packit Service ff689b
  p = jd->tmp;
Packit Service ff689b
  if (s1)
Packit Service ff689b
    {
Packit Service ff689b
      strcpy(p, s1);
Packit Service ff689b
      p += strlen(s1);
Packit Service ff689b
    }
Packit Service ff689b
  if (s2)
Packit Service ff689b
    {
Packit Service ff689b
      strcpy(p, s2);
Packit Service ff689b
      p += strlen(s2);
Packit Service ff689b
    }
Packit Service ff689b
  if (s3)
Packit Service ff689b
    {
Packit Service ff689b
      strcpy(p, s3);
Packit Service ff689b
      p += strlen(s3);
Packit Service ff689b
    }
Packit Service ff689b
  *p = 0;
Packit Service ff689b
  return jd->tmp;
Packit Service ff689b
}
Packit Service ff689b
Packit Service ff689b
static inline char *
Packit Service ff689b
join_dup(struct joindata *jd, const char *s)
Packit Service ff689b
{
Packit Service ff689b
  return s ? join2(jd, s, 0, 0) : 0;
Packit Service ff689b
}
Packit Service ff689b
Packit Service ff689b
static inline void
Packit Service ff689b
join_freemem(struct joindata *jd)
Packit Service ff689b
{
Packit Service ff689b
  if (jd->tmp)
Packit Service ff689b
    free(jd->tmp);
Packit Service ff689b
  jd->tmp = 0;
Packit Service ff689b
  jd->tmpl = 0;
Packit Service ff689b
}
Packit Service ff689b
Packit Service ff689b
#endif
Packit Service ff689b
Packit Service ff689b
#endif /* LIBSOLV_TOOLS_UTIL_H */