From fec5cd6c5dbb665ca2cdcab3150090923d85be40 Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Tue, 4 Oct 2011 14:04:48 +0300 Subject: [PATCH] Added function vfs_path_cmp() Signed-off-by: Slava Zanko --- lib/vfs/path.c | 24 +++++++++ lib/vfs/path.h | 1 + tests/lib/vfs/Makefile.am | 4 ++ tests/lib/vfs/path_len.c | 109 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 tests/lib/vfs/path_len.c diff --git a/lib/vfs/path.c b/lib/vfs/path.c index a4ece68e3..e35402031 100644 --- a/lib/vfs/path.c +++ b/lib/vfs/path.c @@ -1414,3 +1414,27 @@ vfs_path_ncmp (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len) } /* --------------------------------------------------------------------------------------------- */ +/** + * Calculate path length in string representation + * + * @param vpath path object + * + * @return length of path + */ + +size_t +vfs_path_len (const vfs_path_t * vpath) +{ + char *path; + size_t ret_val; + + if (vpath == NULL) + return 0; + + path = vfs_path_to_str (vpath); + ret_val = strlen (path); + g_free (path); + return ret_val; +} + +/* --------------------------------------------------------------------------------------------- */ diff --git a/lib/vfs/path.h b/lib/vfs/path.h index 82629b819..d559a0a1a 100644 --- a/lib/vfs/path.h +++ b/lib/vfs/path.h @@ -76,6 +76,7 @@ char *vfs_path_serialize (const vfs_path_t * vpath, GError ** error); vfs_path_t *vfs_path_deserialize (const char *data, GError ** error); char *vfs_path_build_url_params_str (const vfs_path_element_t * element, gboolean keep_password); +size_t vfs_path_len (const vfs_path_t * vpath); int vfs_path_cmp (const vfs_path_t * vpath1, const vfs_path_t * vpath2); int vfs_path_ncmp (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len); diff --git a/tests/lib/vfs/Makefile.am b/tests/lib/vfs/Makefile.am index a4b59fc30..f7bfdb982 100644 --- a/tests/lib/vfs/Makefile.am +++ b/tests/lib/vfs/Makefile.am @@ -12,6 +12,7 @@ TESTS = \ canonicalize_pathname \ current_dir \ path_cmp \ + path_len \ path_manipulations \ path_recode \ path_serialize \ @@ -33,6 +34,9 @@ current_dir_SOURCES = \ path_cmp_SOURCES = \ path_cmp.c +path_len_SOURCES = \ + path_len.c + path_manipulations_SOURCES = \ path_manipulations.c diff --git a/tests/lib/vfs/path_len.c b/tests/lib/vfs/path_len.c new file mode 100644 index 000000000..c835b05f7 --- /dev/null +++ b/tests/lib/vfs/path_len.c @@ -0,0 +1,109 @@ +/* lib/vfs - vfs_path_t compare functions + + Copyright (C) 2011 Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2011 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program 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 Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#define TEST_SUITE_NAME "/lib/vfs" + +#include + +#include "lib/global.c" + +#ifndef HAVE_CHARSET +#define HAVE_CHARSET 1 +#endif + +#include "lib/charsets.h" + +#include "lib/strutil.h" +#include "lib/vfs/xdirentry.h" +#include "lib/vfs/path.h" + +#include "src/vfs/local/local.c" + + +static void +setup (void) +{ + str_init_strings (NULL); + + vfs_init (); + init_localfs (); + vfs_setup_work_dir (); + + mc_global.sysconfig_dir = (char *) TEST_SHARE_DIR; + load_codepages_list (); +} + +static void +teardown (void) +{ + vfs_shut (); + str_uninit_strings (); +} + +/* --------------------------------------------------------------------------------------------- */ +#define path_len_one_check(input,etalon) {\ + vpath = vfs_path_from_str (input);\ + result = vfs_path_len (vpath);\ + vfs_path_free (vpath); \ + fail_unless ( result == etalon, "\ninput: %s\nexpected: %d\nactual: %d\n",\ + input, etalon, result); \ +} + +START_TEST (test_path_length) +{ + vfs_path_t *vpath; + size_t result; + + path_len_one_check ("/тестовый/путь", 26); + + path_len_one_check ("/#enc:KOI8-R/тестовый/путь", 38); + path_len_one_check (NULL, 0); +} +END_TEST + +/* --------------------------------------------------------------------------------------------- */ + +int +main (void) +{ + int number_failed; + + Suite *s = suite_create (TEST_SUITE_NAME); + TCase *tc_core = tcase_create ("Core"); + SRunner *sr; + + tcase_add_checked_fixture (tc_core, setup, teardown); + + /* Add new tests here: *************** */ + tcase_add_test (tc_core, test_path_length); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "path_len.log"); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */