1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-17 12:41:05 +03:00

New module 'wcsncpy'.

* modules/wcsncpy: New file.
* lib/wchar.in.h (wcsncpy): New declaration.
* lib/wcsncpy.c: New file.
* lib/wcsncpy-impl.h: New file, from libutf8 with modifications.
* m4/wcsncpy.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncpy is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCPY, HAVE_WCSNCPY.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSNCPY, HAVE_WCSNCPY.
* tests/test-wchar-c++.cc: Test the declaration of wcsncpy.
* doc/posix-functions/wcsncpy.texi: Mention the new module.
This commit is contained in:
Bruno Haible
2011-02-05 15:24:52 +01:00
parent 83527ac1b1
commit cde82ba3a7
10 changed files with 147 additions and 5 deletions

View File

@@ -1,3 +1,17 @@
2011-02-05 Bruno Haible <bruno@clisp.org>
New module 'wcsncpy'.
* modules/wcsncpy: New file.
* lib/wchar.in.h (wcsncpy): New declaration.
* lib/wcsncpy.c: New file.
* lib/wcsncpy-impl.h: New file, from libutf8 with modifications.
* m4/wcsncpy.m4: New file.
* m4/wchar_h.m4 (gl_WCHAR_H): Test whether wcsncpy is declared.
(gl_WCHAR_H_DEFAULTS): Initialize GNULIB_WCSNCPY, HAVE_WCSNCPY.
* modules/wchar (Makefile.am): Substitute GNULIB_WCSNCPY, HAVE_WCSNCPY.
* tests/test-wchar-c++.cc: Test the declaration of wcsncpy.
* doc/posix-functions/wcsncpy.texi: Mention the new module.
2011-02-05 Bruno Haible <bruno@clisp.org> 2011-02-05 Bruno Haible <bruno@clisp.org>
New module 'wcpcpy'. New module 'wcpcpy'.

View File

@@ -4,18 +4,18 @@
POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncpy.html} POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/wcsncpy.html}
Gnulib module: --- Gnulib module: wcsncpy
Portability problems fixed by Gnulib: Portability problems fixed by Gnulib:
@itemize @itemize
@item
This function is missing on some platforms:
IRIX 5.3, Solaris 2.5.1.
@end itemize @end itemize
Portability problems not fixed by Gnulib: Portability problems not fixed by Gnulib:
@itemize @itemize
@item @item
This function is missing on some platforms:
IRIX 5.3, Solaris 2.5.1.
@item
On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot On AIX and Windows platforms, @code{wchar_t} is a 16-bit type and therefore cannot
accommodate all Unicode characters. accommodate all Unicode characters.
@end itemize @end itemize

View File

@@ -581,6 +581,24 @@ _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
#endif #endif
/* Copy no more than N wide characters of SRC to DEST. */
#if @GNULIB_WCSNCPY@
# if !@HAVE_WCSNCPY@
_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
(wchar_t *dest, const wchar_t *src, size_t n));
# endif
_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
(wchar_t *dest, const wchar_t *src, size_t n));
_GL_CXXALIASWARN (wcsncpy);
#elif defined GNULIB_POSIXCHECK
# undef wcsncpy
# if HAVE_RAW_DECL_WCSNCPY
_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
"use gnulib module wcsncpy for portability");
# endif
#endif
#endif /* _GL_WCHAR_H */ #endif /* _GL_WCHAR_H */
#endif /* _GL_WCHAR_H */ #endif /* _GL_WCHAR_H */
#endif #endif

32
lib/wcsncpy-impl.h Normal file
View File

@@ -0,0 +1,32 @@
/* Copy a size-bounded wide string.
Copyright (C) 1999, 2011 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 1999.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
wchar_t *
wcsncpy (wchar_t *dest, const wchar_t *src, size_t n)
{
wchar_t *destptr = dest;
for (; n > 0 && (*destptr = *src) != (wchar_t)'\0'; src++, destptr++, n--)
;
/* This behavior is rarely useful, but it is specified by the ISO C
standard. */
for (; n > 0; n--)
*destptr++ = (wchar_t)'\0';
return dest;
}

23
lib/wcsncpy.c Normal file
View File

@@ -0,0 +1,23 @@
/* Copy a size-bounded wide string.
Copyright (C) 2011 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2011.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
/* Specification. */
#include <wchar.h>
#include "wcsncpy-impl.h"

View File

@@ -51,7 +51,7 @@ AC_DEFUN([gl_WCHAR_H],
]], ]],
[btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
wcslen wcsnlen wcscpy wcpcpy wcslen wcsnlen wcscpy wcpcpy wcsncpy
]) ])
]) ])
@@ -155,6 +155,7 @@ AC_DEFUN([gl_WCHAR_H_DEFAULTS],
GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN])
GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY])
GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY])
GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY])
dnl Assume proper GNU behavior unless another module says otherwise. dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
@@ -174,6 +175,7 @@ AC_DEFUN([gl_WCHAR_H_DEFAULTS],
HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN])
HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY])
HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY])
HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY])
HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])

15
m4/wcsncpy.m4 Normal file
View File

@@ -0,0 +1,15 @@
# wcsncpy.m4 serial 1
dnl Copyright (C) 2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_WCSNCPY],
[
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
AC_CHECK_FUNCS_ONCE([wcsncpy])
if test $ac_cv_func_wcsncpy = no; then
HAVE_WCSNCPY=0
AC_LIBOBJ([wcsncpy])
fi
])

View File

@@ -50,6 +50,7 @@ wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-e 's|@''GNULIB_WCSNLEN''@|$(GNULIB_WCSNLEN)|g' \ -e 's|@''GNULIB_WCSNLEN''@|$(GNULIB_WCSNLEN)|g' \
-e 's|@''GNULIB_WCSCPY''@|$(GNULIB_WCSCPY)|g' \ -e 's|@''GNULIB_WCSCPY''@|$(GNULIB_WCSCPY)|g' \
-e 's|@''GNULIB_WCPCPY''@|$(GNULIB_WCPCPY)|g' \ -e 's|@''GNULIB_WCPCPY''@|$(GNULIB_WCPCPY)|g' \
-e 's|@''GNULIB_WCSNCPY''@|$(GNULIB_WCSNCPY)|g' \
-e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
@@ -69,6 +70,7 @@ wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
-e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
-e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
-e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
-e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \

31
modules/wcsncpy Normal file
View File

@@ -0,0 +1,31 @@
Description:
wcsncpy() function: copy a size-bounded wide string.
Status:
obsolete
Notice:
This module is obsolete.
Files:
lib/wcsncpy.c
lib/wcsncpy-impl.h
m4/wcsncpy.m4
Depends-on:
wchar
configure.ac:
gl_FUNC_WCSNCPY
gl_WCHAR_MODULE_INDICATOR([wcsncpy])
Makefile.am:
Include:
<wchar.h>
License:
LGPL
Maintainer:
Bruno Haible

View File

@@ -118,6 +118,11 @@ SIGNATURE_CHECK (GNULIB_NAMESPACE::wcpcpy, wchar_t *,
(wchar_t *, const wchar_t *)); (wchar_t *, const wchar_t *));
#endif #endif
#if GNULIB_TEST_WCSNCPY
SIGNATURE_CHECK (GNULIB_NAMESPACE::wcsncpy, wchar_t *,
(wchar_t *, const wchar_t *, size_t));
#endif
int int
main () main ()