static void dep2strcpy(const Pool *pool, char *p, Id id, int oldrel) { while (ISRELDEP(id)) { Reldep *rd = GETRELDEP(pool, id); if (oldrel == REL_AND || oldrel == REL_OR || oldrel == REL_WITH) if (rd->flags == REL_AND || rd->flags == REL_OR || rd->flags == REL_WITH) if (oldrel != rd->flags) { *p++ = '('; dep2strcpy(pool, p, rd->name, rd->flags); p += strlen(p); strcpy(p, pool_id2rel(pool, id)); p += strlen(p); dep2strcpy(pool, p, rd->evr, rd->flags); strcat(p, ")"); return; } if (rd->flags == REL_KIND) { dep2strcpy(pool, p, rd->evr, rd->flags); p += strlen(p); *p++ = ':'; id = rd->name; oldrel = rd->flags; continue; } dep2strcpy(pool, p, rd->name, rd->flags); p += strlen(p); if (rd->flags == REL_NAMESPACE) { *p++ = '('; dep2strcpy(pool, p, rd->evr, rd->flags); strcat(p, ")"); return; } if (rd->flags == REL_FILECONFLICT) { *p = 0; return; } strcpy(p, pool_id2rel(pool, id)); p += strlen(p); id = rd->evr; oldrel = rd->flags; } strcpy(p, pool->ss.stringspace + pool->ss.strings[id]); }
static int dep2strlen(const Pool *pool, Id id) { int l = 0; while (ISRELDEP(id)) { Reldep *rd = GETRELDEP(pool, id); /* add 2 for parens */ l += 2 + dep2strlen(pool, rd->name) + strlen(pool_id2rel(pool, id)); id = rd->evr; } return l + strlen(pool->ss.stringspace + pool->ss.strings[id]); }