Bruno Haible 68e2e2c2d1 Improve support for clang on native Windows.
Reported by Kirill Makurin <maiddaisuki@outlook.com> in
<https://lists.gnu.org/archive/html/bug-gettext/2026-01/msg00021.html>.

* libtextstyle/gnulib-local/lib/ostream.oo.h (ostream_printf, ostream_vprintf):
Treat clang like GCC.
* gettext-runtime/libasprintf/vasprintf.h (__attribute__, __format__,
__printf__): Likewise.
* gettext-runtime/libasprintf/autosprintf.in.h (_AUTOSPRINTF_ATTRIBUTE_FORMAT):
Likewise.
* gettext-tools/src/format.h (formatstring_error_logger_t): Likewise.
* gettext-tools/src/if-error.h (if_error, if_verror): Likewise.
* gettext-tools/src/msgl-check.c (formatstring_error_logger): Likewise.
* gettext-tools/src/msgl-merge.c (silent_error_logger): Likewise.
* gettext-tools/src/po-error.h (__attribute__, __format__, __printf__, po_error,
po_error_at_line): Likewise.
* gettext-tools/src/read-po-lex.h (__attribute__, __format__, __printf__):
Likewise.
* gettext-tools/src/xg-check.c (formatstring_error_logger): Likewise.
* gettext-tools/libgettextpo/gettext-po.in.h (struct po_error_handler):
Likewise.
2026-01-11 01:21:58 +01:00
..
2019-02-04 20:56:11 +01:00
2019-02-04 20:56:11 +01:00
2009-06-23 12:10:02 +02:00
2021-06-20 16:33:17 +02:00
2015-10-14 15:00:09 +09:00
2009-06-23 12:10:02 +02:00
2024-11-07 09:51:44 +01:00
2024-11-07 10:16:36 +01:00
2024-11-07 09:51:44 +01:00
2012-02-18 22:28:04 +01:00
2018-01-27 14:25:04 +01:00
2024-11-07 09:51:44 +01:00
2019-05-12 00:21:16 +02:00
2019-02-04 20:56:11 +01:00

            GNU libasprintf - automatic formatted output to strings

This package makes the C formatted output routines (fprintf et al.) usable
in C++ programs.


Sample use
----------

  char *pathname = autosprintf ("%s/%s", directory, filename);
  cerr << autosprintf ("syntax error in %s:%d: %s", filename, line, errstring);


Benefits
--------

The benefits of autosprintf over the usual "piecewise meal" idiom

  cerr << "syntax error in " << filename << ":" << line << ": " << errstring;

are:

  - Reuses of the standard POSIX printf facility. Easy migration from C to C++.

  - English sentences are kept together.

  - Internationalization requires format strings, because
    1. Internationalization requires the ability for the translator to change
       the order of parts of a sentence. The POSIX printf formatted output
       functions (and thus also autosprintf) support this through the %m$ and
       *m$ syntax.
    2. Translators are used to translate one string per sentence, not
       multiple strings per sentence, and not C++ code statements.

  - Reduces the risk of programming errors due to forgotten state in the
    output stream (e.g.  'cout << hex;'  not followed by  'cout << dec;').

The benefits of autosprintf over C sprintf are:

  - Autosprintf avoids buffer overruns and truncated results.
    The C sprintf() function often leads to buffer overruns. On the other
    hand, the C snprintf() function requires extra coding for an a priori
    estimate of the result's size and truncates the result if the estimate
    was too low.

  - Autosprintf avoids memory leaks.
    Temporarily allocated memory is cleaned up automatically.


Installation
------------

See INSTALL. Usually "./configure; make; make install" should work.

The installed files are:
  - An include file "autosprintf.h" which defines the class 'autosprintf',
    in the namespace 'gnu'.
  - A library libasprintf containing this class.


Use
---

To use the class autosprintf, use

  #include "autosprintf.h"
  using gnu::autosprintf;

and link with the linker option

  -lasprintf


Misc notes
----------

An instance of class 'autosprintf' contains the formatted output result;
this string is freed when the instance's destructor is run.

The class name 'autosprintf' is meant to remind the C function sprintf(),
the GNU C library function asprintf(), and the C++ autoptr programming idiom.


Distribution
------------

    https://haible.de/bruno/gnu/libasprintf-1.0.tar.gz

Homepage
--------

    https://haible.de/bruno/packages-libasprintf.html

Bug reports
-----------

Report bugs
  - in the bug tracker at <https://savannah.gnu.org/projects/gettext>
  - or by email to <bug-gettext@gnu.org>.


Bruno Haible <brunoe@clisp.org>