mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-28 03:40:11 +03:00
Added c_compare_file function and test - WIP.
This commit is contained in:
parent
8b229f6413
commit
3ce614039a
3 changed files with 101 additions and 0 deletions
|
@ -163,3 +163,80 @@ out:
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int c_compare_file( const char *f1, const char *f2 ) {
|
||||||
|
_TCHAR *wf1, *wf2;
|
||||||
|
int fd1 = -1, fd2 = -1;
|
||||||
|
size_t size1, size2, i;
|
||||||
|
char buffer1[BUFFER_SIZE];
|
||||||
|
char buffer2[BUFFER_SIZE];
|
||||||
|
csync_stat_t stat1;
|
||||||
|
csync_stat_t stat2;
|
||||||
|
|
||||||
|
register const char *s1;
|
||||||
|
register const char *s2;
|
||||||
|
int re = -1;
|
||||||
|
|
||||||
|
if( ! (f1 && f2) ) return -1;
|
||||||
|
|
||||||
|
wf1 = c_multibyte(f1);
|
||||||
|
wf2 = c_multibyte(f2);
|
||||||
|
|
||||||
|
/* compare size first. */
|
||||||
|
if( _tstat(wf1, &stat1) < 0 ) {
|
||||||
|
re = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if( _tstat(wf2, &stat2) < 0 ) {
|
||||||
|
re = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if sizes are different, the files can not be equal. */
|
||||||
|
if( stat1.st_size != stat2.st_size ) {
|
||||||
|
re = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
_fmode = _O_BINARY;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fd1 = _topen(wf1, O_RDONLY);
|
||||||
|
fd2 = _topen(wf2, O_RDONLY);
|
||||||
|
|
||||||
|
if( !(fd1 > -1 && fd2 > -1)) {
|
||||||
|
re = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
while( (size1 = read(fd1, buffer1, BUFFER_SIZE)) > 0 ) {
|
||||||
|
size2 = read( fd2, buffer2, BUFFER_SIZE );
|
||||||
|
|
||||||
|
if( size1 != size2 ) {
|
||||||
|
re = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
s1 = buffer1;
|
||||||
|
s2 = buffer2;
|
||||||
|
|
||||||
|
for( i = 0; i < size1; i++ ) {
|
||||||
|
if( *s1++ != *s2++ ) {
|
||||||
|
re = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
re = 1;
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
if( fd1 > -1) close(fd1);
|
||||||
|
if( fd2 > -1) close(fd2);
|
||||||
|
|
||||||
|
c_free_multibyte( wf1 );
|
||||||
|
c_free_multibyte( wf2 );
|
||||||
|
return re;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,8 @@ int c_isfile(const char *path);
|
||||||
*/
|
*/
|
||||||
int c_copy(const char *src, const char *dst, mode_t mode);
|
int c_copy(const char *src, const char *dst, mode_t mode);
|
||||||
|
|
||||||
|
int c_compare_file( const char *f1, const char *f2 );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* }@
|
* }@
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -85,12 +85,34 @@ static void check_c_copy_isdir(void **state)
|
||||||
assert_int_equal(errno, EISDIR);
|
assert_int_equal(errno, EISDIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_c_compare_file(void **state)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
(void) state;
|
||||||
|
|
||||||
|
rc = c_copy(check_src_file, check_dst_file, 0644);
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
rc = c_compare_file( check_src_file, check_dst_file );
|
||||||
|
assert_int_equal(rc, 1);
|
||||||
|
|
||||||
|
rc = system("echo \"hallo42\" > /tmp/check/foo.txt");
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
rc = system("echo \"hallo52\" > /tmp/check/bar.txt");
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
rc = c_compare_file( check_src_file, check_dst_file );
|
||||||
|
assert_int_equal(rc, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int torture_run_tests(void)
|
int torture_run_tests(void)
|
||||||
{
|
{
|
||||||
const UnitTest tests[] = {
|
const UnitTest tests[] = {
|
||||||
unit_test_setup_teardown(check_c_copy, setup, teardown),
|
unit_test_setup_teardown(check_c_copy, setup, teardown),
|
||||||
unit_test(check_c_copy_same_file),
|
unit_test(check_c_copy_same_file),
|
||||||
unit_test_setup_teardown(check_c_copy_isdir, setup, teardown),
|
unit_test_setup_teardown(check_c_copy_isdir, setup, teardown),
|
||||||
|
unit_test_setup_teardown(check_c_compare_file, setup, teardown),
|
||||||
};
|
};
|
||||||
|
|
||||||
return run_tests(tests);
|
return run_tests(tests);
|
||||||
|
|
Loading…
Reference in a new issue