Skip site navigation (1) Skip section navigation (2)

Re: BUG #6066: [PATCH] Mark more strings as c-format

From: Christoph Berg <cb(at)df7cb(dot)de>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #6066: [PATCH] Mark more strings as c-format
Date: 2011-06-17 11:10:34
Message-ID: 20110617111033.GD4130@msgid.df7cb.de (view raw or flat)
Thread:
Lists: pgsql-bugs
Re: To pgsql-bugs(at)postgresql(dot)org 2011-06-17 <20110617091114(dot)GC4130(at)msgid(dot)df7cb(dot)de>
> Unfortunately that doesn't help in this case, as the bad string isn't
> tagged as "#, c-format", but still gets used as such. This seems to be
> the case for many errhint() strings. Maybe xgettext should be taught
> to treat all errhint() et al arguments as c-strings.

Here's a patch to implement that, with backend/nls.mk updated.

msgfmt -c is already available in the "maintainer-check-po" target.
I'd assume this was called at least once during the release process.


diff --git a/src/backend/nls.mk b/src/backend/nls.mk
index 1894569..3c3f8ed 100644
*** a/src/backend/nls.mk
--- b/src/backend/nls.mk
*************** GETTEXT_TRIGGERS:= _ errmsg errmsg_plura
*** 6,11 ****
--- 6,15 ----
      errdetail_plural:1,2 errhint errcontext \
      GUC_check_errmsg GUC_check_errdetail GUC_check_errhint \
      write_stderr yyerror parser_yyerror
+ GETTEXT_FLAGS   := errmsg:1:c-format errmsg_plural:1:c-format \
+     errmsg_plural:2:c-format errhint:1:c-format errcontext:1:c-format \
+     GUC_check_errmsg:1:c-format GUC_check_errdetail:1:c-format \
+     GUC_check_errhint:1:c-format write_stderr:1:c-format
  
  gettext-files: distprep
  	find $(srcdir)/ $(srcdir)/../port/ -name '*.c' -print >$@
diff --git a/src/nls-global.mk b/src/nls-global.mk
index 32b3c0f..3aa598f 100644
*** a/src/nls-global.mk
--- b/src/nls-global.mk
***************
*** 12,17 ****
--- 12,20 ----
  # GETTEXT_FILES		-- list of source files that contain message strings
  # GETTEXT_TRIGGERS	-- (optional) list of functions that contain
  #                          translatable strings
+ # GETTEXT_FLAGS		-- (optional) list of gettext --flag arguments to mark
+ #                          function arguments that contain C format strings
+ #                          (functions must be listed in TRIGGERS and FLAGS)
  #
  # That's all, the rest is done here, if --enable-nls was specified.
  #
*************** all-po: $(MO_FILES)
*** 48,54 ****
  ifeq ($(word 1,$(GETTEXT_FILES)),+)
  po/$(CATALOG_NAME).pot: $(word 2, $(GETTEXT_FILES)) $(MAKEFILE_LIST)
  ifdef XGETTEXT
! 	$(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS)) -f $<
  else
  	@echo "You don't have 'xgettext'."; exit 1
  endif
--- 51,57 ----
  ifeq ($(word 1,$(GETTEXT_FILES)),+)
  po/$(CATALOG_NAME).pot: $(word 2, $(GETTEXT_FILES)) $(MAKEFILE_LIST)
  ifdef XGETTEXT
! 	$(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS)) $(addprefix --flag=, $(GETTEXT_FLAGS)) -f $<
  else
  	@echo "You don't have 'xgettext'."; exit 1
  endif
*************** po/$(CATALOG_NAME).pot: $(GETTEXT_FILES)
*** 57,63 ****
  # Change to srcdir explicitly, don't rely on $^.  That way we get
  # consistent #: file references in the po files.
  ifdef XGETTEXT
! 	$(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS)) $(GETTEXT_FILES)
  else
  	@echo "You don't have 'xgettext'."; exit 1
  endif
--- 60,66 ----
  # Change to srcdir explicitly, don't rely on $^.  That way we get
  # consistent #: file references in the po files.
  ifdef XGETTEXT
! 	$(XGETTEXT) -D $(srcdir) -n $(addprefix -k, $(GETTEXT_TRIGGERS)) $(addprefix --flag=, $(GETTEXT_FLAGS)) $(GETTEXT_FILES)
  else
  	@echo "You don't have 'xgettext'."; exit 1
  endif


Christoph
-- 
cb(at)df7cb(dot)de | http://www.df7cb.de/

In response to

Responses

pgsql-bugs by date

Next:From: Антон СтепаненкоDate: 2011-06-17 13:51:00
Subject: Re: could not read block XXXXX in file "base/YYYYY/ZZZZZZ": read only 160 of 8192 bytes
Previous:From: Marinos YannikosDate: 2011-06-17 09:28:12
Subject: Ident authentication fails due to bind error on server (8.4.8)

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group