summaryrefslogtreecommitdiff
blob: abdcd3228014363301e418ddb0866a3c5ec4bd47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
http://bugs.gentoo.org/334889
https://savannah.gnu.org/bugs/?30612

revision 1.194
date: 2010-08-13 22:50:14 -0400;  author: psmith;  state: Exp;  lines: +9 -6;  commitid: 4UaslPqQHZTs5wKu;
- Fix Savannah bug #30612: handling of archive references with >1 object

Index: read.c
===================================================================
RCS file: /sources/make/make/read.c,v
retrieving revision 1.193
retrieving revision 1.194
diff -u -p -r1.193 -r1.194
--- read.c	13 Jul 2010 01:20:42 -0000	1.193
+++ read.c	14 Aug 2010 02:50:14 -0000	1.194
@@ -3028,7 +3028,7 @@ parse_file_seq (char **stringp, unsigned
             {
               /* This looks like the first element in an open archive group.
                  A valid group MUST have ')' as the last character.  */
-              const char *e = p + nlen;
+              const char *e = p;
               do
                 {
                   e = next_token (e);
@@ -3084,19 +3084,19 @@ parse_file_seq (char **stringp, unsigned
          Go to the next item in the string.  */
       if (flags & PARSEFS_NOGLOB)
         {
-          NEWELT (concat (2, prefix, tp));
+          NEWELT (concat (2, prefix, tmpbuf));
           continue;
         }
 
       /* If we get here we know we're doing glob expansion.
          TP is a string in tmpbuf.  NLEN is no longer used.
          We may need to do more work: after this NAME will be set.  */
-      name = tp;
+      name = tmpbuf;
 
       /* Expand tilde if applicable.  */
-      if (tp[0] == '~')
+      if (tmpbuf[0] == '~')
 	{
-	  tildep = tilde_expand (tp);
+	  tildep = tilde_expand (tmpbuf);
 	  if (tildep != 0)
             name = tildep;
 	}
@@ -3152,7 +3152,10 @@ parse_file_seq (char **stringp, unsigned
             else
               {
                 /* We got a chain of items.  Attach them.  */
-                (*newp)->next = found;
+                if (*newp)
+                  (*newp)->next = found;
+                else
+                  *newp = found;
 
                 /* Find and set the new end.  Massage names if necessary.  */
                 while (1)