Skip to content

Avoid 'conversion may change value' cases related to iso files

Toni Asensi Esteve requested to merge work/conversion_iso into master

Avoid some 'conversion from long long int to int may change value' and 'conversion from [...] long int to int may change value' warnings in iso.cpp, kisofile.cpp and kisodirectory.cpp. Those conversions to int are confirmed because some non-Krusader functions that are used (like resize(int) or fromTime_t(uint)) do not accept data types that are bigger than int.

Avoid several 'conversion from [...] long int [...] to int' warnings in some files by means of using a ssize_t, time_t or qint64 variables instead of an int one.

Avoid a 'conversion from int to short unsigned int may change value' warning in bswap.h by means of using an (unsigned short) instead of a static_cast<unsigned short> because, when trying to use a static_cast<unsigned short>, the error 'static_cast undeclared (first use in this function)' was seen, as it happens when trying to use static_cast with C (not C++) source code.

Avoid a 'conversion from int to short unsigned int may change value' warning in kiso.cpp, confirming a conversion to __u8 because a non-Krusader structure does not accept data types that are bigger than short unsigned int.

The warnings are:

    /home/user/krusader/iso/kisofile.cpp:38:43: warning: conversion from ‘qint64’ {aka ‘long long int’} to ‘int’ may change value [-Wconversion]
    38 |         r.resize(((pos + count) < size()) ? count : size() - pos);
       |                  ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    
    /home/user/krusader/iso/kisofile.cpp:40:45: warning: conversion from ‘qint64’ {aka ‘long long int’} to ‘int’ may change value [-Wconversion]
    40 |             rlen = archive()->device()->read(r.data(), r.size());
       |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
    
    /home/user/krusader/iso/libisofs/bswap.h:64:42: warning: conversion from ‘int’ to ‘short unsigned int’ may change value [-Wconversion]
    64 | #define bswap_16(x) (((x) & 0x00ff) << 8 | ((x) & 0xff00) >> 8)
       |                     ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    
    /home/user/krusader/iso/libisofs/bswap.h:97:21: note: in expansion of macro ‘bswap_16’
    97 | #define be2me_16(x) bswap_16(x)
       |                     ^~~~~~~~
    
    /home/user/krusader/iso/libisofs/iso_fs.h:214:12: note: in expansion of macro ‘be2me_16’
    214 |     return be2me_16(*(unsigned short *)p);
        |            ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:69:39: warning: conversion from ‘int’ to ‘__u8’ {aka ‘unsigned char’} may change value [-Wconversion]
    69 |                 tocentry.cdte_track = i;
       |                                       ^
    
    /home/user/krusader/iso/kiso.cpp:248:23: warning: conversion from ‘time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    248 |             time = rr.t_mtime;
        |                    ~~~^~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:249:24: warning: conversion from ‘time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    249 |             adate = rr.t_atime;
        |                     ~~~^~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:250:24: warning: conversion from ‘time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    250 |             cdate = rr.t_ctime;
        |                     ~~~^~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:258:47: warning: conversion from ‘time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    258 |             adate = cdate = time = isodate_915(idr->date, 0);
        |                                    ~~~~~~~~~~~^~~~~~~~~~~~~~
                
    /home/user/krusader/iso/kiso.cpp:392:34: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    392 |                              buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                  ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:392:48: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    392 |                              buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:392:62: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    392 |                              buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                              ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:406:42: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    406 |                                      buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                          ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:406:56: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    406 |                                      buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                        ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:406:70: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    406 |                                      buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                                      ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:426:52: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    426 |                                                buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                    ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:426:66: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    426 |                                                buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                                  ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:426:80: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    426 |                                                buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                                                ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:446:48: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    446 |                                            buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:446:62: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    446 |                                            buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                              ^~~~~~~~
    
    /home/user/krusader/iso/kiso.cpp:446:76: warning: conversion from ‘__time_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    446 |                                            buf.st_mtime, buf.st_atime, buf.st_ctime, uid, gid, QString());
        |                                                                            ^~~~~~~~
    
    /home/user/krusader/iso/libisofs/bswap.h:64:42: warning: conversion from ‘int’ to ‘short unsigned int’ may change value [-Wconversion]
    64 | #define bswap_16(x) (((x) & 0x00ff) << 8 | ((x) & 0xff00) >> 8)
       |                     ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    
    /home/user/krusader/iso/libisofs/bswap.h:97:21: note: in expansion of macro ‘bswap_16’
    97 | #define be2me_16(x) bswap_16(x)
       |                     ^~~~~~~~
    
    /home/user/krusader/iso/libisofs/iso_fs.h:214:12: note: in expansion of macro ‘be2me_16’
    214 |     return be2me_16(*(unsigned short *)p);
        |            ^~~~~~~~
    
    /home/user/krusader/iso/iso.cpp:136:41: warning: conversion from ‘ssize_t’ {aka ‘long int’} to ‘int’ may change value [-Wconversion]
    136 |                 int endOfName = readlink(QFile::encodeName(tryPath), symDest, 256);
        |                                 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    /home/user/krusader/iso/iso.cpp:375:73: warning: conversion from ‘size_t’ {aka ‘long unsigned int’} to ‘int’ may change value [-Wconversion]
    375 |             pointer_block = isoFileEntry->dataAt(hdr->header_size << 2, ptrblock_bytes);
        |                                                                         ^~~~~~~~~~~~~~
    
    /home/user/krusader/iso/iso.cpp:377:30: warning: conversion from ‘long unsigned int’ to ‘int’ may change value [-Wconversion]
    377 |                 inbuf.resize(block_size2);
        |                              ^~~~~~~~~~~
    
    /home/user/krusader/iso/iso.cpp:379:35: warning: conversion from ‘long unsigned int’ to ‘int’ may change value [-Wconversion]
    379 |                     outbuf.resize(block_size);
        |                                   ^~~~~~~~~~
    
    /home/user/krusader/iso/iso.cpp:416:54: warning: conversion from ‘long unsigned int’ to ‘int’ may change value [-Wconversion]
    416 |                 inbuf = isoFileEntry->dataAt(cstart, csize);
        |                                                      ^~~~~
    
    /home/user/krusader/iso/iso.cpp:436:29: warning: conversion from ‘uLong’ {aka ‘long unsigned int’} to ‘int’ may change value [-Wconversion]
    436 |             fileData.resize(bytes);
        |                             ^~~~~

TEST PLAN
Krusader should work correctly after applying the proposed changes. If anyone wants to perform some tests: open several iso files, enter its folders, use F3 to see the content of some files, check that the data of files and folders are the correct ones, and that other information is seen correctly.

Merge request reports