Main Page   Modules   Data Structures   File List   Data Fields   Globals   Related Pages  

lib/tagName.c

Go to the documentation of this file.
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];   /* XXX yuk */
00014     char *s, *locale;
00015 
00016     switch (tag) {
00017     case RPMDBI_PACKAGES:
00018         strcpy(nameBuf, "Packages");
00019         return nameBuf;
00020         /*@notreached@*/ break;
00021     case RPMDBI_DEPENDS:
00022         strcpy(nameBuf, "Depends");
00023         return nameBuf;
00024         /*@notreached@*/ break;
00025     case RPMDBI_ADDED:
00026         strcpy(nameBuf, "Added");
00027         return nameBuf;
00028         /*@notreached@*/ break;
00029     case RPMDBI_REMOVED:
00030         strcpy(nameBuf, "Removed");
00031         return nameBuf;
00032         /*@notreached@*/ break;
00033     case RPMDBI_AVAILABLE:
00034         strcpy(nameBuf, "Available");
00035         return nameBuf;
00036         /*@notreached@*/ break;
00037     }
00038 
00039     /* Turkic locales have tolower('I') != 'i' */
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)        /* XXX programmer error. */
00050             strcpy(nameBuf, rpmTagTable[i].name + 7);
00051         for (s = nameBuf+1; *s != '\0'; s++)
00052             *s = xtolower(*s);
00053         break;
00054     }
00055     
00056     /* restore back the locale setting */
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     /* Turkic locales have tolower('I') != 'i' */
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             /* restore back the locale setting */
00086             setlocale(LC_ALL, locale);
00087             return t->val;
00088         }
00089     }
00090     /* restore back the locale setting */
00091     setlocale(LC_ALL, locale);
00092     return -1;
00093 }

Generated on Wed Mar 13 15:34:49 2002 for rpm by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002