diff options
Diffstat (limited to 'parsehdlist.c')
-rw-r--r-- | parsehdlist.c | 48 |
1 files changed, 30 insertions, 18 deletions
diff --git a/parsehdlist.c b/parsehdlist.c index 6b1d97b..c8ab948 100644 --- a/parsehdlist.c +++ b/parsehdlist.c @@ -26,6 +26,10 @@ static int interactive_mode = 0; static int print_quiet = 0; static int print_name = 0; static int print_group = 0; +static int print_size = 0; +static int print_serial = 0; +static int print_summary = 0; +static int print_description = 0; static int print_provides = 0; static int print_requires = 0; static int print_conflicts = 0; @@ -52,26 +56,14 @@ char *get_name(Header header, int_32 tag) { return name; } -/* static -void print_list(Header header, int_32 tag_name, char *format, char sep, char *name) { +int get_int(Header header, int_32 tag) { int_32 type, count; - char **list; - int i; - - headerGetEntry(header, tag_name, &type, (void **) &list, &count); + int_32 *i; - if (list) { - for(i = 0; i < count; i++) { - if (sep && i > 0) printf("%c%s", sep, list[i]); - else printf(format, name, list[i]); - if (!sep) printf("\n"); - } - if (sep) printf("\n"); - } - free(list); + headerGetEntry(header, tag, &type, (void **) &i, &count); + return i ? *i : 0; /* assume for default, necessary for RPMTAG_SERIAL */ } -*/ static void print_list_flags(Header header, int_32 tag_name, int_32 tag_flags, int_32 tag_version, char *format, char sep, char *name) { @@ -169,6 +161,10 @@ void print_help(void) { " --name - print tag name: rpm filename (assumed if no tag given on\n" " command line but without package name).\n" " --group - print tag group: group.\n" + " --size - print tag size: size.\n" + " --serial - print tag serial: serial.\n" + " --summary - print tag summary: summary.\n" + " --description - print tag description: description.\n" " --provides - print tag provides: all provides (mutliple lines).\n" " --requires - print tag requires: all requires (multiple lines).\n" " --files - print tag files: all files (multiple lines).\n" @@ -192,6 +188,10 @@ print_header_flag_interactive(char *in_tag, Header header) else if (!strncmp(in_tag, "files", 5)) print_list_files(header, "%2$s\n", ""); else if (!strncmp(in_tag, "prereqs", 7)) print_list_prereqs(header, "%2$s\n", ""); else if (!strncmp(in_tag, "group", 5)) printf("%s\n", get_name(header, RPMTAG_GROUP)); + else if (!strncmp(in_tag, "summary", 7)) printf("%s\n", get_name(header, RPMTAG_SUMMARY)); + else if (!strncmp(in_tag, "description", 11)) printf("%s\n", get_name(header, RPMTAG_DESCRIPTION)); + else if (!strncmp(in_tag, "size", 4)) printf("%d\n", get_int(header, RPMTAG_SIZE)); + else if (!strncmp(in_tag, "serial", 6)) printf("%d\n", get_int(header, RPMTAG_SERIAL)); else if (!strncmp(in_tag, "name", 4)) printf("%s-%s-%s.%s.rpm\n", get_name(header, RPMTAG_NAME), get_name(header, RPMTAG_VERSION), @@ -205,7 +205,7 @@ printable_header(int quiet, char *name, char sep, char* final) static char buff[128]; int n = sprintf(buff, "%%s%c", sep ? sep : ':'); if (!quiet) n += sprintf(buff + n, "%s%c", name, sep ? sep : ':'); - n += sprintf(buff + n, "%%s"); + n += sprintf(buff + n, !strcmp(name, "size") || !strcmp(name, "serial") ? "%%d" : "%%s"); if (final) n += sprintf(buff + n, "%s", final); return buff; /* static string, this means to use result before calling again */ } @@ -229,6 +229,10 @@ int main(int argc, char **argv) else if (strcmp(argv[i], "--compact") == 0) print_sep = '@'; else if (strcmp(argv[i], "--name") == 0) print_name = 1; else if (strcmp(argv[i], "--group") == 0) print_group = 1; + else if (strcmp(argv[i], "--size") == 0) print_size = 1; + else if (strcmp(argv[i], "--serial") == 0) print_serial = 1; + else if (strcmp(argv[i], "--summary") == 0) print_summary = 1; + else if (strcmp(argv[i], "--description") == 0) print_description = 1; else if (strcmp(argv[i], "--provides") == 0) print_provides = 1; else if (strcmp(argv[i], "--requires") == 0) print_requires = 1; else if (strcmp(argv[i], "--files") == 0) print_files = 1; @@ -248,6 +252,7 @@ int main(int argc, char **argv) } else if (strcmp(argv[i], "--all") == 0) { print_name = 1; print_group = 1; + print_summary = 1; print_provides = 1; print_requires = 1; print_files = 1; @@ -350,8 +355,15 @@ int main(int argc, char **argv) if (print_files) print_list_files(header, printable_header(print_quiet, "files", print_sep, "\n"), name); if (print_prereqs) print_list_prereqs(header, printable_header(print_quiet, "prereqs", print_sep, "\n"), name); if (print_group) printf(printable_header(print_quiet, "group", print_sep, "\n"), name, get_name(header, RPMTAG_GROUP)); + if (print_size) printf(printable_header(print_quiet, "size", print_sep, "\n"), name, get_int(header, RPMTAG_SIZE)); + if (print_serial) printf(printable_header(print_quiet, "serial", print_sep, "\n"), + name, get_int(header, RPMTAG_SERIAL)); + if (print_summary) printf(printable_header(print_quiet, "summary", print_sep, "\n"), + name, get_name(header, RPMTAG_SUMMARY)); + if (print_description) printf(printable_header(print_quiet, "description", print_sep, "\n"), + name, get_name(header, RPMTAG_DESCRIPTION)); if (print_name || (print_provides | print_requires | print_files | print_conflicts | print_obsoletes | print_prereqs | - print_group) == 0) { + print_group | print_size | print_serial | print_summary | print_description) == 0) { if (print_name) printf(printable_header(print_quiet, "name", print_sep, 0), name); printf("%s-%s-%s.%s.rpm\n", name, |