/gettext-tools/libgettextpo/fstrcmp.c
/gettext-tools/libgettextpo/fstrcmp.h
/gettext-tools/libgettextpo/fsync.c
+/gettext-tools/libgettextpo/full-write.c
+/gettext-tools/libgettextpo/full-write.h
/gettext-tools/libgettextpo/fwriteerror.c
/gettext-tools/libgettextpo/fwriteerror.h
/gettext-tools/libgettextpo/gcd.c
/gettext-tools/libgettextpo/mem-hash-map.h
/gettext-tools/libgettextpo/memchr.c
/gettext-tools/libgettextpo/memchr.valgrind
+/gettext-tools/libgettextpo/memmem.c
+/gettext-tools/libgettextpo/memrchr.c
/gettext-tools/libgettextpo/minmax.h
/gettext-tools/libgettextpo/msvc-inval.c
/gettext-tools/libgettextpo/msvc-inval.h
/gettext-tools/libgettextpo/relocatable.c
/gettext-tools/libgettextpo/relocatable.h
/gettext-tools/libgettextpo/relocatable.valgrind
+/gettext-tools/libgettextpo/safe-read.c
+/gettext-tools/libgettextpo/safe-write.c
+/gettext-tools/libgettextpo/safe-write.h
/gettext-tools/libgettextpo/setlocale-lock.c
/gettext-tools/libgettextpo/setlocale_null.c
/gettext-tools/libgettextpo/setlocale_null.h
/gettext-tools/libgettextpo/striconveh.h
/gettext-tools/libgettextpo/striconveha.c
/gettext-tools/libgettextpo/striconveha.h
+/gettext-tools/libgettextpo/string-desc-contains.c
+/gettext-tools/libgettextpo/string-desc.c
+/gettext-tools/libgettextpo/string-desc.h
/gettext-tools/libgettextpo/string.in.h
/gettext-tools/libgettextpo/stripslash.c
/gettext-tools/libgettextpo/strstr.c
+/gettext-tools/libgettextpo/sys-limits.h
/gettext-tools/libgettextpo/sys_stat.in.h
/gettext-tools/libgettextpo/sys_types.in.h
/gettext-tools/libgettextpo/textstyle.in.h
/gettext-tools/libgettextpo/windows-rwlock.h
/gettext-tools/libgettextpo/windows-tls.c
/gettext-tools/libgettextpo/windows-tls.h
+/gettext-tools/libgettextpo/write.c
/gettext-tools/libgettextpo/xalloc-die.c
/gettext-tools/libgettextpo/xalloc-oversized.h
/gettext-tools/libgettextpo/xalloc.h
lock
mem-hash-map
memchr
- memmem
memmove
- memrchr
memset
minmax
mkdir
strchrnul
strcspn
strerror
+ string-desc
strpbrk
strtol
strtoul
libunistring-optional
markup
mem-hash-map
- memmem
- memrchr
minmax
open
relocatable-lib
stpncpy
strchrnul
strerror
+ string-desc
unictype/ctype-space
unilbrk/ulc-width-linebreaks
unistr/u8-mbtouc
../src/dir-list.c \
../src/message.c \
../src/pos.c \
- ../src/str-desc.c \
../src/msgl-ascii.c \
../src/po-error.c \
../src/po-xerror.c \
str-list.c
A list-of-immutable-strings type.
-str-desc.h
-str-desc.c
- A string descriptor type, for strings that may contain NULs.
-
dir-list.h
dir-list.c
Management of the list of directories where PO files are
pos.h message.h po-error.h po-xerror.h po-gram.h po-charset.h \
po-lex.h open-catalog.h read-catalog-abstract.h read-catalog.h \
read-po.h read-properties.h read-stringtable.h \
- str-desc.h str-list.h \
+ str-list.h \
write-catalog.h write-po.h write-properties.h write-stringtable.h \
dir-list.h file-list.h po-gram-gen.h po-gram-gen2.h cldr-plural.h \
cldr-plural-exp.h locating-rule.h its.h search-path.h \
# libgettextsrc contains all code that is needed by at least two programs.
libgettextsrc_la_SOURCES = \
$(COMMON_SOURCE) \
- str-desc.c \
read-catalog.c \
write-catalog.c write-properties.c write-stringtable.c write-po.c \
msgl-ascii.c \
}
bool
-is_ascii_string_desc (string_desc_ty string)
+is_ascii_string_desc (string_desc_t string)
{
size_t len = string_desc_length (string);
size_t i;
#ifndef _MSGL_ASCII_H
#define _MSGL_ASCII_H
-#include "str-desc.h"
+#include "string-desc.h"
#include "message.h"
#include <stdbool.h>
extern bool
is_ascii_string (const char *string);
extern bool
- is_ascii_string_desc (string_desc_ty string);
+ is_ascii_string_desc (string_desc_t string);
extern bool
is_ascii_string_list (string_list_ty *slp);
extern bool
#include "noreturn.h"
#include "progname.h"
#include "basename-lgpl.h"
-#include "str-desc.h"
+#include "string-desc.h"
#include "message.h"
#include "po-charset.h"
#include "xstriconv.h"
return NULL;
}
-string_desc_ty
-convert_string_desc_directly (iconv_t cd, string_desc_ty string,
+string_desc_t
+convert_string_desc_directly (iconv_t cd, string_desc_t string,
const struct conversion_context* context)
{
char *result = NULL;
conversion_error (context);
/* NOTREACHED */
- return string_desc_new (0);
+ return string_desc_new_empty ();
}
static char *
#include <iconv.h>
#endif
-#include "str-desc.h"
+#include "string-desc.h"
+
#include "message.h"
Assumes that either FROM_CODE or TO_CODE is UTF-8. */
extern char *convert_string_directly (iconv_t cd, const char *string,
const struct conversion_context* context);
-extern string_desc_ty
- convert_string_desc_directly (iconv_t cd, string_desc_ty string,
+extern string_desc_t
+ convert_string_desc_directly (iconv_t cd, string_desc_t string,
const struct conversion_context* context);
#endif
+++ /dev/null
-/* GNU gettext - internationalization aids
- Copyright (C) 2023 Free Software Foundation, Inc.
-
- 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 <https://www.gnu.org/licenses/>. */
-
-/* Written by Bruno Haible <bruno@clisp.org>, 2023. */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* Specification. */
-#include "str-desc.h"
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "xalloc.h"
-
-
-/* ==== Side-effect-free operations on string descriptors ==== */
-
-size_t
-string_desc_length (string_desc_ty s)
-{
- return s.nbytes;
-}
-
-char
-string_desc_char_at (string_desc_ty s, size_t i)
-{
- if (!(i < s.nbytes))
- /* Invalid argument. */
- abort ();
- return s.data[i];
-}
-
-const char *
-string_desc_data (string_desc_ty s)
-{
- return s.data;
-}
-
-bool
-string_desc_is_empty (string_desc_ty s)
-{
- return s.nbytes == 0;
-}
-
-bool
-string_desc_startswith (string_desc_ty s, string_desc_ty prefix)
-{
- return (s.nbytes >= prefix.nbytes
- && (prefix.nbytes == 0
- || memcmp (s.data, prefix.data, prefix.nbytes) == 0));
-}
-
-bool
-string_desc_endswith (string_desc_ty s, string_desc_ty suffix)
-{
- return (s.nbytes >= suffix.nbytes
- && (suffix.nbytes == 0
- || memcmp (s.data + (s.nbytes - suffix.nbytes), suffix.data,
- suffix.nbytes) == 0));
-}
-
-int
-string_desc_cmp (string_desc_ty a, string_desc_ty b)
-{
- if (a.nbytes > b.nbytes)
- {
- if (b.nbytes == 0)
- return 1;
- return (memcmp (a.data, b.data, b.nbytes) < 0 ? -1 : 1);
- }
- else if (a.nbytes < b.nbytes)
- {
- if (a.nbytes == 0)
- return -1;
- return (memcmp (a.data, b.data, a.nbytes) > 0 ? 1 : -1);
- }
- else /* a.nbytes == b.nbytes */
- {
- if (a.nbytes == 0)
- return 0;
- return memcmp (a.data, b.data, a.nbytes);
- }
-}
-
-ptrdiff_t
-string_desc_index (string_desc_ty s, char c)
-{
- if (s.nbytes > 0)
- {
- void *found = memchr (s.data, (unsigned char) c, s.nbytes);
- if (found != NULL)
- return (char *) found - s.data;
- }
- return -1;
-}
-
-ptrdiff_t
-string_desc_last_index (string_desc_ty s, char c)
-{
- if (s.nbytes > 0)
- {
- void *found = memrchr (s.data, (unsigned char) c, s.nbytes);
- if (found != NULL)
- return (char *) found - s.data;
- }
- return -1;
-}
-
-ptrdiff_t
-string_desc_contains (string_desc_ty haystack, string_desc_ty needle)
-{
- if (needle.nbytes == 0)
- return 0;
- void *found =
- memmem (haystack.data, haystack.nbytes, needle.data, needle.nbytes);
- if (found != NULL)
- return (char *) found - haystack.data;
- else
- return -1;
-}
-
-string_desc_ty
-string_desc_from_c (const char *s)
-{
- string_desc_ty result;
-
- result.nbytes = strlen (s);
- result.data = (char *) s;
-
- return result;
-}
-
-string_desc_ty
-string_desc_substring (string_desc_ty s, size_t start, size_t end)
-{
- string_desc_ty result;
-
- if (!(start <= end))
- /* Invalid arguments. */
- abort ();
-
- result.nbytes = end - start;
- result.data = s.data + start;
-
- return result;
-}
-
-
-/* ==== Memory-allocating operations on string descriptors ==== */
-
-string_desc_ty
-string_desc_new (size_t n)
-{
- string_desc_ty result;
-
- result.nbytes = n;
- if (n == 0)
- result.data = NULL;
- else
- result.data = (char *) xmalloc (n);
-
- return result;
-}
-
-string_desc_ty
-string_desc_new_addr (size_t n, char *addr)
-{
- string_desc_ty result;
-
- result.nbytes = n;
- if (n == 0)
- result.data = NULL;
- else
- result.data = addr;
-
- return result;
-}
-
-string_desc_ty
-string_desc_new_filled (size_t n, char c)
-{
- string_desc_ty result;
-
- result.nbytes = n;
- if (n == 0)
- result.data = NULL;
- else
- {
- result.data = (char *) xmalloc (n);
- memset (result.data, (unsigned char) c, n);
- }
-
- return result;
-}
-
-string_desc_ty
-string_desc_copy (string_desc_ty s)
-{
- string_desc_ty result;
- size_t n = s.nbytes;
-
- result.nbytes = n;
- if (n == 0)
- result.data = NULL;
- else
- {
- result.data = (char *) xmalloc (n);
- memcpy (result.data, s.data, n);
- }
-
- return result;
-}
-
-string_desc_ty
-string_desc_concat (size_t n, string_desc_ty string1, ...)
-{
- if (n == 0)
- /* Invalid argument. */
- abort ();
-
- size_t total = 0;
- total += string1.nbytes;
- if (n > 1)
- {
- va_list other_strings;
- size_t i;
-
- va_start (other_strings, string1);
- for (i = --n; i > 0; i--)
- {
- string_desc_ty arg = va_arg (other_strings, string_desc_ty);
- total += arg.nbytes;
- }
- va_end (other_strings);
- }
-
- char *combined = (char *) xmalloc (total);
- size_t pos = 0;
- memcpy (combined, string1.data, string1.nbytes);
- pos += string1.nbytes;
- if (n > 1)
- {
- va_list other_strings;
- size_t i;
-
- va_start (other_strings, string1);
- for (i = --n; i > 0; i--)
- {
- string_desc_ty arg = va_arg (other_strings, string_desc_ty);
- if (arg.nbytes > 0)
- memcpy (combined + pos, arg.data, arg.nbytes);
- pos += arg.nbytes;
- }
- va_end (other_strings);
- }
-
- string_desc_ty result;
- result.nbytes = total;
- result.data = combined;
-
- return result;
-}
-
-char *
-string_desc_c (string_desc_ty s)
-{
- size_t n = s.nbytes;
- char *result = (char *) xmalloc (n + 1);
- if (n > 0)
- memcpy (result, s.data, n);
- result[n] = '\0';
-
- return result;
-}
-
-
-/* ==== Operations with side effects on string descriptors ==== */
-
-void
-string_desc_set_char_at (string_desc_ty s, size_t i, char c)
-{
- if (!(i < s.nbytes))
- /* Invalid argument. */
- abort ();
- s.data[i] = c;
-}
-
-void
-string_desc_fill (string_desc_ty s, size_t start, size_t end, char c)
-{
- if (!(start <= end))
- /* Invalid arguments. */
- abort ();
-
- if (start < end)
- memset (s.data + start, (unsigned char) c, end - start);
-}
-
-void
-string_desc_overwrite (string_desc_ty s, size_t start, string_desc_ty t)
-{
- if (!(start + t.nbytes <= s.nbytes))
- /* Invalid arguments. */
- abort ();
-
- if (t.nbytes > 0)
- memcpy (s.data + start, t.data, t.nbytes);
-}
-
-void
-string_desc_free (string_desc_ty s)
-{
- free (s.data);
-}
+++ /dev/null
-/* GNU gettext - internationalization aids
- Copyright (C) 2023 Free Software Foundation, Inc.
-
- 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 <https://www.gnu.org/licenses/>. */
-
-/* Written by Bruno Haible <bruno@clisp.org>, 2023. */
-
-#ifndef _STR_DESC_H
-#define _STR_DESC_H 1
-
-/* Get size_t, ptrdiff_t. */
-#include <stddef.h>
-
-/* Get bool. */
-#include <stdbool.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Type describing a string that may contain NUL bytes.
- It's merely a descriptor of an array of bytes. */
-typedef struct string_desc_ty string_desc_ty;
-struct string_desc_ty
-{
- size_t nbytes;
- char *data;
-};
-
-/* String descriptors can be passed and returned by value. */
-
-
-/* ==== Side-effect-free operations on string descriptors ==== */
-
-/* Return the length of the string S. */
-extern size_t string_desc_length (string_desc_ty s);
-
-/* Return the byte at index I of string S.
- I must be < length(S). */
-extern char string_desc_char_at (string_desc_ty s, size_t i);
-
-/* Return a read-only view of the bytes of S. */
-extern const char * string_desc_data (string_desc_ty s);
-
-/* Return true if S is the empty string. */
-extern bool string_desc_is_empty (string_desc_ty s);
-
-/* Return true if S starts with PREFIX. */
-extern bool string_desc_startswith (string_desc_ty s, string_desc_ty prefix);
-
-/* Return true if S ends with SUFFIX. */
-extern bool string_desc_endswith (string_desc_ty s, string_desc_ty suffix);
-
-/* Return > 0, == 0, or < 0 if A > B, A == B, A < B.
- This uses a lexicographic ordering, where the bytes are compared as
- 'unsigned char'. */
-extern int string_desc_cmp (string_desc_ty a, string_desc_ty b);
-
-/* Return the index of the first occurrence of C in S,
- or -1 if there is none. */
-extern ptrdiff_t string_desc_index (string_desc_ty s, char c);
-
-/* Return the index of the last occurrence of C in S,
- or -1 if there is none. */
-extern ptrdiff_t string_desc_last_index (string_desc_ty s, char c);
-
-/* Return the index of the first occurrence of NEEDLE in HAYSTACK,
- or -1 if there is none. */
-extern ptrdiff_t string_desc_contains (string_desc_ty haystack, string_desc_ty needle);
-
-/* Return a string that represents the C string S, of length strlen (S). */
-extern string_desc_ty string_desc_from_c (const char *s);
-
-/* Return the substring of S, starting at offset START and ending at offset END.
- START must be <= END.
- The result is of length END - START.
- The result must not be freed (since its storage is part of the storage
- of S). */
-extern string_desc_ty string_desc_substring (string_desc_ty s, size_t start, size_t end);
-
-
-/* ==== Memory-allocating operations on string descriptors ==== */
-
-/* Return a string of length N, with uninitialized contents. */
-extern string_desc_ty string_desc_new (size_t n);
-
-/* Return a string of length N, at the given memory address. */
-extern string_desc_ty string_desc_new_addr (size_t n, char *addr);
-
-/* Return a string of length N, filled with C. */
-extern string_desc_ty string_desc_new_filled (size_t n, char c);
-
-/* Return a copy of string S. */
-extern string_desc_ty string_desc_copy (string_desc_ty s);
-
-/* Return the concatenation of N strings. N must be > 0. */
-extern string_desc_ty string_desc_concat (size_t n, string_desc_ty string1, ...);
-
-/* Return a copy of string S, as a NUL-terminated C string. */
-extern char * string_desc_c (string_desc_ty s);
-
-
-/* ==== Operations with side effects on string descriptors ==== */
-
-/* Overwrite the byte at index I of string S with C.
- I must be < length(S). */
-extern void string_desc_set_char_at (string_desc_ty s, size_t i, char c);
-
-/* Fill part of S, starting at offset START and ending at offset END,
- with copies of C.
- START must be <= END. */
-extern void string_desc_fill (string_desc_ty s, size_t start, size_t end, char c);
-
-/* Overwrite part of S with T, starting at offset START.
- START + length(T) must be <= length (S). */
-extern void string_desc_overwrite (string_desc_ty s, size_t start, string_desc_ty t);
-
-/* Free S. */
-extern void string_desc_free (string_desc_ty s);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _STR_DESC_H */
#include "attribute.h"
#include "message.h"
#include "rc-str-list.h"
-#include "str-desc.h"
+#include "string-desc.h"
#include "xgettext.h"
#include "xg-pos.h"
#include "xg-encoding.h"
of the semantics of the construct. Return the complete string,
including the starting and the trailing delimiter, with backslashes
removed where appropriate. */
-static string_desc_ty
+static string_desc_t
extract_quotelike_pass1 (int delim)
{
/* This function is called recursively. No way to allocate stuff
if (nested && c == delim)
{
- string_desc_ty inner = extract_quotelike_pass1 (delim);
+ string_desc_t inner = extract_quotelike_pass1 (delim);
size_t len = string_desc_length (inner);
/* Ensure room for len + 1 bytes. */
/* Like extract_quotelike_pass1, but return the complete string in UTF-8
encoding. */
-static string_desc_ty
+static string_desc_t
extract_quotelike_pass1_utf8 (int delim)
{
- string_desc_ty string = extract_quotelike_pass1 (delim);
- string_desc_ty utf8_string =
+ string_desc_t string = extract_quotelike_pass1 (delim);
+ string_desc_t utf8_string =
string_desc_from_current_source_encoding (string, lc_string,
logical_file_name, line_number);
- if (utf8_string.data != string.data)
+ if (string_desc_data (utf8_string) != string_desc_data (string))
string_desc_free (string);
return utf8_string;
}
/* Forward declaration of local functions. */
-static void interpolate_keywords (message_list_ty *mlp, string_desc_ty string,
+static void interpolate_keywords (message_list_ty *mlp, string_desc_t string,
int lineno);
static token_ty *x_perl_lex (message_list_ty *mlp);
static void x_perl_unlex (token_ty *tp);
static void
extract_quotelike (token_ty *tp, int delim)
{
- string_desc_ty string = extract_quotelike_pass1_utf8 (delim);
+ string_desc_t string = extract_quotelike_pass1_utf8 (delim);
size_t len = string_desc_length (string);
tp->type = token_type_string;
extract_triple_quotelike (message_list_ty *mlp, token_ty *tp, int delim,
bool interpolate)
{
- string_desc_ty string;
+ string_desc_t string;
tp->type = token_type_regex_op;
variables inside a double-quoted string that may interpolate to
some keyword hash (reference). The string is UTF-8 encoded. */
static void
-interpolate_keywords (message_list_ty *mlp, string_desc_ty string, int lineno)
+interpolate_keywords (message_list_ty *mlp, string_desc_t string, int lineno)
{
static char *buffer;
static int bufmax = 0;
}
/* Like from_current_source_encoding, for a string that may contain NULs. */
-string_desc_ty
-string_desc_from_current_source_encoding (string_desc_ty string,
+string_desc_t
+string_desc_from_current_source_encoding (string_desc_t string,
lexical_context_ty lcontext,
const char *file_name,
size_t line_number)
#include <iconv.h>
#endif
-#include "str-desc.h"
+#include "string-desc.h"
#ifdef __cplusplus
size_t line_number);
/* Like from_current_source_encoding, for a string that may contain NULs. */
-extern string_desc_ty
- string_desc_from_current_source_encoding (string_desc_ty string,
+extern string_desc_t
+ string_desc_from_current_source_encoding (string_desc_t string,
lexical_context_ty lcontext,
const char *file_name,
size_t line_number);