00001
00005 #include "system.h"
00006
00007 #include <rpmlib.h>
00008 #include "debug.h"
00009
00010 const char *const tagName(int tag)
00011 {
00012 int i;
00013 static char nameBuf[128];
00014 char *s, *locale;
00015
00016 switch (tag) {
00017 case RPMDBI_PACKAGES:
00018 strcpy(nameBuf, "Packages");
00019 return nameBuf;
00020 break;
00021 case RPMDBI_DEPENDS:
00022 strcpy(nameBuf, "Depends");
00023 return nameBuf;
00024 break;
00025 case RPMDBI_ADDED:
00026 strcpy(nameBuf, "Added");
00027 return nameBuf;
00028 break;
00029 case RPMDBI_REMOVED:
00030 strcpy(nameBuf, "Removed");
00031 return nameBuf;
00032 break;
00033 case RPMDBI_AVAILABLE:
00034 strcpy(nameBuf, "Available");
00035 return nameBuf;
00036 break;
00037 }
00038
00039
00040 locale = setlocale(LC_ALL, NULL);
00041 if (locale) locale = strdupa(locale);
00042 setlocale(LC_ALL, "C");
00043
00044 strcpy(nameBuf, "(unknown)");
00045 for (i = 0; i < rpmTagTableSize; i++) {
00046 if (tag != rpmTagTable[i].val)
00047 continue;
00048 nameBuf[0] = nameBuf[1] = '\0';
00049 if (rpmTagTable[i].name != NULL)
00050 strcpy(nameBuf, rpmTagTable[i].name + 7);
00051 for (s = nameBuf+1; *s != '\0'; s++)
00052 *s = xtolower(*s);
00053 break;
00054 }
00055
00056
00057 setlocale(LC_ALL, locale);
00058
00059 return nameBuf;
00060 }
00061
00062 int tagValue(const char * tagstr)
00063 {
00064 const struct headerTagTableEntry_s *t;
00065 char *locale;
00066
00067 if (!strcmp(tagstr, "Packages"))
00068 return RPMDBI_PACKAGES;
00069 if (!strcmp(tagstr, "Depends"))
00070 return RPMDBI_DEPENDS;
00071 if (!strcmp(tagstr, "Added"))
00072 return RPMDBI_ADDED;
00073 if (!strcmp(tagstr, "Removed"))
00074 return RPMDBI_REMOVED;
00075 if (!strcmp(tagstr, "Available"))
00076 return RPMDBI_AVAILABLE;
00077
00078
00079 locale = setlocale(LC_ALL, NULL);
00080 if (locale) locale = strdupa(locale);
00081 setlocale(LC_ALL, "C");
00082
00083 for (t = rpmTagTable; t->name != NULL; t++) {
00084 if (!xstrcasecmp(t->name + 7, tagstr)) {
00085
00086 setlocale(LC_ALL, locale);
00087 return t->val;
00088 }
00089 }
00090
00091 setlocale(LC_ALL, locale);
00092 return -1;
00093 }