summaryrefslogtreecommitdiff
path: root/libuxre/_collmult.c
diff options
context:
space:
mode:
authorThomas Ulmer <thomasmulmer02@gmail.com>2026-02-23 16:54:28 -0800
committerThomas Ulmer <thomasmulmer02@gmail.com>2026-02-23 16:54:28 -0800
commit15bd7946cc838a3151c357e4b0bc1ab85eecda62 (patch)
tree56977cb9bfc4349f46e2c608503a298df30ca957 /libuxre/_collmult.c
add musl and vi
Diffstat (limited to 'libuxre/_collmult.c')
-rw-r--r--libuxre/_collmult.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/libuxre/_collmult.c b/libuxre/_collmult.c
new file mode 100644
index 0000000..7a199b3
--- /dev/null
+++ b/libuxre/_collmult.c
@@ -0,0 +1,55 @@
+/*
+ * Changes by Gunnar Ritter, Freiburg i. Br., Germany, November 2002.
+ *
+ * Sccsid @(#)_collmult.c 1.4 (gritter) 9/22/03
+ */
+/* UNIX(R) Regular Expresssion Library
+ *
+ * Note: Code is released under the GNU LGPL
+ *
+ * Copyright (C) 2001 Caldera International, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ * Free Software Foundation, Inc.
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* #include "synonyms.h" */
+#include "colldata.h"
+#include <stddef.h>
+
+#define CCM(p) ((const CollMult *)(p))
+
+LIBUXRE_STATIC const CollElem *
+libuxre_collmult(struct lc_collate *col, const CollElem *cep, wchar_t wc)
+{
+ const char *tbl;
+ size_t sz;
+ w_type ch;
+
+ if (col == 0 || cep->multbeg == 0
+ || (tbl = (const char *)col->multtbl) == 0)
+ {
+ return ELEM_BADCHAR;
+ }
+ sz = col->elemsize + (sizeof(CollMult) - sizeof(CollElem));
+ tbl += sz * cep->multbeg;
+ while ((ch = CCM(tbl)->ch) != wc)
+ {
+ if (ch == 0)
+ return ELEM_BADCHAR; /* end of list */
+ tbl += sz;
+ }
+ return &CCM(tbl)->elem;
+}