if (add_to_node != NULL && !slash_before_tag)
{
string_desc_t name =
- sd_new_addr (name_end - name_start, (char *) name_start);
+ sd_new_addr (name_end - name_start, name_start);
char *name_c = xsd_c (name);
if (ignore_case)
{
{
string_desc_t attr_name =
sd_new_addr (attr_name_end - attr_name_start,
- (char *) attr_name_start);
+ attr_name_start);
string_desc_t attr_value =
sd_new_addr (attr_value_end - attr_value_start,
- (char *) attr_value_start);
+ attr_value_start);
char *attr_name_c = xsd_c (attr_name);
char *attr_value_c = xsd_c (attr_value);
xmlAttr *attr =
return false;
/* Seen a complete <...> element start/end. */
/* Verify that the tag is allowed. */
- string_desc_t tag =
- sd_new_addr (name_end - name_start, (char *) name_start);
+ string_desc_t tag = sd_new_addr (name_end - name_start, name_start);
if (!(valid_element == NULL || valid_element (tag)))
return false;
if (slash_after_tag || (no_end_element != NULL && no_end_element (tag)))
if (open_elements_count == 0)
/* The end of an element without a corresponding start. */
return false;
- if ((ignore_case ? sd_c_casecmp : sd_cmp)
- (open_elements[open_elements_count - 1], tag)
+ if ((ignore_case
+ ? sd_c_casecmp (open_elements[open_elements_count - 1], tag)
+ : sd_cmp (open_elements[open_elements_count - 1], tag))
!= 0)
return false;
open_elements_count--;
return NULL;
}
-string_desc_t
+rw_string_desc_t
convert_string_desc_directly (iconv_t cd, string_desc_t string,
const struct conversion_context* context)
{
conversion_error (context, textmode_xerror_handler);
/* NOTREACHED */
- return sd_new_empty ();
+ return sd_readwrite (sd_new_empty ());
}
static char *
/* Message list character set conversion.
- Copyright (C) 2001-2024 Free Software Foundation, Inc.
+ Copyright (C) 2001-2025 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
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_t
+extern rw_string_desc_t
convert_string_desc_directly (iconv_t cd, string_desc_t string,
const struct conversion_context* context);
{
string_desc_t entire =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
/* It should either start with two slashes... */
if (sd_length (entire) >= 2
&& sd_char_at (entire, 0) == '/'
{
string_desc_t node_contents =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
#if DEBUG_D && 0
fprintf (stderr, "[%s]|%s|%.*s|\n", ts_node_type (node), ts_node_string (node), (int) sd_length (node_contents), sd_data (node_contents));
#if 0
TSNode subnode = ts_node_named_child (node, i);
string_desc_t subnode_contents =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
fprintf (stderr, "%u -> [%s]|%s|%.*s|\n", i, ts_node_type (subnode), ts_node_string (subnode), (int) sd_length (subnode_contents), sd_data (subnode_contents));
uint32_t count2 = ts_node_child_count (subnode);
uint32_t j;
*/
string_desc_t node_contents =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
#if DEBUG_D && 0
fprintf (stderr, "[%s]|%s|%.*s|\n", ts_node_type (node), ts_node_string (node), (int) sd_length (node_contents), sd_data (node_contents));
#endif
const char *escape_start = contents + ts_node_start_byte (escnode);
const char *escape_end = contents + ts_node_end_byte (escnode);
if (escape_end < ptr)
- sbr_xprepend_desc (buffer, sd_new_addr (ptr - escape_end, (char *) escape_end));
+ sbr_xprepend_desc (buffer, sd_new_addr (ptr - escape_end, escape_end));
/* The escape sequence must start with a backslash. */
if (!(escape_end - escape_start >= 2 && escape_start[0] == '\\'))
int n = u8_uctomb (buf, value, sizeof (buf));
if (!(n > 0))
abort ();
- sbr_xprepend_desc (buffer, sd_new_addr (n, (char *) buf));
+ sbr_xprepend_desc (buffer, sd_new_addr (n, (const char *) buf));
}
else
invalid = true;
{
/* A named character entity. */
string_desc_t entity =
- sd_new_addr (escape_end - escape_start - 3, (char *) escape_start + 2);
+ sd_new_addr (escape_end - escape_start - 3, escape_start + 2);
const char *value = html5_lookup (entity);
if (value != NULL)
sbr_xprepend_c (buffer, value);
{
string_desc_t function_name =
sd_new_addr (ts_node_end_byte (function_node) - ts_node_start_byte (function_node),
- (char *) contents + ts_node_start_byte (function_node));
+ contents + ts_node_start_byte (function_node));
/* Context iterator. */
next_context_iter =
{
string_desc_t function_name =
sd_new_addr (ts_node_end_byte (function_node) - ts_node_start_byte (function_node),
- (char *) contents + ts_node_start_byte (function_node));
+ contents + ts_node_start_byte (function_node));
/* Context iterator. */
next_context_iter =
string_desc_t template_name =
sd_new_addr (ts_node_end_byte (identifier_node) - ts_node_start_byte (identifier_node),
- (char *) contents + ts_node_start_byte (identifier_node));
+ contents + ts_node_start_byte (identifier_node));
/* Handle the potential comments in node, between
identifier_node and args_node. */
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
if (sd_equals (subnode_string, sd_from_c ("gettext")))
{
TSNode argsnode = ts_node_named_child (node, 1);
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
/* Eliminate '\r' characters. */
for (;;)
{
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
sbr_xprepend_desc (buffer, subnode_string);
}
else if (ts_node_symbol (subnode) == ts_symbol_escape_sequence)
uint8_t buf[6];
int n = u8_uctomb (buf, value, sizeof (buf));
if (n > 0)
- sbr_xprepend_desc (buffer, sd_new_addr (n, (char *) buf));
+ sbr_xprepend_desc (buffer, sd_new_addr (n, (const char *) buf));
else
invalid = true;
}
that is non-empty and has no escape sequences. */
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
return xsd_c (subnode_string);
}
}
/* A package is imported with a name. */
shortname =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
}
else
{
{
string_desc_t type_name =
sd_new_addr (ts_node_end_byte (type_node) - ts_node_start_byte (type_node),
- (char *) contents + ts_node_start_byte (type_node));
+ contents + ts_node_start_byte (type_node));
return get_type_from_type_name (type_name, tenv, use_indirections);
}
#if DEBUG_GO && 0
string_desc_t type_node_name =
sd_new_addr (ts_node_end_byte (type_node) - ts_node_start_byte (type_node),
- (char *) contents + ts_node_start_byte (type_node));
+ contents + ts_node_start_byte (type_node));
fprintf (stderr, "type_node = [%s]|%s| = %s\n", ts_node_type (type_node), ts_node_string (type_node), sd_c (type_node_name));
#endif
while (ts_node_symbol (type_node) == ts_symbol_parenthesized_type
TSNode shortname_node = ts_node_child_by_field_id (type_node, ts_field_package);
string_desc_t shortname =
sd_new_addr (ts_node_end_byte (shortname_node) - ts_node_start_byte (shortname_node),
- (char *) contents + ts_node_start_byte (shortname_node));
+ contents + ts_node_start_byte (shortname_node));
/* Look up the package's full name. */
void *found_package;
if (hash_find_entry (&package_table,
TSNode name_node = ts_node_child_by_field_id (type_node, ts_field_name);
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
void *found_type;
if (hash_find_entry (&gotext_package.defined_types,
sd_data (name), sd_length (name),
TSNode name_node = ts_node_child_by_field_id (type_node, ts_field_name);
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
void *found_type;
if (hash_find_entry (&snapcore_package.defined_types,
sd_data (name), sd_length (name),
members[n].name =
xsd_c (
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode)));
+ contents + ts_node_start_byte (subnode)));
members[n].type = eltype;
n++;
}
abort ();
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
methods[nm].name = xsd_c (name);
methods[nm].type = get_type_from_function_or_method_node (subnode, tenv, use_indirections);
nm++;
abort ();
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Type name = %s\n", sd_c (name));
#endif
{
string_desc_t name =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
return1 (variable_env_lookup (name, venv));
}
if (ts_node_symbol (node) == ts_symbol_unary_expression)
TSNode operator_node = ts_node_child_by_field_id (node, ts_field_operator);
string_desc_t operator =
sd_new_addr (ts_node_end_byte (operator_node) - ts_node_start_byte (operator_node),
- (char *) contents + ts_node_start_byte (operator_node));
+ contents + ts_node_start_byte (operator_node));
if (sd_equals (operator, sd_from_c ("*")))
{
TSNode operand_node = ts_node_child_by_field_id (node, ts_field_operand);
abort ();
string_desc_t field_name =
sd_new_addr (ts_node_end_byte (field_node) - ts_node_start_byte (field_node),
- (char *) contents + ts_node_start_byte (field_node));
+ contents + ts_node_start_byte (field_node));
TSNode operand_node = ts_node_child_by_field_id (node, ts_field_operand);
/* If the operand is a package name, we have in fact a qualified identifier. */
if (ts_node_symbol (operand_node) == ts_symbol_identifier)
{
string_desc_t shortname =
sd_new_addr (ts_node_end_byte (operand_node) - ts_node_start_byte (operand_node),
- (char *) contents + ts_node_start_byte (operand_node));
+ contents + ts_node_start_byte (operand_node));
/* Look up the package's full name. */
void *found_package;
if (hash_find_entry (&package_table,
{
string_desc_t function_name =
sd_new_addr (ts_node_end_byte (function_node) - ts_node_start_byte (function_node),
- (char *) contents + ts_node_start_byte (function_node));
+ contents + ts_node_start_byte (function_node));
if (sd_equals (function_name, sd_from_c ("new")))
{
TSNode args_node = ts_node_child_by_field_id (node, ts_field_arguments);
TSNode name_node = subnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Var name = %s\n", sd_c (name));
#endif
TSNode name_node = subnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Var name = %s\n", sd_c (name));
#endif
TSNode name_node = ts_node_child_by_field_id (node, ts_field_name);
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Const name = %s\n", sd_c (name));
#endif
TSNode name_node = ts_node_child_by_field_id (node, ts_field_name);
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Func name = %s\n", sd_c (name));
#endif
abort ();
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local type name = %s\n", sd_c (name));
#endif
TSNode name_node = subsubnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local parameter name = %s\n", sd_c (name));
#endif
TSNode name_node = subsubnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local variadic parameter name = %s\n", sd_c (name));
#endif
TSNode name_node = subnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local var name = %s\n", sd_c (name));
#endif
TSNode name_node = subnode;
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local var name = %s\n", sd_c (name));
#endif
TSNode name_node = ts_node_child_by_field_id (node, ts_field_name);
string_desc_t name =
sd_new_addr (ts_node_end_byte (name_node) - ts_node_start_byte (name_node),
- (char *) contents + ts_node_start_byte (name_node));
+ contents + ts_node_start_byte (name_node));
#if DEBUG_GO && 0
fprintf (stderr, "Local const name = %s\n", sd_c (name));
#endif
{
string_desc_t left_var_name =
sd_new_addr (ts_node_end_byte (left_var_node) - ts_node_start_byte (left_var_node),
- (char *) contents + ts_node_start_byte (left_var_node));
+ contents + ts_node_start_byte (left_var_node));
if (!sd_equals (left_var_name, sd_from_c ("_")))
venv = variable_env_augment (venv, left_var_name, mvtypes[i]);
}
{
string_desc_t entire =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
/* It should either start with two slashes, or start and end with
the C comment markers. */
if (sd_length (entire) >= 2
string_desc_t function_name =
sd_new_addr (ts_node_end_byte (function_node) - ts_node_start_byte (function_node),
- (char *) contents + ts_node_start_byte (function_node));
+ contents + ts_node_start_byte (function_node));
/* Context iterator. */
flag_context_list_iterator_ty next_context_iter =
{
string_desc_t shortname =
sd_new_addr (ts_node_end_byte (operand_node) - ts_node_start_byte (operand_node),
- (char *) contents + ts_node_start_byte (operand_node));
+ contents + ts_node_start_byte (operand_node));
/* Look up the package's full name. */
void *found_package;
if (hash_find_entry (&package_table,
TSNode operand_node = ts_node_child_by_field_id (callee_node, ts_field_operand);
string_desc_t operand_name =
sd_new_addr (ts_node_end_byte (operand_node) - ts_node_start_byte (operand_node),
- (char *) contents + ts_node_start_byte (operand_node));
+ contents + ts_node_start_byte (operand_node));
fprintf (stderr, "operand_node = [%s]|%s| = %s\n", ts_node_type (operand_node), ts_node_string (operand_node), sd_c (operand_name));
TSNode field_node = ts_node_child_by_field_id (callee_node, ts_field_field);
string_desc_t field_name =
sd_new_addr (ts_node_end_byte (field_node) - ts_node_start_byte (field_node),
- (char *) contents + ts_node_start_byte (field_node));
+ contents + ts_node_start_byte (field_node));
fprintf (stderr, "field_node = [%s]|%s| = %s\n", ts_node_type (field_node), ts_node_string (field_node), sd_c (field_name));
}
#endif
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
if (sd_equals (subnode_string, sd_from_c ("gettext")))
{
TSNode argsnode = ts_node_child_by_field_id (node, ts_field_arguments);
my_linebuf[read_bytes - 1] = '\n';
/* Append this line to the accumulator. */
- sb_xappend_desc (&buffer, sd_new_addr (read_bytes, my_linebuf));
+ sb_xappend_desc (&buffer,
+ sd_new_addr (read_bytes, (const char *) my_linebuf));
}
/* Done accumulating the here document. */
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_t
+static rw_string_desc_t
extract_quotelike_pass1 (struct perl_extractor *xp, int delim)
{
struct string_buffer buffer;
if (nested && c == delim)
{
- string_desc_t inner = extract_quotelike_pass1 (xp, delim);
- sb_xappend_desc (&buffer, inner);
+ rw_string_desc_t inner = extract_quotelike_pass1 (xp, delim);
+ sb_xappend_desc (&buffer, sd_readonly (inner));
sd_free (inner);
}
else if (c == '\\')
/* Like extract_quotelike_pass1, but return the complete string in UTF-8
encoding. */
-static string_desc_t
+static rw_string_desc_t
extract_quotelike_pass1_utf8 (struct perl_extractor *xp, int delim)
{
- string_desc_t string = extract_quotelike_pass1 (xp, delim);
- string_desc_t utf8_string =
- string_desc_from_current_source_encoding (string, lc_string,
+ rw_string_desc_t string = extract_quotelike_pass1 (xp, delim);
+ rw_string_desc_t utf8_string =
+ string_desc_from_current_source_encoding (sd_readonly (string), lc_string,
logical_file_name,
xp->line_number);
if (sd_data (utf8_string) != sd_data (string))
static void
extract_quotelike (struct perl_extractor *xp, token_ty *tp, int delim)
{
- string_desc_t string = extract_quotelike_pass1_utf8 (xp, delim);
+ rw_string_desc_t string = extract_quotelike_pass1_utf8 (xp, delim);
size_t len = sd_length (string);
tp->type = token_type_string;
extract_triple_quotelike (struct perl_extractor *xp, token_ty *tp, int delim,
bool interpolate)
{
- string_desc_t string;
+ rw_string_desc_t string;
tp->type = token_type_regex_op;
string = extract_quotelike_pass1_utf8 (xp, delim);
if (interpolate)
- interpolate_keywords (xp, string, xp->line_number);
+ interpolate_keywords (xp, sd_readonly (string), xp->line_number);
sd_free (string);
if (delim == '(' || delim == '<' || delim == '{' || delim == '[')
}
string = extract_quotelike_pass1_utf8 (xp, delim);
if (interpolate)
- interpolate_keywords (xp, string, xp->line_number);
+ interpolate_keywords (xp, sd_readonly (string), xp->line_number);
sd_free (string);
}
int length =
u8_uctomb ((unsigned char *) tmpbuf, oct_number, 2);
if (length > 0)
- sb_xappend_desc (&buffer, sd_new_addr (length, tmpbuf));
+ sb_xappend_desc (&buffer,
+ sd_new_addr (length, (const char *) tmpbuf));
}
continue;
case 'x':
int length =
u8_uctomb ((unsigned char *) tmpbuf, hex_number, 6);
if (length > 0)
- sb_xappend_desc (&buffer, sd_new_addr (length, tmpbuf));
+ sb_xappend_desc (&buffer,
+ sd_new_addr (length, (const char *) tmpbuf));
}
continue;
case 'c':
u8_uctomb ((unsigned char *) tmpbuf, unicode, 6);
if (length > 0)
sb_xappend_desc (&buffer,
- sd_new_addr (length, tmpbuf));
+ sd_new_addr (length, (const char *) tmpbuf));
}
free (name);
{
string_desc_t contents = sb_contents (&buffer);
if (!maybe_hash_deref)
- sd_set_char_at (contents, 0, '%');
+ ((char *) sd_data (contents))[0] = '%';
if (hash_find_entry (&keywords,
sd_data (contents),
sd_length (contents),
{
string_desc_t entire =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
/* It should start with two slashes. */
if (!(sd_length (entire) >= 2
&& sd_char_at (entire, 0) == '/'
{
string_desc_t entire =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
/* It should start and end with the C comment markers. */
if (!(sd_length (entire) >= 4
&& sd_char_at (entire, 0) == '/'
that is non-empty and has no escape sequences. */
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
return xsd_c (subnode_string);
}
}
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
if (skip_leading_whitespace)
{
/* After backslash-newline, skip ASCII whitespace. */
uint8_t buf[6];
int n = u8_uctomb (buf, value, sizeof (buf));
if (n > 0)
- sb_xappend_desc (&buffer, sd_new_addr (n, (char *) buf));
+ sb_xappend_desc (&buffer, sd_new_addr (n, (const char *) buf));
else
invalid = true;
}
uint8_t buf[6];
int n = u8_uctomb (buf, value, sizeof (buf));
if (n > 0)
- sb_xappend_desc (&buffer, sd_new_addr (n, (char *) buf));
+ sb_xappend_desc (&buffer, sd_new_addr (n, (const char *) buf));
else
invalid = true;
}
string_desc_t callee_name =
sd_new_addr (ts_node_end_byte (callee_node) - ts_node_start_byte (callee_node),
- (char *) contents + ts_node_start_byte (callee_node));
+ contents + ts_node_start_byte (callee_node));
/* Context iterator. */
flag_context_list_iterator_ty next_context_iter =
{
string_desc_t callee_name =
sd_new_addr (ts_node_end_byte (*callee_node) - ts_node_start_byte (*callee_node),
- (char *) contents + ts_node_start_byte (*callee_node));
+ contents + ts_node_start_byte (*callee_node));
next_context_iter =
(args_count >= 2
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
if (sd_equals (subnode_string, sd_from_c ("gettext")))
{
TSNode argsnode = ts_node_child_by_field_id (node, ts_field_arguments);
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
fprintf (stderr, "identifier=%s\n", xsd_c (subnode_string));
if (sd_equals (subnode_string, sd_from_c ("println")))
{
{
string_desc_t entire =
sd_new_addr (ts_node_end_byte (node) - ts_node_start_byte (node),
- (char *) contents + ts_node_start_byte (node));
+ contents + ts_node_start_byte (node));
/* It should either start with two slashes... */
if (sd_length (entire) >= 2
&& sd_char_at (entire, 0) == '/'
logical_file_name, line_number, (size_t)(-1), false,
_("lone surrogate U+%04X"), uc);
string_desc_t fffd = /* U+FFFD in UTF-8 encoding. */
- sd_new_addr (3, (char *) "\357\277\275");
+ sd_new_addr (3, "\357\277\275");
sbr_xprepend_desc (&buffer->sbr, fffd);
}
int n = u8_uctomb (buf, uc, sizeof (buf));
if (!(n > 0))
abort ();
- sbr_xprepend_desc (&buffer->sbr, sd_new_addr (n, (char *) buf));
+ sbr_xprepend_desc (&buffer->sbr, sd_new_addr (n, (const char *) buf));
buffer->utf16_surr = 0;
}
int n = u8_uctomb (buf, c, sizeof (buf));
if (!(n > 0))
abort ();
- sbr_xprepend_desc (&buffer->sbr, sd_new_addr (n, (char *) buf));
+ sbr_xprepend_desc (&buffer->sbr, sd_new_addr (n, (const char *) buf));
}
}
}
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
sbru_xprepend_desc (buffer, subnode_string);
}
else if (ts_node_symbol (subnode) == ts_symbol_escape_sequence)
that is non-empty and has no escape sequences. */
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
return xsd_c (subnode_string);
}
}
string_desc_t callee_name =
sd_new_addr (ts_node_end_byte (callee_node) - ts_node_start_byte (callee_node),
- (char *) contents + ts_node_start_byte (callee_node));
+ contents + ts_node_start_byte (callee_node));
/* Context iterator. */
flag_context_list_iterator_ty next_context_iter =
{
string_desc_t subnode_string =
sd_new_addr (ts_node_end_byte (subnode) - ts_node_start_byte (subnode),
- (char *) contents + ts_node_start_byte (subnode));
+ contents + ts_node_start_byte (subnode));
if (sd_equals (subnode_string, sd_from_c ("gettext")))
{
TSNode argsnode = ts_node_child_by_field_id (node, ts_field_arguments);
context.from_filename = file_name;
context.message = NULL;
- string = convert_string_directly (xgettext_current_source_iconv, string,
- &context);
+ return convert_string_directly (xgettext_current_source_iconv, string,
+ &context);
#else
/* If we don't have iconv(), the only supported values for
xgettext_global_source_encoding and thus also for
}
/* Like from_current_source_encoding, for a string that may contain NULs. */
-string_desc_t
+rw_string_desc_t
string_desc_from_current_source_encoding (string_desc_t string,
lexical_context_ty lcontext,
const char *file_name,
context.from_filename = file_name;
context.message = NULL;
- string = convert_string_desc_directly (xgettext_current_source_iconv,
- string, &context);
+ return convert_string_desc_directly (xgettext_current_source_iconv,
+ string, &context);
#else
/* If we don't have iconv(), the only supported values for
xgettext_global_source_encoding and thus also for
#endif
}
- return string;
+ return sd_readwrite (string);
}
/* Keeping track of the encoding of strings to be extracted.
- Copyright (C) 2001-2023 Free Software Foundation, Inc.
+ Copyright (C) 2001-2025 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
size_t line_number);
/* Like from_current_source_encoding, for a string that may contain NULs. */
-extern string_desc_t
+extern rw_string_desc_t
string_desc_from_current_source_encoding (string_desc_t string,
lexical_context_ty lcontext,
const char *file_name,