home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / gnu / utils / bug / 2341 < prev    next >
Encoding:
Text File  |  1993-01-07  |  2.1 KB  |  64 lines

  1. Newsgroups: gnu.utils.bug
  2. Path: sparky!uunet!cis.ohio-state.edu!banzai.pcc.COM!jay
  3. From: jay@banzai.pcc.COM (Jay Schuster)
  4. Subject: Make-3.62 (and earlier) vpath bug (with fix)
  5. Message-ID: <C0GJx7.6JF@banzai.PCC.COM>
  6. Summary: Incorrect deletion out of a list
  7. Keywords: GNU make-3.62
  8. Sender: gnulists@ai.mit.edu
  9. Organization: The People's Computer Company, Williston, VT
  10. Distribution: gnu
  11. Date: Thu, 7 Jan 1993 00:31:01 GMT
  12. Approved: bug-gnu-utils@prep.ai.mit.edu
  13. Lines: 49
  14.  
  15. Running GNU Make-3.62 on an IBM RS/6000 running AIX 3.2, using the
  16. builtin alloca() through the -ma compiler flag.
  17.  
  18. The code in construct_vpath_list in vpath.c that deletes items out of
  19. the vpaths list does not work correctly.  When given a `vpath'
  20. directive with no pattern or search path, it should delete everything
  21. out of the list.  It does do that, but leaves the vpaths variable
  22. pointing to freed space, thus messing up any future vpath
  23. additions.  In our case, it was creating a circular list (which
  24. iterated forever, or, when I had linked with the C-alloca, ate up
  25. all the swapspace while doing so).
  26.  
  27. This patch fixes the problem:
  28.  
  29. --- ./vpath.c~    Wed Jan  6 18:11:39 1993
  30. +++ ./vpath.c    Wed Jan  6 19:20:34 1993
  31. @@ -124,8 +124,8 @@
  32.        /* Remove matching listings.  */
  33.        register struct vpath *path, *lastpath;
  34.  
  35. -      lastpath = vpaths;
  36. -      for (path = vpaths; path != 0; lastpath = path, path = path->next)
  37. +      lastpath = NULL;
  38. +      for (path = vpaths; path != 0; path = path->next)
  39.      if (pattern == 0
  40.          || (((percent == 0 && path->percent == 0)
  41.           || (percent - pattern == path->percent - path->pattern))
  42. @@ -132,7 +132,7 @@
  43.          && streq (pattern, path->pattern)))
  44.        {
  45.          /* Remove it from the linked list.  */
  46. -        if (lastpath == vpaths)
  47. +        if (lastpath == NULL)
  48.            vpaths = path->next;
  49.          else
  50.            lastpath->next = path->next;
  51. @@ -142,6 +142,8 @@
  52.          free ((char *) path->searchpath);
  53.          free ((char *) path);
  54.        }
  55. +    else
  56. +      lastpath = path;
  57.        if (pattern != 0)
  58.      free (pattern);
  59.        return;
  60. -- 
  61. Jay Schuster <jay@pcc.COM>    uunet!uvm-gen!banzai!jay, attmail!banzai!jay
  62. The People's Computer Company    `Revolutionary Programming'
  63.  
  64.