X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fstr.c;h=3c094902509426266cf97eb1caef393dc976451f;hb=8b4ecb31c06866aae734a8a4fa2201e5d333181d;hp=99602fba681e699146f2ddb4922b2e90ac1caadc;hpb=0408dbc8812c0bc845f55934a7e7f9fb74b3c4aa;p=pspp diff --git a/src/libpspp/str.c b/src/libpspp/str.c index 99602fba68..3c09490250 100644 --- a/src/libpspp/str.c +++ b/src/libpspp/str.c @@ -26,6 +26,7 @@ #include #include "libpspp/cast.h" +#include "libpspp/i18n.h" #include "libpspp/message.h" #include "libpspp/pool.h" @@ -143,9 +144,9 @@ buf_copy_str_lpad (char *dst, size_t dst_size, const char *src, char pad) memcpy (dst, src, dst_size); else { - size_t pad_cnt = dst_size - src_len; - memset (&dst[0], pad, pad_cnt); - memcpy (dst + pad_cnt, src, src_len); + size_t n_pad = dst_size - src_len; + memset (&dst[0], pad, n_pad); + memcpy (dst + n_pad, src, src_len); } } @@ -425,6 +426,15 @@ ss_dealloc (struct substring *ss) free (ss->string); } +/* Exchanges the contents of A and B. */ +void +ss_swap (struct substring *a, struct substring *b) +{ + struct substring tmp = *a; + *a = *b; + *b = tmp; +} + /* Truncates SS to at most CNT bytes in length. */ void ss_truncate (struct substring *ss, size_t cnt) @@ -919,6 +929,22 @@ ss_at_mblen (struct substring s, size_t ofs) else return 0; } + +size_t +ss_utf8_count_columns (struct substring s) +{ + return utf8_count_columns (s.string, s.length); +} + +/* Returns a substring of S starting at 0-based display column START and + running for N display columns. */ +struct substring +ss_utf8_columns (struct substring s, size_t start, size_t n) +{ + ss_advance (&s, utf8_columns_to_bytes (s.string, s.length, start)); + s.length = utf8_columns_to_bytes (s.string, s.length, n); + return s; +} /* Initializes ST as an empty string. */ void