annotate lib/xstriconv.c @ 17429:88b6febaed97

tests: port large-fd POSIX spawn tests to OS X Problem reported by Daiki Ueno in <http://lists.gnu.org/archive/html/bug-gnulib/2013-06/msg00031.html>. * tests/test-posix_spawn_file_actions_addclose.c: * tests/test-posix_spawn_file_actions_adddup2.c: * tests/test-posix_spawn_file_actions_addopen.c: Include <limits.h>, for OPEN_MAX, if available. (big_fd): New static function. (main): Use it.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 11 Jun 2013 00:10:21 -0700
parents e542fd46ad6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Charset conversion with out-of-memory checking.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16201
diff changeset
2 Copyright (C) 2001-2004, 2006, 2009-2013 Free Software Foundation, Inc.
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 Written by Bruno Haible.
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 7304
diff changeset
5 This program is free software: you can redistribute it and/or modify
7262
7d52a0015061 New module 'xstriconv'.
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: 7304
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: 7304
diff changeset
8 (at your option) any later version.
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 GNU General Public License for more details.
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14
7d52a0015061 New module 'xstriconv'.
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: 7304
diff changeset
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17
7304
1c4ed7637c24 Include <config.h> unconditionally.
Bruno Haible <bruno@clisp.org>
parents: 7262
diff changeset
18 #include <config.h>
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 /* Specification. */
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "xstriconv.h"
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 #include <errno.h>
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 #include "striconv.h"
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include "xalloc.h"
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 #if HAVE_ICONV
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31 int
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 xmem_cd_iconv (const char *src, size_t srclen, iconv_t cd,
12421
e8d2c6fc33ad Use spaces for indentation, not tabs.
Bruno Haible <bruno@clisp.org>
parents: 9309
diff changeset
33 char **resultp, size_t *lengthp)
7262
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 {
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 int retval = mem_cd_iconv (src, srclen, cd, resultp, lengthp);
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 if (retval < 0 && errno == ENOMEM)
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 xalloc_die ();
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 return retval;
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 }
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 char *
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 xstr_cd_iconv (const char *src, iconv_t cd)
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 {
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 char *result = str_cd_iconv (src, cd);
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 if (result == NULL && errno == ENOMEM)
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 xalloc_die ();
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 return result;
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 }
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 #endif
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 char *
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 xstr_iconv (const char *src, const char *from_codeset, const char *to_codeset)
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 {
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 char *result = str_iconv (src, from_codeset, to_codeset);
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 if (result == NULL && errno == ENOMEM)
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 xalloc_die ();
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 return result;
7d52a0015061 New module 'xstriconv'.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 }