D8254: Make file ioslave backend on removeables are user-frendly on linux

David Faure noreply at phabricator.kde.org
Sat Dec 2 16:05:40 UTC 2017


dfaure requested changes to this revision.
dfaure added a comment.
This revision now requires changes to proceed.


  I suppose `put()` should do the same, then?

INLINE COMMENTS

> file_unix.cpp:72
> + */
> +static QString blockDeviceByPath(const QString &filename)
> +{

Doesn't KMountPoint::currentMountPoints + findByPath already do this?

> file_unix.cpp:107
> + */
> +// TODO move it to KMountPoint?
> +static int statsDeviceByFile(const QString &filename, int &max_hw_single_transfer_chunk, bool &is_removeable)

Probably not, I don't see another user than kio_file for such detailed information.

> file_unix.cpp:226
> +    
> +    // set default is non removable and chunk size 512k
> +    int block_size = 1024 * 1024 * 1;

... and then the code says 1024*1024 ;)

A comment shouldn't say "what" (the code does that), but "why".
If there's no need to document "why", remove the comment.

> file_unix.cpp:229
> +    bool is_removeable = false;
> +    statsDeviceByFile(dest, block_size, is_removeable);
> +

make that &block_size and &is_removeable so that when reading this line it's clear that those are in+out vars.

> file_unix.cpp:232
> +    // minimum block size 1M
> +    if( block_size < (1024 * 1024 * 1) )
> +        block_size = (1024 * 1024 * 1);

use std::clamp, this way you won't even have to repeat the min and max values.

> file_unix.cpp:241
>      QFile dest_file(dest);
> -    if (!dest_file.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
> +    int dest_fd = ::open(dest.toStdString().c_str(), O_CREAT | O_TRUNC | (is_removeable? O_SYNC : 0) | O_WRONLY);
> +    if (!dest_file.open(dest_fd, QIODevice::Truncate | QIODevice::WriteOnly, QFile::AutoCloseHandle)) {

The conversion via std::string is incorrect, encoding wise.

The way to pass a QString (for a filename) to a system call is QFile::encodeName().

> file_unix.cpp:289
>  #endif
> -            n = ::read(src_file.handle(), buffer, MAX_IPC_SIZE);
> +            n = ::read(src_file.handle(), (void *)&(*buffer), block_size);
>  

C casts make me puke ;)
The C++ way would be reinterpret_cast, but I don't think you even need that. It compiled with a char* before, so just use `buffer.data()`

> file_unix.cpp:324
>  #endif
> -            if (dest_file.write(buffer, n) != n) {
> +            if (dest_file.write(&(*buffer), n) != n) {
>                  if (dest_file.error() == QFileDevice::ResourceError) {  // disk full

.data() is more readable

REPOSITORY
  R241 KIO

REVISION DETAIL
  https://phabricator.kde.org/D8254

To: vova7890, #frameworks, dfaure
Cc: dfaure, ngraham, alexeymin, #frameworks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20171202/b95d8df6/attachment-0001.html>


More information about the Kde-frameworks-devel mailing list