diff src/quickfix.c @ 15470:55ccc2d353bd v8.1.0743

patch 8.1.0743: giving error messages is not flexible commit https://github.com/vim/vim/commit/f9e3e09fdc93be9f0d47afbc6c7df1188c2a5a0d Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 13 23:38:42 2019 +0100 patch 8.1.0743: giving error messages is not flexible Problem: Giving error messages is not flexible. Solution: Add semsg(). Change argument from "char_u *" to "char *", also for msg() and get rid of most MSG macros. (Ozaki Kiichi, closes #3302) Also make emsg() accept a "char *" argument. Get rid of an enormous number of type casts.
author Bram Moolenaar <Bram@vim.org>
date Sun, 13 Jan 2019 23:45:08 +0100
parents 90c8ff9c19ee
children 98c35d312987
line wrap: on
line diff
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -239,17 +239,14 @@ efmpat_to_regpat(
 	char_u	*regpat,
 	efm_T	*efminfo,
 	int	idx,
-	int	round,
-	char_u	*errmsg)
+	int	round)
 {
     char_u	*srcptr;
 
     if (efminfo->addr[idx])
     {
 	// Each errorformat pattern can occur only once
-	sprintf((char *)errmsg,
-		_("E372: Too many %%%c in format string"), *efmpat);
-	EMSG(errmsg);
+	semsg(_("E372: Too many %%%c in format string"), *efmpat);
 	return NULL;
     }
     if ((idx && idx < 6
@@ -257,9 +254,7 @@ efmpat_to_regpat(
 	    || (idx == 6
 		&& vim_strchr((char_u *)"OPQ", efminfo->prefix) == NULL))
     {
-	sprintf((char *)errmsg,
-		_("E373: Unexpected %%%c in format string"), *efmpat);
-	EMSG(errmsg);
+	semsg(_("E373: Unexpected %%%c in format string"), *efmpat);
 	return NULL;
     }
     efminfo->addr[idx] = (char_u)++round;
@@ -316,8 +311,7 @@ scanf_fmt_to_regpat(
 	char_u	**pefmp,
 	char_u	*efm,
 	int	len,
-	char_u	*regpat,
-	char_u	*errmsg)
+	char_u	*regpat)
 {
     char_u	*efmp = *pefmp;
 
@@ -335,7 +329,7 @@ scanf_fmt_to_regpat(
 		    // skip ;
 		if (efmp == efm + len)
 		{
-		    EMSG(_("E374: Missing ] in format string"));
+		    emsg(_("E374: Missing ] in format string"));
 		    return NULL;
 		}
 	    }
@@ -348,9 +342,7 @@ scanf_fmt_to_regpat(
     else
     {
 	// TODO: scanf()-like: %*ud, %*3c, %*f, ... ?
-	sprintf((char *)errmsg,
-		_("E375: Unsupported %%%c in format string"), *efmp);
-	EMSG(errmsg);
+	semsg(_("E375: Unsupported %%%c in format string"), *efmp);
 	return NULL;
     }
 
@@ -363,7 +355,7 @@ scanf_fmt_to_regpat(
  * Analyze/parse an errorformat prefix.
  */
     static char_u *
-efm_analyze_prefix(char_u *efmp, efm_T *efminfo, char_u *errmsg)
+efm_analyze_prefix(char_u *efmp, efm_T *efminfo)
 {
     if (vim_strchr((char_u *)"+-", *efmp) != NULL)
 	efminfo->flags = *efmp++;
@@ -371,9 +363,7 @@ efm_analyze_prefix(char_u *efmp, efm_T *
 	efminfo->prefix = *efmp;
     else
     {
-	sprintf((char *)errmsg,
-		_("E376: Invalid %%%c in format string prefix"), *efmp);
-	EMSG(errmsg);
+	semsg(_("E376: Invalid %%%c in format string prefix"), *efmp);
 	return NULL;
     }
 
@@ -391,8 +381,7 @@ efm_to_regpat(
 	char_u	*efm,
 	int	len,
 	efm_T	*fmt_ptr,
-	char_u	*regpat,
-	char_u	*errmsg)
+	char_u	*regpat)
 {
     char_u	*ptr;
     char_u	*efmp;
@@ -413,8 +402,7 @@ efm_to_regpat(
 		    break;
 	    if (idx < FMT_PATTERNS)
 	    {
-		ptr = efmpat_to_regpat(efmp, ptr, fmt_ptr, idx, round,
-								errmsg);
+		ptr = efmpat_to_regpat(efmp, ptr, fmt_ptr, idx, round);
 		if (ptr == NULL)
 		    return FAIL;
 		round++;
@@ -422,7 +410,7 @@ efm_to_regpat(
 	    else if (*efmp == '*')
 	    {
 		++efmp;
-		ptr = scanf_fmt_to_regpat(&efmp, efm, len, ptr, errmsg);
+		ptr = scanf_fmt_to_regpat(&efmp, efm, len, ptr);
 		if (ptr == NULL)
 		    return FAIL;
 	    }
@@ -436,15 +424,13 @@ efm_to_regpat(
 	    {
 		// prefix is allowed only at the beginning of the errorformat
 		// option part
-		efmp = efm_analyze_prefix(efmp, fmt_ptr, errmsg);
+		efmp = efm_analyze_prefix(efmp, fmt_ptr);
 		if (efmp == NULL)
 		    return FAIL;
 	    }
 	    else
 	    {
-		sprintf((char *)errmsg,
-			_("E377: Invalid %%%c in format string"), *efmp);
-		EMSG(errmsg);
+		semsg(_("E377: Invalid %%%c in format string"), *efmp);
 		return FAIL;
 	    }
 	}
@@ -526,8 +512,6 @@ efm_option_part_len(char_u *efm)
     static efm_T *
 parse_efm_option(char_u *efm)
 {
-    char_u	*errmsg = NULL;
-    int		errmsglen;
     efm_T	*fmt_ptr = NULL;
     efm_T	*fmt_first = NULL;
     efm_T	*fmt_last = NULL;
@@ -535,11 +519,6 @@ parse_efm_option(char_u *efm)
     int		len;
     int		sz;
 
-    errmsglen = CMDBUFFSIZE + 1;
-    errmsg = alloc_id(errmsglen, aid_qf_errmsg);
-    if (errmsg == NULL)
-	goto parse_efm_end;
-
     // Each part of the format string is copied and modified from errorformat
     // to regex prog.  Only a few % characters are allowed.
 
@@ -563,7 +542,7 @@ parse_efm_option(char_u *efm)
 	// Isolate one part in the 'errorformat' option
 	len = efm_option_part_len(efm);
 
-	if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == FAIL)
+	if (efm_to_regpat(efm, len, fmt_ptr, fmtstr) == FAIL)
 	    goto parse_efm_error;
 	if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
 	    goto parse_efm_error;
@@ -572,7 +551,7 @@ parse_efm_option(char_u *efm)
     }
 
     if (fmt_first == NULL)	// nothing found
-	EMSG(_("E378: 'errorformat' contains no pattern"));
+	emsg(_("E378: 'errorformat' contains no pattern"));
 
     goto parse_efm_end;
 
@@ -581,7 +560,6 @@ parse_efm_error:
 
 parse_efm_end:
     vim_free(fmtstr);
-    vim_free(errmsg);
 
     return fmt_first;
 }
@@ -1271,7 +1249,7 @@ qf_parse_dir_pfx(int idx, qffields_T *fi
     {
 	if (*fields->namebuf == NUL)
 	{
-	    EMSG(_("E379: Missing or empty directory name"));
+	    emsg(_("E379: Missing or empty directory name"));
 	    return QF_FAIL;
 	}
 	qfl->qf_directory =
@@ -1568,7 +1546,7 @@ qf_setup_state(
 
     if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL)
     {
-	EMSG2(_(e_openerrf), efile);
+	semsg(_(e_openerrf), efile);
 	return FAIL;
     }
 
@@ -1751,7 +1729,7 @@ qf_init_ext(
 	retval = qfl->qf_count;
 	goto qf_init_end;
     }
-    EMSG(_(e_readerrf));
+    emsg(_(e_readerrf));
 error2:
     if (!adding)
     {
@@ -1968,7 +1946,7 @@ decr_quickfix_busy(void)
 #ifdef ABORT_ON_INTERNAL_ERROR
     if (quickfix_busy < 0)
     {
-	EMSG("quickfix_busy has become negative");
+	emsg("quickfix_busy has become negative");
 	abort();
     }
 #endif
@@ -1980,7 +1958,7 @@ check_quickfix_busy(void)
 {
     if (quickfix_busy != 0)
     {
-	EMSGN("quickfix_busy not zero on exit: %ld", (long)quickfix_busy);
+	semsg("quickfix_busy not zero on exit: %ld", (long)quickfix_busy);
 # ifdef ABORT_ON_INTERNAL_ERROR
 	abort();
 # endif
@@ -2635,7 +2613,7 @@ get_nth_valid_entry(
 	    qf_idx = prev_index;
 	    if (err != NULL)
 	    {
-		EMSG(_(err));
+		emsg(_(err));
 		return NULL;
 	    }
 	    break;
@@ -3041,14 +3019,14 @@ qf_jump_edit_buffer(
     // present.
     if (qfl_type == QFLT_LOCATION && !win_valid_any_tab(oldwin))
     {
-	EMSG(_("E924: Current window was closed"));
+	emsg(_("E924: Current window was closed"));
 	*opened_window = FALSE;
 	return NOTDONE;
     }
 
     if (qfl_type == QFLT_QUICKFIX && !qflist_valid(NULL, save_qfid))
     {
-	EMSG(_("E925: Current quickfix was changed"));
+	emsg(_("E925: Current quickfix was changed"));
 	return NOTDONE;
     }
 
@@ -3056,9 +3034,9 @@ qf_jump_edit_buffer(
 	    || !is_qf_entry_present(qfl, qf_ptr))
     {
 	if (qfl_type == QFLT_QUICKFIX)
-	    EMSG(_("E925: Current quickfix was changed"));
+	    emsg(_("E925: Current quickfix was changed"));
 	else
-	    EMSG(_(e_loc_list_changed));
+	    emsg(_(e_loc_list_changed));
 	return NOTDONE;
     }
 
@@ -3315,7 +3293,7 @@ qf_jump_newwin(qf_info_T	*qi,
 
     if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist))
     {
-	EMSG(_(e_quickfix));
+	emsg(_(e_quickfix));
 	return;
     }
 
@@ -3497,14 +3475,14 @@ qf_list(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
 
     if (qf_stack_empty(qi) || qf_list_empty(qi, qi->qf_curlist))
     {
-	EMSG(_(e_quickfix));
+	emsg(_(e_quickfix));
 	return;
     }
     if (*arg == '+')
@@ -3514,7 +3492,7 @@ qf_list(exarg_T *eap)
     }
     if (!get_list_range(&arg, &idx1, &idx2) || *arg != NUL)
     {
-	EMSG(_(e_trailing));
+	emsg(_(e_trailing));
 	return;
     }
     qfl = &qi->qf_lists[qi->qf_curlist];
@@ -3643,7 +3621,7 @@ qf_age(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
@@ -3658,7 +3636,7 @@ qf_age(exarg_T *eap)
 	{
 	    if (qi->qf_curlist == 0)
 	    {
-		EMSG(_("E380: At bottom of quickfix stack"));
+		emsg(_("E380: At bottom of quickfix stack"));
 		break;
 	    }
 	    --qi->qf_curlist;
@@ -3667,7 +3645,7 @@ qf_age(exarg_T *eap)
 	{
 	    if (qi->qf_curlist >= qi->qf_listcount - 1)
 	    {
-		EMSG(_("E381: At top of quickfix stack"));
+		emsg(_("E381: At top of quickfix stack"));
 		break;
 	    }
 	    ++qi->qf_curlist;
@@ -3870,7 +3848,7 @@ qf_view_result(int split)
 
     if (qf_list_empty(qi, qi->qf_curlist))
     {
-	EMSG(_(e_quickfix));
+	emsg(_(e_quickfix));
 	return;
     }
 
@@ -4081,7 +4059,7 @@ ex_copen(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
@@ -4163,7 +4141,7 @@ ex_cbottom(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
@@ -4609,7 +4587,7 @@ get_mef_name(void)
     {
 	name = vim_tempname('e', FALSE);
 	if (name == NULL)
-	    EMSG(_(e_notmp));
+	    emsg(_(e_notmp));
 	return name;
     }
 
@@ -4941,7 +4919,7 @@ ex_cc(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
@@ -4992,7 +4970,7 @@ ex_cnext(exarg_T *eap)
 	qi = GET_LOC_LIST(curwin);
 	if (qi == NULL)
 	{
-	    EMSG(_(e_loclist));
+	    emsg(_(e_loclist));
 	    return;
 	}
     }
@@ -5148,7 +5126,7 @@ vgr_init_regmatch(regmmatch_T *regmatch,
 	// Pattern is empty, use last search pattern.
 	if (last_search_pat() == NULL)
 	{
-	    EMSG(_(e_noprevre));
+	    emsg(_(e_noprevre));
 	    return;
 	}
 	regmatch->regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
@@ -5238,7 +5216,7 @@ vgr_qflist_valid(
 	if (wp != NULL)
 	{
 	    // An autocmd has freed the location list.
-	    EMSG(_(e_loc_list_changed));
+	    emsg(_(e_loc_list_changed));
 	    return FALSE;
 	}
 	else
@@ -5417,7 +5395,7 @@ ex_vimgrep(exarg_T *eap)
     p = skip_vimgrep_pat(eap->arg, &s, &flags);
     if (p == NULL)
     {
-	EMSG(_(e_invalpat));
+	emsg(_(e_invalpat));
 	goto theend;
     }
 
@@ -5428,7 +5406,7 @@ ex_vimgrep(exarg_T *eap)
     p = skipwhite(p);
     if (*p == NUL)
     {
-	EMSG(_("E683: File name missing or invalid pattern"));
+	emsg(_("E683: File name missing or invalid pattern"));
 	goto theend;
     }
 
@@ -5444,7 +5422,7 @@ ex_vimgrep(exarg_T *eap)
 	goto theend;
     if (fcount == 0)
     {
-	EMSG(_(e_nomatch));
+	emsg(_(e_nomatch));
 	goto theend;
     }
 
@@ -5505,7 +5483,7 @@ ex_vimgrep(exarg_T *eap)
 	if (buf == NULL)
 	{
 	    if (!got_int)
-		smsg((char_u *)_("Cannot open file \"%s\""), fname);
+		smsg(_("Cannot open file \"%s\""), fname);
 	}
 	else
 	{
@@ -5608,7 +5586,7 @@ ex_vimgrep(exarg_T *eap)
 		    first_match_buf, target_dir);
     }
     else
-	EMSG2(_(e_nomatch2), s);
+	semsg(_(e_nomatch2), s);
 
     decr_quickfix_busy();
 
@@ -6285,7 +6263,7 @@ qf_add_entry_from_dict(
 	if (!did_bufnr_emsg)
 	{
 	    did_bufnr_emsg = TRUE;
-	    EMSGN(_("E92: Buffer %ld not found"), bufnum);
+	    semsg(_("E92: Buffer %ld not found"), bufnum);
 	}
 	valid = FALSE;
 	bufnum = 0;
@@ -6864,9 +6842,9 @@ ex_cbuffer(exarg_T *eap)
     else if (*skipwhite(skipdigits(eap->arg)) == NUL)
 	buf = buflist_findnr(atoi((char *)eap->arg));
     if (buf == NULL)
-	EMSG(_(e_invarg));
+	emsg(_(e_invarg));
     else if (buf->b_ml.ml_mfp == NULL)
-	EMSG(_("E681: Buffer is not loaded"));
+	emsg(_("E681: Buffer is not loaded"));
     else
     {
 	if (eap->addr_count == 0)
@@ -6876,7 +6854,7 @@ ex_cbuffer(exarg_T *eap)
 	}
 	if (eap->line1 < 1 || eap->line1 > buf->b_ml.ml_line_count
 		|| eap->line2 < 1 || eap->line2 > buf->b_ml.ml_line_count)
-	    EMSG(_(e_invrange));
+	    emsg(_(e_invrange));
 	else
 	{
 	    char_u *qf_title = qf_cmdtitle(*eap->cmdlinep);
@@ -7011,7 +6989,7 @@ ex_cexpr(exarg_T *eap)
 	    decr_quickfix_busy();
 	}
 	else
-	    EMSG(_("E777: String or List expected"));
+	    emsg(_("E777: String or List expected"));
 cleanup:
 	free_tv(tv);
     }
@@ -7310,7 +7288,7 @@ ex_helpgrep(exarg_T *eap)
     if (!qf_list_empty(qi, qi->qf_curlist))
 	qf_jump(qi, 0, 0, FALSE);
     else
-	EMSG2(_(e_nomatch2), eap->arg);
+	semsg(_(e_nomatch2), eap->arg);
 
     decr_quickfix_busy();