10 static char * permsFormat(int_32 type, const void * data,
11 char * formatPrefix, int padding, int element);
12 static char * depflagsFormat(int_32 type, const void * data,
13 char * formatPrefix, int padding, int element);
14 static char * fflagsFormat(int_32 type, const void * data,
15 char * formatPrefix, int padding, int element);
16 static char * permsString(int mode);
18 const struct headerSprintfExtension rpmHeaderFormats[] = {
19 { HEADER_EXT_FORMAT, "depflags", { depflagsFormat } },
20 { HEADER_EXT_FORMAT, "fflags", { fflagsFormat } },
21 { HEADER_EXT_FORMAT, "perms", { permsFormat } },
22 { HEADER_EXT_FORMAT, "permissions", { permsFormat } },
23 { HEADER_EXT_MORE, NULL, { (void *) headerDefaultFormats } }
26 static char * permsString(int mode) {
27 char * perms = malloc(11);
29 strcpy(perms, "-----------");
31 if (mode & S_ISVTX) perms[10] = 't';
33 if (mode & S_IRUSR) perms[1] = 'r';
34 if (mode & S_IWUSR) perms[2] = 'w';
35 if (mode & S_IXUSR) perms[3] = 'x';
37 if (mode & S_IRGRP) perms[4] = 'r';
38 if (mode & S_IWGRP) perms[5] = 'w';
39 if (mode & S_IXGRP) perms[6] = 'x';
41 if (mode & S_IROTH) perms[7] = 'r';
42 if (mode & S_IWOTH) perms[8] = 'w';
43 if (mode & S_IXOTH) perms[9] = 'x';
61 else if (S_ISLNK(mode)) {
64 else if (S_ISFIFO(mode))
66 else if (S_ISSOCK(mode))
68 else if (S_ISCHR(mode)) {
70 } else if (S_ISBLK(mode)) {
77 static char * permsFormat(int_32 type, const void * data,
78 char * formatPrefix, int padding, int element) {
82 if (type != RPM_INT32_TYPE) {
84 strcpy(val, "(not a number)");
86 val = malloc(15 + padding);
87 strcat(formatPrefix, "s");
88 buf = permsString(*((int_32 *) data));
89 sprintf(val, formatPrefix, buf);
96 static char * fflagsFormat(int_32 type, const void * data,
97 char * formatPrefix, int padding, int element) {
100 int anint = *((int_32 *) data);
102 if (type != RPM_INT32_TYPE) {
104 strcpy(val, "(not a number)");
107 if (anint & RPMFILE_DOC)
109 if (anint & RPMFILE_CONFIG)
112 val = malloc(5 + padding);
113 strcat(formatPrefix, "s");
114 sprintf(val, formatPrefix, buf);
120 static char * depflagsFormat(int_32 type, const void * data,
121 char * formatPrefix, int padding, int element) {
124 int anint = *((int_32 *) data);
126 if (type != RPM_INT32_TYPE) {
128 strcpy(val, "(not a number)");
132 if (anint & RPMSENSE_LESS)
134 if (anint & RPMSENSE_GREATER)
136 if (anint & RPMSENSE_EQUAL)
138 if (anint & RPMSENSE_SERIAL)
141 val = malloc(5 + padding);
142 strcat(formatPrefix, "s");
143 sprintf(val, formatPrefix, buf);