git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] gettext.h: add parentheses around N_ expansion

From
Kyle J. McKay <mackyle@gmail.com>
Date
Jan 6, 2015, 10:34 UTC
Message-ID
<f67db70c63f8dcbfc58d7ffda86ff10@74d39fa044aa309eaea14b9f57fe79c>
In-Reply-To
<ecb18f9d6ac56da0a61c3b98f8f2236@74d39fa044aa309eaea14b9f57fe79c>

The N_ macro is used to mark strings for translation without actually translating them. At runtime the string is expected to be passed to the gettext API for translation.

If two N_ macro invocations appear next to each other with only whitespace (or nothing at all) between them, the two separate strings will be marked for translation, but the preprocessor will then combine the strings into one and at runtime the string passed to gettext will not match the strings that were translated.

Avoid this by adding parentheses around the expansion of the N_ macro so that instead of ending up with two adjacent strings that are then combined by the preprocessor, two adjacent strings surrounded by parentheses result instead which causes a compile error so the mistake can be quickly found and corrected.

Signed-off-by: Kyle J. McKay <mackyle@gmail.com>
---
This patch is optional, but prevents the problem fixed by 1/2
from recurring.
 gettext.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gettext.h b/gettext.h
index 7671d09d..d11a4139 100644
--- a/gettext.h
+++ b/gettext.h
@@ -63,6 +63,6 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n)
 }
 
 /* Mark msgid for translation but do not translate it. */
-#define N_(msgid) msgid
+#define N_(msgid) (msgid)
 
 #endif
-- 
2.1.4
Previous: Kyle J. McKayNext: Ramsay Jones
Message 2 of 6 in “log.c: fix translation markings”
  1. 1/2 log.c: fix translation markingsKyle J. McKay, Jan 6, 2015
  2. 2/2 gettext.h: add parentheses around N_ expansionKyle J. McKay, Jan 6, 2015
  3. Ramsay JonesJan 6, 2015
  4. Kyle J. McKayJan 6, 2015
  5. Andreas SchwabJan 6, 2015
  6. Junio C HamanoJan 6, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.