diff options
-rw-r--r-- | src/pool.c | 29 | ||||
-rw-r--r-- | src/pool.h | 1 | ||||
-rw-r--r-- | src/util.c | 28 | ||||
-rw-r--r-- | src/util.h | 1 |
4 files changed, 59 insertions, 0 deletions
@@ -1173,6 +1173,35 @@ pool_alloctmpspace(Pool *pool, int len) return pool->tmpspacebuf[n]; } +char * +pool_tmpjoin(Pool *pool, const char *str1, const char *str2, const char *str3) +{ + int l1, l2, l3; + char *s, *str; + l1 = str1 ? strlen(str1) : 0; + l2 = str2 ? strlen(str2) : 0; + l3 = str3 ? strlen(str3) : 0; + s = str = pool_alloctmpspace(pool, l1 + l2 + l3 + 1); + if (l1) + { + strcpy(s, str1); + s += l1; + } + if (l2) + { + strcpy(s, str2); + s += l2; + } + if (l3) + { + strcpy(s, str3); + s += l3; + } + *s = 0; + return str; +} + + /*******************************************************************/ struct mptree { @@ -176,6 +176,7 @@ extern void pool_free(Pool *pool); extern void pool_debug(Pool *pool, int type, const char *format, ...) __attribute__((format(printf, 3, 4))); extern char *pool_alloctmpspace(Pool *pool, int len); +extern char *pool_tmpjoin(Pool *pool, const char *str1, const char *str2, const char *str3); extern void pool_set_installed(Pool *pool, struct _Repo *repo); @@ -108,3 +108,31 @@ sat_sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, cons { qsort_r(base, nmemb, size, compar, compard); } + +char * +sat_dupjoin(const char *str1, const char *str2, const char *str3) +{ + int l1, l2, l3; + char *s, *str; + l1 = str1 ? strlen(str1) : 0; + l2 = str2 ? strlen(str2) : 0; + l3 = str3 ? strlen(str3) : 0; + s = str = sat_malloc(l1 + l2 + l3 + 1); + if (l1) + { + strcpy(s, str1); + s += l1; + } + if (l2) + { + strcpy(s, str2); + s += l2; + } + if (l3) + { + strcpy(s, str3); + s += l3; + } + *s = 0; + return str; +} @@ -29,6 +29,7 @@ extern void *sat_free(void *); extern void sat_oom(size_t, size_t); extern unsigned int sat_timems(unsigned int subtract); extern void sat_sort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *, void *), void *compard); +extern char *sat_dupjoin(const char *str1, const char *str2, const char *str3); static inline void *sat_extend(void *buf, size_t len, size_t nmemb, size_t size, size_t block) { |