lock
mem-hash-map
memchr
+ memeq
memmove
memset
minmax
libunistring-optional
markup
mem-hash-map
+ memeq
minmax
once
open
#include <dirent.h>
#include <errno.h>
#include <fnmatch.h>
+#include <string.h>
#include <libxml/parser.h>
#include <libxml/uri.h>
char *reduced = xstrdup (base);
/* Remove a trailing ".in" - it's a generic suffix. */
while (strlen (reduced) >= 3
- && memcmp (reduced + strlen (reduced) - 3, ".in", 3) == 0)
+ && memeq (reduced + strlen (reduced) - 3, ".in", 3))
reduced[strlen (reduced) - 3] = '\0';
int err = fnmatch (rule->pattern, last_component (reduced), FNM_PATHNAME);
const char *name = dp->d_name;
size_t namlen = strlen (name);
- if (namlen > 4 && memcmp (name + namlen - 4, ".loc", 4) == 0)
+ if (namlen > 4 && memeq (name + namlen - 4, ".loc", 4))
{
char *locator_file_name =
xconcatenated_filename (directory, name, NULL);
add_mo_suffix (const char *fname)
{
size_t len = strlen (fname);
- if (len > 3 && memcmp (fname + len - 3, ".mo", 3) == 0)
+ if (len > 3 && memeq (fname + len - 3, ".mo", 3))
return fname;
- if (len > 4 && memcmp (fname + len - 4, ".gmo", 4) == 0)
+ if (len > 4 && memeq (fname + len - 4, ".gmo", 4))
return fname;
char *result = XNMALLOC (len + 4, char);
stpcpy (stpcpy (result, fname), ".mo");
{
const char *flag = sticky_flags->item[i];
size_t flag_len = strlen (flag);
- if (flag_len >= 7 && memcmp (flag + flag_len - 7, "-format", 7) == 0)
+ if (flag_len >= 7 && memeq (flag + flag_len - 7, "-format", 7))
{
flag_len -= 7;
- bool has_no_prefix = (flag_len >= 3 && memcmp (flag, "no-", 3) == 0);
+ bool has_no_prefix = (flag_len >= 3 && memeq (flag, "no-", 3));
if (has_no_prefix)
{
flag += 3;
}
for (size_t j = 0; j < NFORMATS; j++)
if (strlen (format_language[j]) == flag_len
- && memcmp (format_language[j], flag, flag_len) == 0)
+ && memeq (format_language[j], flag, flag_len))
{
/* The value of the flag is stored in mp->is_format[j]. */
if (mp->is_format[j] == (has_no_prefix ? no : yes))
const char *name = dp->d_name;
size_t namlen = strlen (name);
- if (namlen > 4 && memcmp (name + namlen - 4, ".pot", 4) == 0)
+ if (namlen > 4 && memeq (name + namlen - 4, ".pot", 4))
{
if (found == NULL)
found = xstrdup (name);
if (strcmp (charset, "CHARSET") == 0
&& ((filenamelen >= 4
- && memcmp (filename + filenamelen - 4,
- ".pot", 4) == 0)
+ && memeq (filename + filenamelen - 4,
+ ".pot", 4))
|| is_ascii_message_list (mlp)))
canon_charset = po_charset_ascii;
else
bool all_equal = true;
for (size_t i = 0; i < tmp->alternative_count; i++)
if (!(tmp->alternative[i].msgstr_len == first->msgstr_len
- && memcmp (tmp->alternative[i].msgstr, first->msgstr,
- first->msgstr_len) == 0))
+ && memeq (tmp->alternative[i].msgstr, first->msgstr,
+ first->msgstr_len)))
{
all_equal = false;
break;
const char *msgstr2, size_t msgstr2_len)
{
return (msgstr1_len == msgstr2_len
- && memcmp (msgstr1, msgstr2, msgstr1_len) == 0);
+ && memeq (msgstr1, msgstr2, msgstr1_len));
}
static bool
ptr1 = NULL;
break;
}
- if (memcmp (ptr1, field, fieldlen) == 0)
+ if (memeq (ptr1, field, fieldlen))
break;
ptr1 = (const char *) memchr (ptr1, '\n', msgstr1_end - ptr1);
if (ptr1 == NULL)
ptr2 = NULL;
break;
}
- if (memcmp (ptr2, field, fieldlen) == 0)
+ if (memeq (ptr2, field, fieldlen))
break;
ptr2 = (const char *) memchr (ptr2, '\n', msgstr2_end - ptr2);
if (ptr2 == NULL)
if (strcmp (charset, "CHARSET") == 0
&& ((filename != NULL
&& (filenamelen = strlen (filename)) >= 4
- && memcmp (filename + filenamelen - 4, ".pot", 4)
- == 0)
+ && memeq (filename + filenamelen - 4, ".pot", 4))
|| is_ascii_message_list (mlp)))
canon_charset = po_charset_ascii;
else
for (size_t i = 0; i < language_variant_table_size; i++)
if (strlen (language_variant_table[i].english)
== language_team_len
- && memcmp (language_variant_table[i].english,
- language_team_ptr, language_team_len) == 0)
+ && memeq (language_variant_table[i].english,
+ language_team_ptr, language_team_len))
{
header_fields[LANGUAGE].string =
language_variant_table[i].code;
if (header_fields[LANGUAGE].string == NULL)
for (size_t i = 0; i < language_table_size; i++)
if (strlen (language_table[i].english) == language_team_len
- && memcmp (language_table[i].english,
- language_team_ptr, language_team_len) == 0)
+ && memeq (language_table[i].english,
+ language_team_ptr, language_team_len))
{
header_fields[LANGUAGE].string = language_table[i].code;
break;
size_t len = s - t;
/* Accept fuzzy flag. */
- if (len == 5 && memcmp (t, "fuzzy", 5) == 0)
+ if (len == 5 && memeq (t, "fuzzy", 5))
{
*fuzzyp = true;
continue;
}
/* Accept format description. */
- if (len >= 7 && memcmp (t + len - 7, "-format", 7) == 0)
+ if (len >= 7 && memeq (t + len - 7, "-format", 7))
{
const char *p = t;
size_t n = len - 7;
enum is_format value;
- if (n >= 3 && memcmp (p, "no-", 3) == 0)
+ if (n >= 3 && memeq (p, "no-", 3))
{
p += 3;
n -= 3;
value = no;
}
- else if (n >= 9 && memcmp (p, "possible-", 9) == 0)
+ else if (n >= 9 && memeq (p, "possible-", 9))
{
p += 9;
n -= 9;
value = possible;
}
- else if (n >= 11 && memcmp (p, "impossible-", 11) == 0)
+ else if (n >= 11 && memeq (p, "impossible-", 11))
{
p += 11;
n -= 11;
size_t i;
for (i = 0; i < NFORMATS; i++)
if (strlen (format_language[i]) == n
- && memcmp (format_language[i], p, n) == 0)
+ && memeq (format_language[i], p, n))
{
formatp[i] = value;
break;
}
/* Accept range description "range: <min>..<max>". */
- if (len == 6 && memcmp (t, "range:", 6) == 0)
+ if (len == 6 && memeq (t, "range:", 6))
{
/* Skip whitespace. */
while (*s != '\0' && strchr ("\n \t\r\f\v,", *s) != NULL)
}
/* Accept wrap description. */
- if (len == 4 && memcmp (t, "wrap", 4) == 0)
+ if (len == 4 && memeq (t, "wrap", 4))
{
*wrapp = yes;
continue;
}
- if (len == 7 && memcmp (t, "no-wrap", 7) == 0)
+ if (len == 7 && memeq (t, "no-wrap", 7))
{
*wrapp = no;
continue;
}
/* Accept syntax check description. */
- if (scp != NULL && len >= 6 && memcmp (t + len - 6, "-check", 6) == 0)
+ if (scp != NULL && len >= 6 && memeq (t + len - 6, "-check", 6))
{
const char *p = t;
size_t n = len - 6;
enum is_syntax_check value;
- if (n >= 3 && memcmp (p, "no-", 3) == 0)
+ if (n >= 3 && memeq (p, "no-", 3))
{
p += 3;
n -= 3;
size_t i;
for (i = 0; i < NSYNTAXCHECKS; i++)
if (strlen (syntax_check_name[i]) == n
- && memcmp (syntax_check_name[i], p, n) == 0)
+ && memeq (syntax_check_name[i], p, n))
{
scp[i] = value;
break;
{
if (!(dcatr->allow_duplicates_if_same_msgstr
&& msgstr_len == mp->msgstr_len
- && memcmp (msgstr, mp->msgstr, msgstr_len) == 0))
+ && memeq (msgstr, mp->msgstr, msgstr_len)))
{
/* We give a fatal error about this, regardless whether the
translations are equal or different. This is for consistency
if (!(strcmp (charset, "CHARSET") == 0
&& ((filenamelen >= 4
- && memcmp (filename + filenamelen - 4, ".pot", 4) == 0)
+ && memeq (filename + filenamelen - 4, ".pot", 4))
|| is_pot_role)))
{
char *warning_message =
size_t filenamelen = strlen (filename);
if (!(filenamelen >= 4
- && memcmp (filename + filenamelen - 4, ".pot", 4) == 0))
+ && memeq (filename + filenamelen - 4, ".pot", 4)))
ps->catr->xeh->xerror (CAT_SEVERITY_WARNING,
NULL, filename, (size_t)(-1), (size_t)(-1), true,
_("\
else
#endif
return (mbc1->bytes == mbc2->bytes
- && memcmp (mbc1->buf, mbc2->buf, mbc1->bytes) == 0);
+ && memeq (mbc1->buf, mbc2->buf, mbc1->bytes));
}
/* <ctype.h>, <wctype.h> classification. */
}
else if (strcmp (line, "Flag: unmatched") == 0)
next_is_obsolete = true;
- else if (strlen (line) >= 6 && memcmp (line, "Flag: ", 6) == 0)
+ else if (strlen (line) >= 6 && memeq (line, "Flag: ", 6))
special_comment_add (line + 6);
- else if (strlen (line) >= 9 && memcmp (line, "Comment: ", 9) == 0)
+ else if (strlen (line) >= 9 && memeq (line, "Comment: ", 9))
/* A comment extracted from the source. */
catalog_reader_seen_comment_dot (catr, line + 9);
else
unsigned long number;
char *endp;
- if (strlen (line) >= 6 && memcmp (line, "File: ", 6) == 0
+ if (strlen (line) >= 6 && memeq (line, "File: ", 6)
&& (last_colon = strrchr (line + 6, ':')) != NULL
&& c_isdigit (*(last_colon + 1))
&& (number = strtoul (last_colon + 1, &endp, 10), *endp == '\0'))
#if DEBUG
fprintf (stderr, "in my_header_callback: buffer = %.*s\n", (int) n, buffer);
#endif
- if (n >= 5 && memcmp (buffer, "HTTP/", 5) == 0)
+ if (n >= 5 && memeq (buffer, "HTTP/", 5))
{
/* buffer contains a line of the form "HTTP/1.1 code description".
Extract the code. */
{
/* Do nothing if the string is already in the list. */
for (size_t j = 0; j < slp->nitems; ++j)
- if (strlen (slp->item[j]) == s_len && memcmp (slp->item[j], s, s_len) == 0)
+ if (strlen (slp->item[j]) == s_len && memeq (slp->item[j], s, s_len))
return;
/* Grow the list. */
string_list_member_desc (const string_list_ty *slp, const char *s, size_t s_len)
{
for (size_t j = 0; j < slp->nitems; ++j)
- if (strlen (slp->item[j]) == s_len && memcmp (slp->item[j], s, s_len) == 0)
+ if (strlen (slp->item[j]) == s_len && memeq (slp->item[j], s, s_len))
return true;
return false;
}
size_t r;
for (r = 0; r < n_sysdep_segments; r++)
if (sysdep_segments[r].length == length
- && memcmp (sysdep_segments[r].pointer, pointer, length)
- == 0)
+ && memeq (sysdep_segments[r].pointer, pointer, length))
break;
if (r == n_sysdep_segments)
{
if (value[0] != '\0')
{
bool is_msgstr =
- (strlen (name) >= 6 && memcmp (name, "msgstr", 6) == 0);
+ (strlen (name) >= 6 && memeq (name, "msgstr", 6));
/* or equivalent: = (css_class == class_msgstr) */
for (size_t i = 0; i < NFORMATS; i++)
/* Looks like NAME is PACKAGE . TYPENAME . METHODNAME. */
/* We are only interested in the gotext and snapcore packages. */
if (first_dot - name == strlen (GOTEXT_PACKAGE_FULLNAME)
- && memcmp (name, GOTEXT_PACKAGE_FULLNAME, strlen (GOTEXT_PACKAGE_FULLNAME)) == 0)
+ && memeq (name, GOTEXT_PACKAGE_FULLNAME, strlen (GOTEXT_PACKAGE_FULLNAME)))
{
void *found_type;
if (hash_find_entry (&gotext_package.defined_types,
}
}
else if (first_dot - name == strlen (SNAPCORE_PACKAGE_FULLNAME)
- && memcmp (name, SNAPCORE_PACKAGE_FULLNAME, strlen (SNAPCORE_PACKAGE_FULLNAME)) == 0)
+ && memeq (name, SNAPCORE_PACKAGE_FULLNAME, strlen (SNAPCORE_PACKAGE_FULLNAME)))
{
void *found_type;
if (hash_find_entry (&snapcore_package.defined_types,
/* Looks like NAME is PACKAGE . FUNCNAME. */
/* We are only interested in the gotext and snapcore packages. */
if (first_dot - name == strlen (GOTEXT_PACKAGE_FULLNAME)
- && memcmp (name, GOTEXT_PACKAGE_FULLNAME, strlen (GOTEXT_PACKAGE_FULLNAME)) == 0)
+ && memeq (name, GOTEXT_PACKAGE_FULLNAME, strlen (GOTEXT_PACKAGE_FULLNAME)))
insert_keyword_callshape (&gotext_keywords,
first_dot + 1, end - (first_dot + 1),
&shape);
else if (first_dot - name == strlen (SNAPCORE_PACKAGE_FULLNAME)
- && memcmp (name, SNAPCORE_PACKAGE_FULLNAME, strlen (SNAPCORE_PACKAGE_FULLNAME)) == 0)
+ && memeq (name, SNAPCORE_PACKAGE_FULLNAME, strlen (SNAPCORE_PACKAGE_FULLNAME)))
insert_keyword_callshape (&snapcore_keywords,
first_dot + 1, end - (first_dot + 1),
&shape);
{
bool accepts_context =
((argparser->keyword_len == 7
- && memcmp (argparser->keyword, "gettext", 7) == 0)
+ && memeq (argparser->keyword, "gettext", 7))
|| (argparser->keyword_len == 8
- && memcmp (argparser->keyword, "ngettext", 8) == 0)
+ && memeq (argparser->keyword, "ngettext", 8))
|| (argparser->keyword_len == 14
- && memcmp (argparser->keyword, "printf_gettext", 14) == 0)
+ && memeq (argparser->keyword, "printf_gettext", 14))
|| (argparser->keyword_len == 15
- && memcmp (argparser->keyword, "printf_ngettext", 15) == 0));
+ && memeq (argparser->keyword, "printf_ngettext", 15)));
bool accepts_expand =
((argparser->keyword_len == 7
- && memcmp (argparser->keyword, "gettext", 7) == 0)
+ && memeq (argparser->keyword, "gettext", 7))
|| (argparser->keyword_len == 8
- && memcmp (argparser->keyword, "ngettext", 8) == 0));
+ && memeq (argparser->keyword, "ngettext", 8)));
if (accepts_context && argparser->next_is_msgctxt)
{
mixed_string_ty *ms = mixed_string_buffer_cloned_result (inner.token);
char *s = mixed_string_contents (ms);
bool expands_backslash_c =
(argparser->keyword_len == 7
- && memcmp (argparser->keyword, "gettext", 7) == 0);
+ && memeq (argparser->keyword, "gettext", 7));
bool backslash_c = false;
char *expanded =
(char *)
/* sentence_end doesn't treat '...' specially. */
const char *cp = end - (ending_char == '.' ? 2 : 3);
- if (cp >= str && memcmp (cp, "...", 3) == 0)
+ if (cp >= str && memeq (cp, "...", 3))
return true;
str = end + 1;
{
/* sentence_end doesn't treat '...' specially. */
const char *cp = end - 2;
- if (cp >= str && memcmp (cp, "...", 3) == 0)
+ if (cp >= str && memeq (cp, "...", 3))
ellipsis = cp;
}
else
{
/* Look for a '...'. */
const char *cp = end - 3;
- if (cp >= str && memcmp (cp, "...", 3) == 0)
+ if (cp >= str && memeq (cp, "...", 3))
ellipsis = cp;
else
{
size_t other_len = strlen (other);
return (bp->nsegments == 0
&& bp->curr_buflen == other_len
- && (other_len == 0 || memcmp (bp->curr_buffer, other, other_len) == 0)
+ && (other_len == 0 || memeq (bp->curr_buffer, other, other_len))
&& bp->utf16_surr == 0);
}
return prefix_len == 0
|| (bp->nsegments == 0
? bp->curr_buflen >= prefix_len
- && memcmp (bp->curr_buffer, prefix, prefix_len) == 0
+ && memeq (bp->curr_buffer, prefix, prefix_len)
: bp->segments[0]->length >= prefix_len
- && memcmp (bp->segments[0]->contents, prefix, prefix_len) == 0);
+ && memeq (bp->segments[0]->contents, prefix, prefix_len));
}
/* Auxiliary function: Ensure count more bytes are available in
char *reduced = xstrdup (base);
/* Remove a trailing ".in" - it's a generic suffix. */
while (strlen (reduced) >= 3
- && memcmp (reduced + strlen (reduced) - 3, ".in", 3) == 0)
+ && memeq (reduced + strlen (reduced) - 3, ".in", 3))
reduced[strlen (reduced) - 3] = '\0';
/* If no language is specified with -L, deduce it the extension. */
/* Analyze the flag part. */
{
bool pass = false;
- if (flag_end - flag_start >= 5 && memcmp (flag_start, "pass-", 5) == 0)
+ if (flag_end - flag_start >= 5 && memeq (flag_start, "pass-", 5))
{
pass = true;
flag_start += 5;
/* Unlike parse_comment_special(), we don't accept "fuzzy",
"wrap", or "check" here - it has no sense. */
if (flag_end - flag_start >= 7
- && memcmp (flag_end - 7, "-format", 7) == 0)
+ && memeq (flag_end - 7, "-format", 7))
{
const char *p = flag_start;
size_t n = flag_end - flag_start - 7;
enum is_format value;
- if (n >= 3 && memcmp (p, "no-", 3) == 0)
+ if (n >= 3 && memeq (p, "no-", 3))
{
p += 3;
n -= 3;
value = no;
}
- else if (n >= 9 && memcmp (p, "possible-", 9) == 0)
+ else if (n >= 9 && memeq (p, "possible-", 9))
{
p += 9;
n -= 9;
value = possible;
}
- else if (n >= 11 && memcmp (p, "impossible-", 11) == 0)
+ else if (n >= 11 && memeq (p, "impossible-", 11))
{
p += 11;
n -= 11;
value = impossible;
}
- else if (n >= 10 && memcmp (p, "undecided-", 10) == 0)
+ else if (n >= 10 && memeq (p, "undecided-", 10))
{
p += 10;
n -= 10;
for (size_t type = 0; type < NFORMATS; type++)
if (strlen (format_language[type]) == n
- && memcmp (format_language[type], p, n) == 0)
+ && memeq (format_language[type], p, n))
{
/* This dispatch does the reverse mapping of all the SCANNERS_*
macros defined in the x-*.h files. For example,