From 15aca5e3963dd8c38d24f27afa2f6ffaaadac4ac Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Tue, 16 Mar 2021 17:07:39 +0200 Subject: [PATCH] utils: cleanup whitespace --- lib/utils/mu-utils.cc | 390 ++++++++++++++++++++-------------------- lib/utils/mu-utils.hh | 129 +++++++------ lib/utils/test-utils.cc | 35 ++-- 3 files changed, 285 insertions(+), 269 deletions(-) diff --git a/lib/utils/mu-utils.cc b/lib/utils/mu-utils.cc index d80dfb2f..917ce1c6 100644 --- a/lib/utils/mu-utils.cc +++ b/lib/utils/mu-utils.cc @@ -1,5 +1,5 @@ /* -** Copyright (C) 2017 Dirk-Jan C. Binnema +** Copyright (C) 2017-2021 Dirk-Jan C. Binnema ** ** This library is free software; you can redistribute it and/or ** modify it under the terms of the GNU Lesser General Public License @@ -89,7 +89,7 @@ gx_utf8_flatten (const gchar *str, gssize len) uc = g_utf8_get_char (cur); if (g_unichar_combining_class (uc) != 0) - continue; + continue; g_string_append_unichar (gstr, unichar_tolower(uc)); } @@ -104,49 +104,52 @@ gx_utf8_flatten (const gchar *str, gssize len) std::string // gx_utf8_flatten Mu::utf8_flatten (const char *str) { - if (!str) - return {}; + if (!str) + return {}; - // the pure-ascii case - if (g_str_is_ascii(str)) { - auto l = g_ascii_strdown (str, -1); - std::string s{l}; - g_free (l); - return s; - } + // the pure-ascii case + if (g_str_is_ascii(str)) { + auto l = g_ascii_strdown (str, -1); + std::string s{l}; + g_free (l); + return s; + } - // seems we need the big guns - char *flat = gx_utf8_flatten (str, -1); - if (!flat) - return {}; + // seems we need the big guns + char *flat = gx_utf8_flatten (str, -1); + if (!flat) + return {}; - std::string s{flat}; - g_free (flat); + std::string s{flat}; + g_free (flat); - return s; + return s; } std::string Mu::utf8_clean (const std::string& dirty) { - GString *gstr = g_string_sized_new (dirty.length()); + GString *gstr = g_string_sized_new (dirty.length()); - for (auto cur = dirty.c_str(); cur && *cur; cur = g_utf8_next_char (cur)) { + for (auto cur = dirty.c_str(); cur && *cur; cur = g_utf8_next_char (cur)) { - const gunichar uc = g_utf8_get_char (cur); - if (g_unichar_iscntrl (uc)) - g_string_append_c (gstr, ' '); - else - g_string_append_unichar (gstr, uc); - } + const gunichar uc = g_utf8_get_char (cur); + if (g_unichar_iscntrl (uc)) + g_string_append_c (gstr, ' '); + else + g_string_append_unichar (gstr, uc); + } - std::string clean(gstr->str, gstr->len); - g_string_free (gstr, TRUE); + std::string clean(gstr->str, gstr->len); + g_string_free (gstr, TRUE); + + clean.erase (0, clean.find_first_not_of(" ")); + clean.erase (clean.find_last_not_of(" ") + 1); // remove trailing space + + return clean; +} - clean.erase (0, clean.find_first_not_of(" ")); - clean.erase (clean.find_last_not_of(" ") + 1); // remove trailing space - return clean; std::string Mu::remove_ctrl (const std::string& str) { @@ -165,17 +168,18 @@ Mu::remove_ctrl (const std::string& str) return result; } + std::vector Mu::split (const std::string& str, const std::string& sepa) { - char **parts = g_strsplit(str.c_str(), sepa.c_str(), -1); - std::vector vec; - for (auto part = parts; part && *part; ++part) - vec.push_back (*part); + char **parts = g_strsplit(str.c_str(), sepa.c_str(), -1); + std::vector vec; + for (auto part = parts; part && *part; ++part) + vec.push_back (*part); - g_strfreev(parts); + g_strfreev(parts); - return vec; + return vec; } std::string @@ -197,13 +201,13 @@ Mu::quote (const std::string& str) std::string Mu::format (const char *frm, ...) { - va_list args; + va_list args; - va_start (args, frm); + va_start (args, frm); auto str = format(frm, args); - va_end (args); + va_end (args); - return str; + return str; } std::string @@ -216,10 +220,10 @@ Mu::format (const char *frm, va_list args) return {}; } - std::string str{s}; - g_free (s); + std::string str{s}; + g_free (s); - return str; + return str; } @@ -232,84 +236,84 @@ static_assert(sizeof(InternalDateMax) == 10 + 1, "invalid"); static std::string date_boundary (bool is_first) { - return is_first ? InternalDateMin : InternalDateMax; + return is_first ? InternalDateMin : InternalDateMax; } std::string Mu::date_to_time_t_string (int64_t t) { - char buf[sizeof(InternalDateMax)]; - g_snprintf (buf, sizeof(buf), InternalDateFormat, t); + char buf[sizeof(InternalDateMax)]; + g_snprintf (buf, sizeof(buf), InternalDateFormat, t); - return buf; + return buf; } static std::string delta_ymwdhMs (const std::string& expr) { - char *endptr; - auto num = strtol (expr.c_str(), &endptr, 10); - if (num <= 0 || num > 9999 || !endptr || !*endptr) - return date_boundary (true); + char *endptr; + auto num = strtol (expr.c_str(), &endptr, 10); + if (num <= 0 || num > 9999 || !endptr || !*endptr) + return date_boundary (true); - int years, months, weeks, days, hours, minutes, seconds; - years = months = weeks = days = hours = minutes = seconds = 0; + int years, months, weeks, days, hours, minutes, seconds; + years = months = weeks = days = hours = minutes = seconds = 0; - switch (endptr[0]) { - case 's': seconds = num; break; - case 'M': minutes = num; break; - case 'h': hours = num; break; - case 'd': days = num; break; - case 'w': weeks = num; break; - case 'm': months = num; break; - case 'y': years = num; break; - default: - return date_boundary (true); - } + switch (endptr[0]) { + case 's': seconds = num; break; + case 'M': minutes = num; break; + case 'h': hours = num; break; + case 'd': days = num; break; + case 'w': weeks = num; break; + case 'm': months = num; break; + case 'y': years = num; break; + default: + return date_boundary (true); + } - GDateTime *then, *now = g_date_time_new_now_local (); - if (weeks != 0) - then = g_date_time_add_weeks (now, -weeks); - else - then = g_date_time_add_full (now, -years, -months,-days, - -hours, -minutes, -seconds); + GDateTime *then, *now = g_date_time_new_now_local (); + if (weeks != 0) + then = g_date_time_add_weeks (now, -weeks); + else + then = g_date_time_add_full (now, -years, -months,-days, + -hours, -minutes, -seconds); - time_t t = MAX (0, (gint64)g_date_time_to_unix (then)); + time_t t = MAX (0, (gint64)g_date_time_to_unix (then)); - g_date_time_unref (then); - g_date_time_unref (now); + g_date_time_unref (then); + g_date_time_unref (now); - return date_to_time_t_string (t); + return date_to_time_t_string (t); } static std::string special_date (const std::string& d, bool is_first) { - if (d == "now") - return date_to_time_t_string (time(NULL)); + if (d == "now") + return date_to_time_t_string (time(NULL)); - else if (d == "today") { + else if (d == "today") { - GDateTime *dt, *midnight; - dt = g_date_time_new_now_local (); + GDateTime *dt, *midnight; + dt = g_date_time_new_now_local (); - if (!is_first) { - GDateTime *tmp = dt; - dt = g_date_time_add_days (dt, 1); - g_date_time_unref (tmp); - } + if (!is_first) { + GDateTime *tmp = dt; + dt = g_date_time_add_days (dt, 1); + g_date_time_unref (tmp); + } - midnight = g_date_time_add_full (dt, 0, 0, 0, - -g_date_time_get_hour(dt), - -g_date_time_get_minute (dt), - -g_date_time_get_second (dt)); - time_t t = MAX(0, (gint64)g_date_time_to_unix (midnight)); - g_date_time_unref (dt); - g_date_time_unref (midnight); - return date_to_time_t_string ((time_t)t); + midnight = g_date_time_add_full (dt, 0, 0, 0, + -g_date_time_get_hour(dt), + -g_date_time_get_minute (dt), + -g_date_time_get_second (dt)); + time_t t = MAX(0, (gint64)g_date_time_to_unix (midnight)); + g_date_time_unref (dt); + g_date_time_unref (midnight); + return date_to_time_t_string ((time_t)t); - } else - return date_boundary (is_first); + } else + return date_boundary (is_first); } // if a date has a month day greater than the number of days in that month, @@ -317,87 +321,87 @@ special_date (const std::string& d, bool is_first) static void fixup_month (struct tm *tbuf) { - decltype(tbuf->tm_mday) max_days; - const auto month = tbuf->tm_mon + 1; - const auto year = tbuf->tm_year + 1900; + decltype(tbuf->tm_mday) max_days; + const auto month = tbuf->tm_mon + 1; + const auto year = tbuf->tm_year + 1900; - switch (month) { - case 2: - if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) - max_days = 29; - else - max_days = 28; - break; - case 4: - case 6: - case 9: - case 11: - max_days = 30; - break; - default: - max_days = 31; - break; - } + switch (month) { + case 2: + if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) + max_days = 29; + else + max_days = 28; + break; + case 4: + case 6: + case 9: + case 11: + max_days = 30; + break; + default: + max_days = 31; + break; + } - if (tbuf->tm_mday > max_days) { - tbuf->tm_mday = max_days; - tbuf->tm_hour = 23; - tbuf->tm_min = 59; - tbuf->tm_sec = 59; - } + if (tbuf->tm_mday > max_days) { + tbuf->tm_mday = max_days; + tbuf->tm_hour = 23; + tbuf->tm_min = 59; + tbuf->tm_sec = 59; + } } std::string Mu::date_to_time_t_string (const std::string& dstr, bool is_first) { - gint64 t; - struct tm tbuf; - GDateTime *dtime; + gint64 t; + struct tm tbuf; + GDateTime *dtime; - /* one-sided dates */ - if (dstr.empty()) - return date_boundary (is_first); - else if (dstr == "today" || dstr == "now") - return special_date (dstr, is_first); + /* one-sided dates */ + if (dstr.empty()) + return date_boundary (is_first); + else if (dstr == "today" || dstr == "now") + return special_date (dstr, is_first); - else if (dstr.find_first_of("ymdwhMs") != std::string::npos) - return delta_ymwdhMs (dstr); + else if (dstr.find_first_of("ymdwhMs") != std::string::npos) + return delta_ymwdhMs (dstr); - constexpr char UserDateMin[] = "19700101000000"; - constexpr char UserDateMax[] = "29991231235959"; + constexpr char UserDateMin[] = "19700101000000"; + constexpr char UserDateMax[] = "29991231235959"; - std::string date (is_first ? UserDateMin : UserDateMax); - std::copy_if (dstr.begin(), dstr.end(), date.begin(),[](auto c){return isdigit(c);}); + std::string date (is_first ? UserDateMin : UserDateMax); + std::copy_if (dstr.begin(), dstr.end(), date.begin(),[](auto c){return isdigit(c);}); - memset (&tbuf, 0, sizeof tbuf); - if (!strptime (date.c_str(), "%Y%m%d%H%M%S", &tbuf) && - !strptime (date.c_str(), "%Y%m%d%H%M", &tbuf) && - !strptime (date.c_str(), "%Y%m%d", &tbuf) && - !strptime (date.c_str(), "%Y%m", &tbuf) && - !strptime (date.c_str(), "%Y", &tbuf)) - return date_boundary (is_first); + memset (&tbuf, 0, sizeof tbuf); + if (!strptime (date.c_str(), "%Y%m%d%H%M%S", &tbuf) && + !strptime (date.c_str(), "%Y%m%d%H%M", &tbuf) && + !strptime (date.c_str(), "%Y%m%d", &tbuf) && + !strptime (date.c_str(), "%Y%m", &tbuf) && + !strptime (date.c_str(), "%Y", &tbuf)) + return date_boundary (is_first); - fixup_month(&tbuf); + fixup_month(&tbuf); - dtime = g_date_time_new_local (tbuf.tm_year + 1900, - tbuf.tm_mon + 1, - tbuf.tm_mday, - tbuf.tm_hour, - tbuf.tm_min, - tbuf.tm_sec); - if (!dtime) { - g_warning ("invalid %s date '%s'", - is_first ? "lower" : "upper", date.c_str()); - return date_boundary (is_first); - } + dtime = g_date_time_new_local (tbuf.tm_year + 1900, + tbuf.tm_mon + 1, + tbuf.tm_mday, + tbuf.tm_hour, + tbuf.tm_min, + tbuf.tm_sec); + if (!dtime) { + g_warning ("invalid %s date '%s'", + is_first ? "lower" : "upper", date.c_str()); + return date_boundary (is_first); + } - t = g_date_time_to_unix (dtime); - g_date_time_unref (dtime); + t = g_date_time_to_unix (dtime); + g_date_time_unref (dtime); - if (t < 0 || t > 9999999999) - return date_boundary (is_first); - else - return date_to_time_t_string (t); + if (t < 0 || t > 9999999999) + return date_boundary (is_first); + else + return date_to_time_t_string (t); } constexpr const auto SizeFormat = "%010" G_GINT64_FORMAT; @@ -410,57 +414,57 @@ static_assert(sizeof(SizeMax) == 10 + 1, "invalid"); static std::string size_boundary (bool is_first) { - return is_first ? SizeMin : SizeMax; + return is_first ? SizeMin : SizeMax; } std::string Mu::size_to_string (int64_t size) { - char buf[sizeof(SizeMax)]; - g_snprintf (buf, sizeof(buf), SizeFormat, size); + char buf[sizeof(SizeMax)]; + g_snprintf (buf, sizeof(buf), SizeFormat, size); - return buf; + return buf; } std::string Mu::size_to_string (const std::string& val, bool is_first) { - std::string str; - GRegex *rx; - GMatchInfo *minfo; + std::string str; + GRegex *rx; + GMatchInfo *minfo; - /* one-sided ranges */ - if (val.empty()) - return size_boundary (is_first); + /* one-sided ranges */ + if (val.empty()) + return size_boundary (is_first); - rx = g_regex_new ("(\\d+)(b|k|kb|m|mb|g|gb)?", - G_REGEX_CASELESS, (GRegexMatchFlags)0, NULL); - minfo = NULL; - if (g_regex_match (rx, val.c_str(), (GRegexMatchFlags)0, &minfo)) { - gint64 size; - char *s; + rx = g_regex_new ("(\\d+)(b|k|kb|m|mb|g|gb)?", + G_REGEX_CASELESS, (GRegexMatchFlags)0, NULL); + minfo = NULL; + if (g_regex_match (rx, val.c_str(), (GRegexMatchFlags)0, &minfo)) { + gint64 size; + char *s; - s = g_match_info_fetch (minfo, 1); - size = atoll (s); - g_free (s); + s = g_match_info_fetch (minfo, 1); + size = atoll (s); + g_free (s); - s = g_match_info_fetch (minfo, 2); - switch (s ? g_ascii_tolower(s[0]) : 0) { - case 'k': size *= 1024; break; - case 'm': size *= (1024 * 1024); break; - case 'g': size *= (1024 * 1024 * 1024); break; - default: break; - } + s = g_match_info_fetch (minfo, 2); + switch (s ? g_ascii_tolower(s[0]) : 0) { + case 'k': size *= 1024; break; + case 'm': size *= (1024 * 1024); break; + case 'g': size *= (1024 * 1024 * 1024); break; + default: break; + } - g_free (s); - str = size_to_string (size); - } else - str = size_boundary (is_first); + g_free (s); + str = size_to_string (size); + } else + str = size_boundary (is_first); - g_regex_unref (rx); - g_match_info_unref (minfo); + g_regex_unref (rx); + g_match_info_unref (minfo); - return str; + return str; } diff --git a/lib/utils/mu-utils.hh b/lib/utils/mu-utils.hh index b83e352f..b4166f31 100644 --- a/lib/utils/mu-utils.hh +++ b/lib/utils/mu-utils.hh @@ -1,5 +1,5 @@ /* -** Copyright (C) 2020 Dirk-Jan C. Binnema +** Copyright (C) 2020-2021 Dirk-Jan C. Binnema ** ** This library is free software; you can redistribute it and/or ** modify it under the terms of the GNU Lesser General Public License @@ -43,8 +43,6 @@ using StringVec = std::vector; std::string utf8_flatten (const char *str); inline std::string utf8_flatten (const std::string& s) { return utf8_flatten(s.c_str()); } - - /** * Replace all control characters with spaces, and remove leading and trailing space. * @@ -55,6 +53,19 @@ inline std::string utf8_flatten (const std::string& s) { return utf8_flatten(s.c std::string utf8_clean (const std::string& dirty); +/** + * Remove ctrl characters, replacing them with ' '; subsequent + * ctrl characters are replaced by a single ' ' + * + * @param str a string + * + * @return the string without control characters + */ +std::string remove_ctrl (const std::string& str); + + + + /** * Split a string in parts * @@ -64,7 +75,7 @@ std::string utf8_clean (const std::string& dirty); * @return the parts. */ std::vector split (const std::string& str, - const std::string& sepa); + const std::string& sepa); /** * Quote & escape a string for " and \ @@ -241,69 +252,69 @@ private: */ #define MU_XAPIAN_CATCH_BLOCK \ - catch (const Xapian::Error &xerr) { \ - g_critical ("%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - } catch (const std::runtime_error& re) { \ - g_critical ("%s: error: %s", __func__, re.what()); \ - } catch (...) { \ - g_critical ("%s: caught exception", __func__); \ + catch (const Xapian::Error &xerr) { \ + g_critical ("%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + } catch (const std::runtime_error& re) { \ + g_critical ("%s: error: %s", __func__, re.what()); \ + } catch (...) { \ + g_critical ("%s: caught exception", __func__); \ } #define MU_XAPIAN_CATCH_BLOCK_G_ERROR(GE,E) \ - catch (const Xapian::DatabaseLockError &xerr) { \ - mu_util_g_set_error ((GE), \ - MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK, \ - "%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - } catch (const Xapian::DatabaseError &xerr) { \ - mu_util_g_set_error ((GE),MU_ERROR_XAPIAN, \ - "%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - } catch (const Xapian::Error &xerr) { \ - mu_util_g_set_error ((GE),(E), \ - "%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - } catch (const std::runtime_error& ex) { \ - mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ - "%s: error: %s", __func__, ex.what()); \ - \ - } catch (...) { \ - mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ - "%s: caught exception", __func__); \ - } + catch (const Xapian::DatabaseLockError &xerr) { \ + mu_util_g_set_error ((GE), \ + MU_ERROR_XAPIAN_CANNOT_GET_WRITELOCK, \ + "%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + } catch (const Xapian::DatabaseError &xerr) { \ + mu_util_g_set_error ((GE),MU_ERROR_XAPIAN, \ + "%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + } catch (const Xapian::Error &xerr) { \ + mu_util_g_set_error ((GE),(E), \ + "%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + } catch (const std::runtime_error& ex) { \ + mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ + "%s: error: %s", __func__, ex.what()); \ + \ + } catch (...) { \ + mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ + "%s: caught exception", __func__); \ + } #define MU_XAPIAN_CATCH_BLOCK_RETURN(R) \ - catch (const Xapian::Error &xerr) { \ - g_critical ("%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - return (R); \ - } catch (const std::runtime_error& ex) { \ - g_critical("%s: error: %s", __func__, ex.what()); \ - return (R); \ - } catch (...) { \ - g_critical ("%s: caught exception", __func__); \ - return (R); \ - } + catch (const Xapian::Error &xerr) { \ + g_critical ("%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + return (R); \ + } catch (const std::runtime_error& ex) { \ + g_critical("%s: error: %s", __func__, ex.what()); \ + return (R); \ + } catch (...) { \ + g_critical ("%s: caught exception", __func__); \ + return (R); \ + } #define MU_XAPIAN_CATCH_BLOCK_G_ERROR_RETURN(GE,E,R) \ - catch (const Xapian::Error &xerr) { \ - mu_util_g_set_error ((GE),(E), \ - "%s: xapian error '%s'", \ - __func__, xerr.get_msg().c_str()); \ - return (R); \ - } catch (const std::runtime_error& ex) { \ - mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ - "%s: error: %s", __func__, ex.what()); \ - return (R); \ - } catch (...) { \ - if ((GE)&&!(*(GE))) \ - mu_util_g_set_error ((GE), \ - (MU_ERROR_INTERNAL), \ - "%s: caught exception", __func__); \ - return (R); \ - } + catch (const Xapian::Error &xerr) { \ + mu_util_g_set_error ((GE),(E), \ + "%s: xapian error '%s'", \ + __func__, xerr.get_msg().c_str()); \ + return (R); \ + } catch (const std::runtime_error& ex) { \ + mu_util_g_set_error ((GE),(MU_ERROR_INTERNAL), \ + "%s: error: %s", __func__, ex.what()); \ + return (R); \ + } catch (...) { \ + if ((GE)&&!(*(GE))) \ + mu_util_g_set_error ((GE), \ + (MU_ERROR_INTERNAL), \ + "%s: caught exception", __func__); \ + return (R); \ + } diff --git a/lib/utils/test-utils.cc b/lib/utils/test-utils.cc index 020135f6..74c6000d 100644 --- a/lib/utils/test-utils.cc +++ b/lib/utils/test-utils.cc @@ -179,26 +179,26 @@ MU_ENABLE_BITOPS(Bits); static void test_define_bitmap() { - g_assert_cmpuint((guint)Bits::None,==,(guint)0); - g_assert_cmpuint((guint)Bits::Bit1,==,(guint)1); - g_assert_cmpuint((guint)Bits::Bit2,==,(guint)2); + g_assert_cmpuint((guint)Bits::None,==,(guint)0); + g_assert_cmpuint((guint)Bits::Bit1,==,(guint)1); + g_assert_cmpuint((guint)Bits::Bit2,==,(guint)2); - g_assert_cmpuint((guint)(Bits::Bit1|Bits::Bit2),==,(guint)3); - g_assert_cmpuint((guint)(Bits::Bit1&Bits::Bit2),==,(guint)0); + g_assert_cmpuint((guint)(Bits::Bit1|Bits::Bit2),==,(guint)3); + g_assert_cmpuint((guint)(Bits::Bit1&Bits::Bit2),==,(guint)0); - g_assert_cmpuint((guint)(Bits::Bit1&(~Bits::Bit2)),==,(guint)1); + g_assert_cmpuint((guint)(Bits::Bit1&(~Bits::Bit2)),==,(guint)1); - { - Bits b{Bits::Bit1}; - b|=Bits::Bit2; - g_assert_cmpuint((guint)b,==,(guint)3); - } + { + Bits b{Bits::Bit1}; + b|=Bits::Bit2; + g_assert_cmpuint((guint)b,==,(guint)3); + } - { - Bits b{Bits::Bit1}; - b&=Bits::Bit1; - g_assert_cmpuint((guint)b,==,(guint)1); - } + { + Bits b{Bits::Bit1}; + b&=Bits::Bit1; + g_assert_cmpuint((guint)b,==,(guint)1); + } } @@ -214,9 +214,10 @@ main (int argc, char *argv[]) g_test_add_func ("/utils/date-ymwdhMs", test_date_ymwdhMs); g_test_add_func ("/utils/size", test_size); g_test_add_func ("/utils/flatten", test_flatten); + g_test_add_func ("/utils/remove-ctrl", test_remove_ctrl); g_test_add_func ("/utils/clean", test_clean); g_test_add_func ("/utils/format", test_format); - g_test_add_func ("/utils/define-bitmap", test_define_bitmap); + g_test_add_func ("/utils/define-bitmap", test_define_bitmap); return g_test_run (); }