annotate lib/striconveha.h @ 17363:5a51fb7777a9

sys_select, sys_time: port 2013-01-30 Solaris 2.6 fix to Cygwin Problem reported by Marco Atzeri in <http://lists.gnu.org/archive/html/bug-gnulib/2013-03/msg00000.html>. * lib/sys_select.in.h [HAVE_SYS_SELECT_H && _CYGWIN_SYS_TIME_H]: Simply delegate to the system <sys/select.h> in this case too. Also, pay attention to _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H only if OSF/1, since otherwise Cygwin breaks, and it doesn't seem to be needed on Solaris either. * lib/sys_time.in.h [_CYGWIN_SYS_TIME_H]: Simply delgate to the system <sys/time.h> in this case.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 19 Mar 2013 09:08:47 -0700
parents e542fd46ad6f
children 344018b6e5d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Character set conversion with error handling and autodetection.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16201
diff changeset
2 Copyright (C) 2002, 2005, 2007-2013 Free Software Foundation, Inc.
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 Written by Bruno Haible.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 7931
diff changeset
5 This program is free software: you can redistribute it and/or modify
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 7931
diff changeset
7 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 7931
diff changeset
8 (at your option) any later version.
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 GNU General Public License for more details.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 7931
diff changeset
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18 #ifndef _STRICONVEHA_H
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #define _STRICONVEHA_H
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
7931
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
21 #include <stdbool.h>
11476
d053b39f7091 New include file "iconveh.h".
Bruno Haible <bruno@clisp.org>
parents: 10857
diff changeset
22 #include <stddef.h>
7931
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
23
11476
d053b39f7091 New include file "iconveh.h".
Bruno Haible <bruno@clisp.org>
parents: 10857
diff changeset
24 #include "iconveh.h"
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #ifdef __cplusplus
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 extern "C" {
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #endif
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 /* Convert an entire string from one encoding to another, using iconv.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 The original string is at [SRC,...,SRC+SRCLEN-1].
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 The "from" encoding can also be a name defined for autodetection.
7931
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
35 If TRANSLITERATE is true, transliteration will attempted to avoid conversion
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
36 errors, for iconv implementations that support this. Usually you'll choose
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
37 TRANSLITERATE = true if HANDLER != iconveh_error.
7928
e00d2d470e73 Oops, tweak comment.
Bruno Haible <bruno@clisp.org>
parents: 7927
diff changeset
38 If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this
7927
7ebab05df4f6 Add optional offsets argument to conversion routines.
Bruno Haible <bruno@clisp.org>
parents: 7919
diff changeset
39 array is filled with offsets into the result, i.e. the character starting
7ebab05df4f6 Add optional offsets argument to conversion routines.
Bruno Haible <bruno@clisp.org>
parents: 7919
diff changeset
40 at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]],
7ebab05df4f6 Add optional offsets argument to conversion routines.
Bruno Haible <bruno@clisp.org>
parents: 7919
diff changeset
41 and other offsets are set to (size_t)(-1).
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 *RESULTP and *LENGTH should initially be a scratch buffer and its size,
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 or *RESULTP can initially be NULL.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 May erase the contents of the memory at *RESULTP.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 Return value: 0 if successful, otherwise -1 and errno set.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 If successful: The resulting string is stored in *RESULTP and its length
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 unchanged if no dynamic memory allocation was necessary. */
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 extern int
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 mem_iconveha (const char *src, size_t srclen,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
51 const char *from_codeset, const char *to_codeset,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
52 bool transliterate,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
53 enum iconv_ilseq_handler handler,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
54 size_t *offsets,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
55 char **resultp, size_t *lengthp);
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 /* Convert an entire string from one encoding to another, using iconv.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 The original string is the NUL-terminated string starting at SRC.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 Both the "from" and the "to" encoding must use a single NUL byte at the
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32).
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 The "from" encoding can also be a name defined for autodetection.
7931
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
62 If TRANSLITERATE is true, transliteration will attempted to avoid conversion
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
63 errors, for iconv implementations that support this. Usually you'll choose
0a4679777f66 Add an optional argument specifying transliteration.
Bruno Haible <bruno@clisp.org>
parents: 7928
diff changeset
64 TRANSLITERATE = true if HANDLER != iconveh_error.
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 Allocate a malloced memory block for the result.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 Return value: the freshly allocated resulting NUL-terminated string if
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 successful, otherwise NULL and errno set. */
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 extern char *
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 str_iconveha (const char *src,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
70 const char *from_codeset, const char *to_codeset,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
71 bool transliterate,
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
72 enum iconv_ilseq_handler handler);
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75 /* In the above, FROM_CODESET can also be one of the following values:
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 "autodetect_utf8" supports ISO-8859-1 and UTF-8
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 "autodetect_jp" supports EUC-JP, ISO-2022-JP-2 and SHIFT_JIS
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 "autodetect_kr" supports EUC-KR and ISO-2022-KR
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 More names can be defined for autodetection. */
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 /* Registers an encoding name for autodetection.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 TRY_IN_ORDER is a NULL terminated list of encodings to be tried.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83 Returns 0 upon success, or -1 (with errno set) in case of error.
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 Particular errno values: ENOMEM. */
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 extern int
10857
6b6bd3a71b39 Fix declaration of uniconv_register_autodetect function.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
86 uniconv_register_autodetect (const char *name,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 11476
diff changeset
87 const char * const *try_in_order);
7919
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90 #ifdef __cplusplus
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 }
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 #endif
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
94
b7b7885895a6 New module 'striconveha'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95 #endif /* _STRICONVEHA_H */