-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.
com!news.xlned.com!peer02.fr7!futter-mich.highwinds-media.com!news.highwinds-me
dia.com!fx16.fr7.POSTED!not-for-mail
Newsgroups: pl.comp.programming
X-Mozilla-News-Host: snews://newshosting.com:563
From: Szyk Cech <s...@s...pl>
Subject: Dziwny wyciek zasobów
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
Thunderbird/60.5.1
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: pl-PL
Content-Transfer-Encoding: 8bit
Lines: 116
Message-ID: <QUOgE.6781$WX2.6137@fx16.fr7>
X-Complaints-To: abuse(at)newshosting.com
NNTP-Posting-Date: Sat, 09 Mar 2019 13:08:00 UTC
Organization: Newshosting.com - Highest quality at a great price! www.newshosting.com
Date: Sat, 9 Mar 2019 14:08:00 +0100
X-Received-Bytes: 4933
X-Received-Body-CRC: 1837831376
Xref: news-archive.icm.edu.pl pl.comp.programming:213388
[ ukryj nagłówki ]Witam
[WSTĘP]
Mam program w C++ oparty na bibliotece Qt. Generalnie program jest
niezależny od systemu operacyjnego. Jednak z jakichś dziwnych względów
biblioteka Qt nie ma możliwości operowania na datach plików i katalogów.
Dlatego napisałem funkcję w oparciu o Api Linux-a realizującą kopiowanie
dat plików. Jest to przydatne podczas kopiowania.
[PROBLEM]
Mam jakiś wyciek zasobów. W pewnym momencie operacja fopen się nie udaje
(po całkiem sporej liczbie poprawnych operacji). Wg mnie wszystko
powinno grać, ale błąd występuje.
[KOD]
Oto kod mojej funkcji:
void gCopyFileAtributes(QString aSource, QString aDest)
{
if(!QFileInfo::exists(aSource))
NOTIFY_EXCEPTION(QObject::tr("Source file does not exists:
%1").arg(aSource), gLibraryId, eErrorCode::eFileSystemError);
if(!QFileInfo::exists(aDest))
NOTIFY_EXCEPTION(QObject::tr("Destination file does not exists:
%1").arg(aDest), gLibraryId, eErrorCode::eFileSystemError);
FILE* lSrc = fopen(aSource.toUtf8(), "r");
if(!lSrc)
NOTIFY_EXCEPTION(QObject::tr("fopen failed for file: %1:
%2").arg(aSource).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
FILE* lDest = fopen(aDest.toUtf8(), "w");
if(!lDest)
{
fclose(lSrc);
NOTIFY_EXCEPTION(QObject::tr("fopen failed for file: %1:
%2").arg(aDest).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
}
struct stat lStat;
if(fstat(fileno(lSrc),&lStat))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fstat failed for file: %1:
%2").arg(aSource).arg(strerror(errno)), gLibraryId,
eErrorCode::eFileSystemError);
}
// Update to the same uid/gid
if(fchown(fileno(lDest), lStat.st_uid,lStat.st_gid))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fchown failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
// Update the permissions
if(fchmod(fileno(lDest), lStat.st_mode))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("fchmod failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
// Change access time
timeval lTimes[2];
lTimes[0].tv_sec = lStat.st_atim.tv_sec;
quint32 lUsecA(static_cast<quint32>(lStat.st_atim.tv_nsec / 1000));
lTimes[0].tv_usec = lUsecA;
// Change modification time
lTimes[1].tv_sec = lStat.st_mtim.tv_sec;
quint32 lUsecM(static_cast<quint32>(lStat.st_mtim.tv_nsec / 1000));
lTimes[1].tv_usec = lUsecM;
if(futimes(fileno(lDest), lTimes))
{
fclose(lSrc);
fclose(lDest);
NOTIFY_EXCEPTION(QObject::tr("futimes failed:
%1").arg(strerror(errno)), gLibraryId, eErrorCode::eFileSystemError);
}
fclose(lSrc);
fclose(lDest);
}
[OPIS FUNCKCJI]
Jak widać wszystko tworzone jest na stosie z wyjątkiem 2 zmiennych lSrc
i lDest. Jednak one są zawsze zwalniane i po za tym wyjątki nie są
zgłaszane w trakcie wcześniejszej pracy.
[OPIS ZGŁASZANEGO BŁĘDU]
File: ../../../../Kopia3/Src/Libs/Common/Src/FileTools.Lin
ux.cpp, in
line: 26, in function: gCopyFileAtributes
Error code: 3, Error message: fopen failed for file:
/tmp/Kopia/!-dokumenty 2019-03-09 13-17-03/Programowanie/Qt/C++ GUI
Programming with Qt 4/qt-book/chap06/mdieditor/images/new.png: Brak dostępu
Exception occurs! Sender: Common.so, Error code: 3
Message:
File: ../../../../Kopia3/Src/Libs/Common/Src/FileTools.Lin
ux.cpp, in
line: 26, in function: gCopyFileAtributes
Error code: 3, Error message: fopen failed for file:
/tmp/Kopia/!-dokumenty 2019-03-09 13-17-03/Programowanie/Qt/C++ GUI
Programming with Qt 4/qt-book/chap06/mdieditor/images/new.png: Brak dostępu
Bug report has been sent...
Może ktoś doradzi jak prawidłowo powinna wyglądać ta funkcja?
dzięki i pozdro
Szyk Cech
Następne wpisy z tego wątku
- 09.03.19 14:09 Szyk Cech
- 10.03.19 21:38 Wojciech Muła
- 23.03.19 14:37 Szyk Cech
- 23.03.19 21:30 Wojciech Muła
- 23.03.19 21:49 Borneq
- 24.03.19 11:55 Szyk Cech
- 25.03.19 23:13 Wojciech Muła
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-06 Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- 2025-01-06 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-06 Do IO i innych elektrooszolomow, tu macie prawdziwe smrody
- 2025-01-06 Białystok => Full Stack .Net Engineer <=
- 2025-01-06 Kraków => Business Development Manager - Network and Network Security
- 2025-01-06 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-06 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-06 Lublin => Programista Delphi <=
- 2025-01-06 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-01-06 śnieg
- 2025-01-05 Żarówka do lampy z czujnikiem ruchu
- 2025-01-05 Rozkręcają się
- 2025-01-04 pozew za naprawę sprzętu na youtube
- 2025-01-04 gasik
- 2025-01-04 13. Raport Totaliztyczny: Powszechna Deklaracja Praw Człowieka Nie Chroni Przed Wyzyskiem Ani Przed Eksploatacją