static csync_vio_method_handle_t *owncloud_creat(const char *durl, mode_t mode) { csync_vio_method_handle_t *handle = owncloud_open(durl, O_CREAT|O_WRONLY|O_TRUNC, mode); /* on create, the file needs to be created empty */ owncloud_write( handle, NULL, 0 ); return handle; }
static size_t upload_a_file( void **state, const char *src_name, const char *durl ) { char buffer[BUFSIZE+1]; int size; char path[256]; char src_path[256]; int fh; csync_vio_method_handle_t *handle; size_t written; size_t overall_size = 0; csync_stat_t sb; /* Create the target path */ strcpy( path, _credentials.oc_server ); strcat( path, "/"); strcat( path, (const char*) *state ); strcat( path, "/"); strcat( path, durl ); handle = owncloud_creat( path, 0644 ); assert_int_not_equal( handle, NULL ); strcpy(src_path, TESTFILES_DIR); strcat(src_path, src_name); fh = open(src_path, O_RDONLY); assert_int_not_equal( fh, -1 ); while( (size = read(fh, buffer, BUFSIZE) )>0 ) { buffer[size] = '\0'; written = owncloud_write( handle, buffer, size ); assert_int_equal( size, written ); overall_size += written; } assert_int_equal( owncloud_close(handle), 0); /* stat the local file */ stat_local_file( &sb, src_path ); assert_int_equal( overall_size, sb.st_size ); close(fh); return overall_size; }