aboutsummaryrefslogtreecommitdiffstats
path: root/src/mds-kbdc/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mds-kbdc/string.c')
-rw-r--r--src/mds-kbdc/string.c166
1 files changed, 83 insertions, 83 deletions
diff --git a/src/mds-kbdc/string.c b/src/mds-kbdc/string.c
index a334611..c0e9852 100644
--- a/src/mds-kbdc/string.c
+++ b/src/mds-kbdc/string.c
@@ -30,12 +30,13 @@
* @param string The string
* @return The length of the string
*/
-size_t string_length(const char32_t* restrict string)
+size_t
+string_length(const char32_t *restrict string)
{
- size_t i = 0;
- while (string[i] != -1)
- i++;
- return i;
+ size_t i = 0;
+ while (string[i] != -1)
+ i++;
+ return i;
}
@@ -45,43 +46,41 @@ size_t string_length(const char32_t* restrict string)
* @param string The UTF-8 string
* @return The string in UTF-32, `NULL` on error
*/
-char32_t* string_decode(const char* restrict string)
+char32_t *
+string_decode(const char *restrict string)
{
- size_t i, j, n, length = 0;
- char32_t* rc;
-
- /* Get the length of the UTF-32 string, excluding termination. */
- for (i = 0; string[i]; i++)
- if ((string[i] & 0xC0) != 0x80)
- length++;
-
- /* Allocated UTF-32 string. */
- fail_if (xmalloc(rc, length + 1, char32_t));
-
- /* Convert to UTF-32. */
- for (i = j = n = 0; string[i]; i++)
- {
- char c = string[i];
- if (n)
- {
- rc[j] <<= 6, rc[j] |= c & 0x3F;
- if (--n == 0)
- j++;
- }
- else if ((c & 0xC0) == 0xC0)
- {
- while (c & 0x80)
- n++, c = (char)(c << 1);
- rc[j] = c >> n--;
+ size_t i, j, n, length = 0;
+ char32_t *rc;
+ char c;
+
+ /* Get the length of the UTF-32 string, excluding termination. */
+ for (i = 0; string[i]; i++)
+ if ((string[i] & 0xC0) != 0x80)
+ length++;
+
+ /* Allocated UTF-32 string. */
+ fail_if (xmalloc(rc, length + 1, char32_t));
+
+ /* Convert to UTF-32. */
+ for (i = j = n = 0; string[i]; i++) {
+ c = string[i];
+ if (n) {
+ rc[j] <<= 6, rc[j] |= c & 0x3F;
+ if (!--n)
+ j++;
+ } else if ((c & 0xC0) == 0xC0) {
+ while (c & 0x80)
+ n++, c = (char)(c << 1);
+ rc[j] = c >> n--;
+ } else {
+ rc[j++] = c & 255;
+ }
}
- else
- rc[j++] = c & 255;
- }
- /* -1-terminate and return. */
- return rc[length] = -1, rc;
- fail:
- return NULL;
+ /* -1-terminate and return. */
+ return rc[length] = -1, rc;
+fail:
+ return NULL;
}
@@ -93,42 +92,43 @@ char32_t* string_decode(const char* restrict string)
* @param string The UTF-32 string
* @return The string in UTF-8, `NULL` on error
*/
-char* string_encode(const char32_t* restrict string)
+char *
+string_encode(const char32_t *restrict string)
{
- size_t i, j, n = string_length(string);
- char* restrict rc;
-
- /* Allocated Modified UTF-8 string. */
- fail_if (xmalloc(rc, 7 * n + 1, char));
-
- /* Convert to Modified UTF-8. */
- for (i = j = 0; i < n; i++)
- {
-#define _c(s) rc[j++] = (char)(((c >> (s)) & 0x3F) | 0x80)
-#define _t(s) (0 < c) && ((uint32_t)c < (uint32_t)(1ULL << s))
- char32_t c = string[i];
- if (c == 0) rc[j++] = (char)0xC0, rc[j++] = (char)0x80;
- else if (_t( 7)) rc[j++] = (char)c;
- else if (_t(11)) rc[j++] = (char)((c >> 6) | 0xC0), _c( 0);
- else if (_t(16)) rc[j++] = (char)((c >> 12) | 0xE0), _c( 6), _c( 0);
- else if (_t(21)) rc[j++] = (char)((c >> 18) | 0xF0), _c(12), _c( 6), _c( 0);
- /* UTF-8 actually ends here, fits 32 planes. */
- else if (_t(26)) rc[j++] = (char)((c >> 24) | 0xF8), _c(18), _c(12), _c( 6), _c(0);
- else if (_t(31)) rc[j++] = (char)((c >> 30) | 0xFC), _c(24), _c(18), _c(12), _c(6), _c(0);
- /* The orginal UTF-8 specification ended here, fits 31 bits.
- * However, we added another byte so we can fit 32 bits
- * (actually we ca now fit 36 bits.)
- * However, we only needed this in `string_decode` which would
- * not require any changed, but we added it here for symmetry. */
- else rc[j++] = (char)0xFE, _c(30), _c(24), _c(18), _c(12), _c(6), _c(0);
+ size_t i, j, n = string_length(string);
+ char *restrict rc;
+ char32_t c;
+
+ /* Allocated Modified UTF-8 string. */
+ fail_if (xmalloc(rc, 7 * n + 1, char));
+
+ /* Convert to Modified UTF-8. */
+ for (i = j = 0; i < n; i++) {
+#define _c(s) rc[j++] = (char)(((c >> (s)) & 0x3F) | 0x80)
+#define _t(s) (0 < c) && ((uint32_t)c < (uint32_t)(1ULL << (s)))
+ c = string[i];
+ if (!c) rc[j++] = (char)0xC0, rc[j++] = (char)0x80;
+ else if (_t( 7)) rc[j++] = (char)c;
+ else if (_t(11)) rc[j++] = (char)((c >> 6) | 0xC0), _c( 0);
+ else if (_t(16)) rc[j++] = (char)((c >> 12) | 0xE0), _c( 6), _c( 0);
+ else if (_t(21)) rc[j++] = (char)((c >> 18) | 0xF0), _c(12), _c( 6), _c( 0);
+ /* UTF-8 actually ends here, fits 32 planes. */
+ else if (_t(26)) rc[j++] = (char)((c >> 24) | 0xF8), _c(18), _c(12), _c( 6), _c(0);
+ else if (_t(31)) rc[j++] = (char)((c >> 30) | 0xFC), _c(24), _c(18), _c(12), _c(6), _c(0);
+ /* The orginal UTF-8 specification ended here, fits 31 bits.
+ * However, we added another byte so we can fit 32 bits
+ * (actually we ca now fit 36 bits.)
+ * However, we only needed this in `string_decode` which would
+ * not require any changed, but we added it here for symmetry. */
+ else rc[j++] = (char)0xFE, _c(30), _c(24), _c(18), _c(12), _c(6), _c(0);
#undef _t
#undef _c
- }
-
- /* NUL-terminate and return. */
- return rc[j] = '\0', rc;
- fail:
- return NULL;
+ }
+
+ /* NUL-terminate and return. */
+ return rc[j] = '\0', rc;
+fail:
+ return NULL;
}
@@ -138,16 +138,16 @@ char* string_encode(const char32_t* restrict string)
* @param string The string
* @return A duplicate of the string, `NULL` on error or if `string` is `NULL`
*/
-char32_t* string_dup(const char32_t* restrict string)
+char32_t *
+string_dup(const char32_t *restrict string)
{
- size_t n;
- char32_t* rc;
- if (string == NULL)
- return NULL;
- n = string_length(string) + 1;
- fail_if (xmemdup(rc, string, n, char32_t));
- return rc;
- fail:
- return NULL;
+ size_t n;
+ char32_t *rc;
+ if (!string)
+ return NULL;
+ n = string_length(string) + 1;
+ fail_if (xmemdup(rc, string, n, char32_t));
+ return rc;
+fail:
+ return NULL;
}
-