Bläddra i källkod

Fix Eterm/eterm problem. findpackage() now does tolower() before searching
for a name, and f_name() uses the name field from the return value of
findpackage().

Adam Heath 25 år sedan
förälder
incheckning
a507a75fa1
4 ändrade filer med 25 tillägg och 7 borttagningar
  1. 6 0
      ChangeLog
  2. 7 0
      debian/changelog
  3. 8 1
      lib/database.c
  4. 4 6
      lib/fields.c

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+Sun Apr 29 22:39:55 CDT 2001 Adam Heath <doogie@debian.org>
+
+  * lib/database.c, lib/fields.c: Fix Eterm/eterm problem.  findpackage()
+    now does tolower() before searching for a name, and f_name() uses the
+    name field from the return value of findpackage().
+
 Sun Apr 29 22:08:37 CDT 2001 Adam Heath <doogie@debian.org>
 
   * Makefile.conf.in, configure.in, debian/control, debian/rules,

+ 7 - 0
debian/changelog

@@ -1,3 +1,10 @@
+dpkg (1.10) unstable; urgency=low
+
+  * Fixed upper/lowercase problems with package names. Closes: Bug#58091
+    (and 3 others).
+
+ -- Wichert Akkerman <wakkerma@debian.org>  UNRELEASED
+ 
 dpkg (1.9.1) unstable; urgency=low
 
   * Fix segfault with empty status and available, and when missing a

+ 8 - 1
lib/database.c

@@ -169,9 +169,15 @@ int informative(struct pkginfo *pkg, struct pkginfoperfile *info) {
   return 0;
 }
 
-struct pkginfo *findpackage(const char *name) {
+struct pkginfo *findpackage(const char *inname) {
   struct pkginfo **pointerp, *newpkg;
+  char *name = strdup(inname), *p;
 
+  if (name == NULL)
+    ohshite(_("couldn't allocate memory for strdup in findpackage(%s)"),inname);
+  p= name;
+  while(*p) *p++= tolower(*p);
+  
   pointerp= bins + (hash(name) & (BINS-1));
   while (*pointerp && strcasecmp((*pointerp)->name,name))
     pointerp= &(*pointerp)->next;
@@ -184,6 +190,7 @@ struct pkginfo *findpackage(const char *name) {
   *pointerp= newpkg;
   npackages++;
 
+  free(name);
   return newpkg;
 }
 

+ 4 - 6
lib/fields.c

@@ -71,12 +71,10 @@ void f_name(struct pkginfo *pigp, struct pkginfoperfile *pifp, enum parsedbflags
   const char *e;
   if ((e= illegal_packagename(value,NULL)) != NULL)
     parseerr(NULL,filename,lno, warnto,warncount,pigp,0, _("invalid package name (%.250s)"),e);
-  pigp->name= nfstrsave(value);
-  findpackage(value); /* We discard the value from findpackage, but calling it
-                       * forces an entry in the hash table to be made if it isn't
-                       * already.  This is so that we don't reorder the file
-                       * unnecessarily (doing so is bad for debugging).
-                       */
+  pigp->name= findpackage(value)->name;
+  /* We use the new name, as findpackage() may have
+     done a tolower for us.
+   */
 }
 
 void f_filecharf(struct pkginfo *pigp, struct pkginfoperfile *pifp,