]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.024 v7.3.024
authorBram Moolenaar <Bram@vim.org>
Wed, 13 Oct 2010 14:44:23 +0000 (16:44 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 13 Oct 2010 14:44:23 +0000 (16:44 +0200)
Problem:    Named signs do not use a negative number as intended.
Solution:   Fix the numbering of named signs. (Xavier de Gaye)

src/ex_cmds.c
src/version.c

index d53652fda2ee02fd25cdaf42eb11f63ec0e0bfcd..e8b39b3c8f14042f45b26ada2b0385180b7fe156 100644 (file)
@@ -6670,11 +6670,6 @@ ex_sign(eap)
                    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
                    if (sp == NULL)
                        return;
-                   if (sp_prev == NULL)
-                       first_sign = sp;
-                   else
-                       sp_prev->sn_next = sp;
-                   sp->sn_name = vim_strnsave(arg, (int)(p - arg));
 
                    /* If the name is a number use that for the typenr,
                     * otherwise use a negative number. */
@@ -6687,13 +6682,14 @@ ex_sign(eap)
 
                        for (lp = first_sign; lp != NULL; lp = lp->sn_next)
                        {
-                           if (lp->sn_typenr == last_sign_typenr)
+                           if (lp->sn_typenr == -last_sign_typenr)
                            {
                                --last_sign_typenr;
                                if (last_sign_typenr == 0)
                                    last_sign_typenr = MAX_TYPENR;
                                if (last_sign_typenr == start)
                                {
+                                   vim_free(sp);
                                    EMSG(_("E612: Too many signs defined"));
                                    return;
                                }
@@ -6702,10 +6698,17 @@ ex_sign(eap)
                            }
                        }
 
-                       sp->sn_typenr = last_sign_typenr--;
-                       if (last_sign_typenr == 0)
+                       sp->sn_typenr = -last_sign_typenr;
+                       if (--last_sign_typenr == 0)
                            last_sign_typenr = MAX_TYPENR; /* wrap around */
                    }
+
+                   /* add the new sign to the list of signs */
+                   if (sp_prev == NULL)
+                       first_sign = sp;
+                   else
+                       sp_prev->sn_next = sp;
+                   sp->sn_name = vim_strnsave(arg, (int)(p - arg));
                }
 
                /* set values for a defined sign. */
index 6b7742e97ef698844a0f8ed80f07a9082a6c10af..882f9a14ec6d54365c52e4369b74d81ae1cc4e08 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    24,
 /**/
     23,
 /**/