comparison src/sign.c @ 26434:f612c41cfd94 v8.2.3748

patch 8.2.3748: giving an error for an empty sign argument breaks a plugin Commit: https://github.com/vim/vim/commit/e5710a02cb78c2a0a868ea55740835c78ddecbb4 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Dec 5 19:10:04 2021 +0000 patch 8.2.3748: giving an error for an empty sign argument breaks a plugin Problem: Giving an error for an empty sign argument breaks a plugin. Solution: Do not give an error.
author Bram Moolenaar <Bram@vim.org>
date Sun, 05 Dec 2021 20:15:03 +0100
parents 99a512bd8423
children 84d60deb8f82
comparison
equal deleted inserted replaced
26433:6d49ab05b0e9 26434:f612c41cfd94
1308 # endif 1308 # endif
1309 1309
1310 return lnum; 1310 return lnum;
1311 } 1311 }
1312 1312
1313 static int
1314 check_empty_group(size_t len, char *name)
1315 {
1316 if (len == 0)
1317 {
1318 semsg(_(e_group_name_missing_for_str), name);
1319 return FAIL;
1320 }
1321 return OK;
1322 }
1323
1324 /* 1313 /*
1325 * ":sign define {name} ..." command 1314 * ":sign define {name} ..." command
1326 */ 1315 */
1327 static void 1316 static void
1328 sign_define_cmd(char_u *sign_name, char_u *cmdline) 1317 sign_define_cmd(char_u *sign_name, char_u *cmdline)
1333 char_u *text = NULL; 1322 char_u *text = NULL;
1334 char_u *linehl = NULL; 1323 char_u *linehl = NULL;
1335 char_u *texthl = NULL; 1324 char_u *texthl = NULL;
1336 char_u *culhl = NULL; 1325 char_u *culhl = NULL;
1337 int failed = FALSE; 1326 int failed = FALSE;
1338 sign_T *sp_prev;
1339 int exists;
1340
1341 exists = sign_find(sign_name, &sp_prev) != NULL;
1342 1327
1343 // set values for a defined sign. 1328 // set values for a defined sign.
1344 for (;;) 1329 for (;;)
1345 { 1330 {
1346 arg = skipwhite(p); 1331 arg = skipwhite(p);
1358 text = vim_strnsave(arg, p - arg); 1343 text = vim_strnsave(arg, p - arg);
1359 } 1344 }
1360 else if (STRNCMP(arg, "linehl=", 7) == 0) 1345 else if (STRNCMP(arg, "linehl=", 7) == 0)
1361 { 1346 {
1362 arg += 7; 1347 arg += 7;
1363 if (!exists && check_empty_group(p - arg, "linehl") == FAIL)
1364 {
1365 failed = TRUE;
1366 break;
1367 }
1368 linehl = vim_strnsave(arg, p - arg); 1348 linehl = vim_strnsave(arg, p - arg);
1369 } 1349 }
1370 else if (STRNCMP(arg, "texthl=", 7) == 0) 1350 else if (STRNCMP(arg, "texthl=", 7) == 0)
1371 { 1351 {
1372 arg += 7; 1352 arg += 7;
1373 if (!exists && check_empty_group(p - arg, "texthl") == FAIL)
1374 {
1375 failed = TRUE;
1376 break;
1377 }
1378 texthl = vim_strnsave(arg, p - arg); 1353 texthl = vim_strnsave(arg, p - arg);
1379 } 1354 }
1380 else if (STRNCMP(arg, "culhl=", 6) == 0) 1355 else if (STRNCMP(arg, "culhl=", 6) == 0)
1381 { 1356 {
1382 arg += 6; 1357 arg += 6;
1383 if (!exists && check_empty_group(p - arg, "culhl") == FAIL)
1384 {
1385 failed = TRUE;
1386 break;
1387 }
1388 culhl = vim_strnsave(arg, p - arg); 1358 culhl = vim_strnsave(arg, p - arg);
1389 } 1359 }
1390 else 1360 else
1391 { 1361 {
1392 semsg(_(e_invarg2), arg); 1362 semsg(_(e_invarg2), arg);