"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "fsremap/src/main.cc" between
fstransform-0.9.3-src.tar.gz and fstransform-0.9.4.tar.gz

About: fstransform is a tool to change a file-system from one format to another, for example from jfs, xfs, or reiser to ext2, ext3, or ext4, in-place and without the need for backup.

main.cc  (fstransform-0.9.3-src):main.cc  (fstransform-0.9.4)
skipping to change at line 28 skipping to change at line 28
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* main.cc * main.cc
* *
* Created on: Mar 1, 2011 * Created on: Mar 1, 2011
* Author: max * Author: max
*/ */
#include "first.hh" #include "first.hh"
#undef FR_TEST_MAP #undef FR_TEST_MAP
#undef FR_TEST_MAP_MERGE
#undef FR_TEST_VECTOR_COMPOSE
#undef FR_TEST_RANDOM #undef FR_TEST_RANDOM
#undef FR_TEST_IOCTL_FIEMAP
#undef FR_TEST_WRITE_ZEROES #undef FR_TEST_WRITE_ZEROES
#undef FR_TEST_PRETTY_TIME #undef FR_TEST_PRETTY_TIME
#if defined(FR_TEST_MAP) #if defined(FR_TEST_MAP)
# include "map.hh" # include "map.hh"
# include "work.hh" # include "work.hh"
#define FR_MAIN(argc, argv) FT_NS test_map<ft_uint>()
FT_NAMESPACE_BEGIN FT_NAMESPACE_BEGIN
#define FR_MAIN(argc, argv) FT_NS test_map<ft_uint>()
template<typename T> template<typename T>
static int test_map() { static int test_map() {
fr_map<T> map; fr_map<T> map;
map.insert(3, 3, 1, FC_DEFAULT_USER_DATA); map.insert(3, 3, 1, FC_DEFAULT_USER_DATA);
map.insert(0, 0, 3, FC_DEFAULT_USER_DATA); map.insert(0, 0, 3, FC_DEFAULT_USER_DATA);
fr_work<T>::show("test map", "", 1, map, FC_INFO); fr_work<T>::show("test map", "", 1, map, FC_INFO);
return 0; return 0;
} }
FT_NAMESPACE_END FT_NAMESPACE_END
#elif defined(FR_TEST_MAP_MERGE)
#include "log.hh"
#include "map.hh"
#include "vector.hh"
FT_NAMESPACE_BEGIN
template<typename T>
static void test_show(const char * label1, const char * label2, const fr_vector<
T> v) {
v.show(label1, label2, 1, FC_INFO);
}
#define FR_MAIN(argc, argv) FT_NS test_map_merge<ft_uoff>()
template<typename T>
static int test_map_merge() {
fr_vector<T> v1, v2;
v1.append(39174144, 4589568, 31744, FC_DEFAULT_USER_DATA);
v2.append(70565888, 4476928, 114688, FC_DEFAULT_USER_DATA);
test_show("v1", "", v1);
test_show("v2", "", v2);
// use fr_map<T>::merge_shift() to merge.
// unluckily it merges based on ->physical, so we must transpose the vectors
v1.transpose();
v2.transpose();
fr_map<ft_uoff> map;
enum { NO_SHIFT = 0 };
map.append0_shift(v1, NO_SHIFT);
map.merge_shift(v2, NO_SHIFT, FC_PHYSICAL1);
v1.assign(map.begin(), map.end());
v1.transpose();
test_show("v1", " after merge", v1);
return 0;
}
FT_NAMESPACE_END
#elif defined(FR_TEST_VECTOR_COMPOSE)
#include "log.hh"
#include "vector.hh"
FT_NAMESPACE_BEGIN
template<typename T>
static void test_show(const char * label, const fr_vector<T> v) {
v.show(label, "", 1, FC_INFO);
}
#define FR_MAIN(argc, argv) FT_NS test_vector_compose<ft_uoff>()
template<typename T>
static int test_vector_compose() {
fr_vector<T> v1, v2, result, unmapped;
T bitmask = 0;
v1.append( 0, 10,100, FC_DEFAULT_USER_DATA);
v2.append( 4, 0, 30, FC_DEFAULT_USER_DATA);
v2.append(54, 30, 50, FC_DEFAULT_USER_DATA);
v2.append(94, 80, 40, FC_DEFAULT_USER_DATA);
int err = result.compose(v1, v2, bitmask, unmapped);
if (err == 0) {
ff_log(FC_INFO, 0, "block_size_bitmask = 0x%" FT_XLL, (ft_ull) bitmask);
test_show("result", result);
test_show("unmapped", unmapped);
}
return err ? 1 : 0;
}
FT_NAMESPACE_END
#elif defined(FR_TEST_RANDOM) #elif defined(FR_TEST_RANDOM)
# include "assert.hh" # include "assert.hh"
# include "log.hh" # include "log.hh"
# include "misc.hh" # include "misc.hh"
#define FR_MAIN(argc, argv) FT_NS test_random(argc, argv)
FT_NAMESPACE_BEGIN FT_NAMESPACE_BEGIN
#define FR_MAIN(argc, argv) FT_NS test_random(argc, argv)
static int test_random(int argc, char ** argv) { static int test_random(int argc, char ** argv) {
ft_ull i, n = 1000, max = 7; ft_ull i, n = 1000, max = 7;
if (argc > 1) if (argc > 1)
ff_str2ull(argv[1], & max); ff_str2ull(argv[1], & max);
if (argc > 2) if (argc > 2)
ff_str2ull(argv[2], & n); ff_str2ull(argv[2], & n);
if (max > 0x10000) { if (max > 0x10000) {
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
ff_log(FC_INFO, 0, "ff_random(%20"FT_ULL") = %20"FT_ULL, max, ff_rand om(max)); ff_log(FC_INFO, 0, "ff_random(%20" FT_ULL ") = %20" FT_ULL , max, f f_random(max));
} else { } else {
ft_ull r; ft_ull r;
ft_size * hist = new ft_size[max + 1]; ft_size * hist = new ft_size[max + 1];
for (i = 0; i <= max; i++) for (i = 0; i <= max; i++)
hist[i] = 0; hist[i] = 0;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
r = ff_random(max); r = ff_random(max);
ff_assert(r <= max); ff_assert(r <= max);
++hist[r]; ++hist[r];
} }
for (i = 0; i <= max; i++) for (i = 0; i <= max; i++)
ff_log(FC_INFO, 0, "histogram[%"FT_ULL"] = %"FT_ULL, i, (ft_ull)hist[ i]); ff_log(FC_INFO, 0, "histogram[%" FT_ULL "] = %" FT_ULL , i, (ft_ull )hist[i]);
delete[] hist; delete[] hist;
} }
return 0; return 0;
} }
FT_NAMESPACE_END FT_NAMESPACE_END
#elif defined(FR_TEST_IOCTL_FIEMAP)
# include "log.hh"
# include "vector.hh"
# include "io/extent_posix.hh"
# include "io/util_posix.hh"
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
FT_NAMESPACE_BEGIN
using FT_IO_NS ff_posix_size;
using FT_IO_NS ff_read_extents_posix;
#define FR_MAIN(argc, argv) FT_NS test_ioctl_fiemap(argc, argv)
static int test_ioctl_fiemap(int argc, char ** argv)
{
ft_log::get_root_logger().set_level(FC_DEBUG);
ft_log_appender::redefine(stdout, FC_FMT_DATETIME_LEVEL_CALLER_MSG, FC_DEBUG
, FC_NOTICE);
ft_log_appender::redefine(stderr, FC_FMT_DATETIME_LEVEL_CALLER_MSG, FC_WARN)
;
fr_vector<ft_uoff> extents;
ft_uoff dev_size = 0x7FFFFFFFul, block_size_bitmask;
const char * path;
int fd, err = 0;
while ((path = * ++argv) != NULL) {
if ((fd = ::open(path, O_RDONLY)) < 0) {
err = ff_log(FC_ERROR, errno, "error opening file '%s'", path);
break;
}
extents.clear();
block_size_bitmask = 0;
if ((err = ff_read_extents_posix(fd, dev_size, extents, block_size_bitma
sk)) != 0)
break;
ft_size n = extents.size();
ff_log(FC_INFO, 0, "# %4" FT_ULL " extent%s in %s", (ft_ull) n, (n == 1
? " " : "s"), path);
ff_log(FC_INFO, 0, "# extent physical logical le
ngth user_data");
for (ft_size i = 0; i < n; i++) {
fr_extent<ft_uoff> & e = extents[i];
ff_log(FC_INFO, 0, "#%8" FT_ULL "\t%12" FT_ULL "\t%12" FT_ULL "\t
%8" FT_ULL "\t(%" FT_ULL ")", (ft_ull)i,
(ft_ull) e.physical(), (ft_ull) e.logical(), (ft_ull) e.lengt
h(), (ft_ull) e.user_data());
}
}
return err;
}
FT_NAMESPACE_END
#elif defined(FR_TEST_WRITE_ZEROES) #elif defined(FR_TEST_WRITE_ZEROES)
FT_IO_NAMESPACE_BEGIN FT_IO_NAMESPACE_BEGIN
int ff_zero_loop_file_holes(int argc, char ** argv); int ff_zero_loop_file_holes(int argc, char ** argv);
FT_IO_NAMESPACE_END FT_IO_NAMESPACE_END
# define FR_MAIN(argc, argv) FT_IO_NS ff_zero_loop_file_holes(argc, argv) # define FR_MAIN(argc, argv) FT_IO_NS ff_zero_loop_file_holes(argc, argv)
#elif defined(FR_TEST_PRETTY_TIME) #elif defined(FR_TEST_PRETTY_TIME)
#include "misc.hh" #include "misc.hh"
#include "log.hh" #include "log.hh"
FT_NAMESPACE_BEGIN FT_NAMESPACE_BEGIN
int ff_test_pretty_time(int argc, char ** argv) { int ff_test_pretty_time(int argc, char ** argv) {
ft_log_level log_level = FT_NS FC_INFO; ft_log_level log_level = FT_NS FC_INFO;
double time, percentage = 0.0, pretty_len = 0; double time, percentage = 0.0, pretty_len = 0;
const char * simul_msg = "", * pretty_label = ""; const char * simul_msg = "", * pretty_label = "";
for (time = 0.4; time < 800000000.0; time *= 1.1) { for (time = 0.4; time < 800000000.0; time *= 1.1) {
ft_ull time_left1 = 0, time_left2 = 0; ft_ull time_left1 = 0, time_left2 = 0;
const char * time_left_label1 = NULL, * time_left_label2 = NULL; const char * time_left_label1 = NULL, * time_left_label2 = NULL;
ff_pretty_time2(time, & time_left1, & time_left_label1, & time_left2, & t ff_pretty_time2(time, & time_left1, & time_left_label1, & time_left2, &
ime_left_label2); time_left_label2);
/* we write something like "1 hour and 20 minutes" instead of just "1 hou /* we write something like "1 hour and 20 minutes" instead of just "1 ho
r" or "1.3 hours" */ ur" or "1.3 hours" */
if (time_left_label2 != NULL) { if (time_left_label2 != NULL) {
ff_log(log_level, 0, "%sprogress: %4.1f%% done, %.2f %sbytes stil ff_log(log_level, 0, "%sprogress: %4.1f%% done, %.2f %sbytes still t
l to relocate, estimated %"FT_ULL" %s%s and %"FT_ULL" %s%s left", o relocate, estimated %" FT_ULL " %s%s and %" FT_ULL " %s%s left",
simul_msg, percentage, pretty_len, pretty_label, simul_msg, percentage, pretty_len, pretty_label,
time_left1, time_left_label1, (time_left1 != 1 ? time_left1, time_left_label1, (time_left1 != 1 ? "s": ""),
"s": ""), time_left2, time_left_label2, (time_left2 != 1 ? "s": ""));
time_left2, time_left_label2, (time_left2 != 1 ? } else {
"s": "")); ff_log(log_level, 0, "%sprogress: %4.1f%% done, %.2f %sbytes still t
} else { o relocate, estimated %" FT_ULL " %s%s left",
ff_log(log_level, 0, "%sprogress: %4.1f%% done, %.2f %sbytes stil simul_msg, percentage, pretty_len, pretty_label,
l to relocate, estimated %"FT_ULL" %s%s left", time_left1, time_left_label1, (time_left1 != 1 ? "s": ""));
simul_msg, percentage, pretty_len, pretty_label, }
time_left1, time_left_label1, (time_left1 != 1 ? }
"s": "")); return 0;
}
}
return 0;
} }
FT_NAMESPACE_END FT_NAMESPACE_END
# define FR_MAIN(argc, argv) FT_NS ff_test_pretty_time(argc, argv) # define FR_MAIN(argc, argv) FT_NS ff_test_pretty_time(argc, argv)
#else /* actual fstranform program */ #else /* actual fstranform program */
# include "remap.hh" // for fr_remap # include "remap.hh" // for fr_remap
# define FR_MAIN(argc, argv) FT_NS fr_remap::main(argc, argv) # define FR_MAIN(argc, argv) FT_NS fr_remap::main(argc, argv)
#endif /* defined(FT_TEST_*) */ #endif /* defined(FT_TEST_*) */
int main(int argc, char ** argv) { int main(int argc, char ** argv) {
return FR_MAIN(argc, argv); return FR_MAIN(argc, argv);
} }
 End of changes. 12 change blocks. 
35 lines changed or deleted 180 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)