Fix KF6 framework recipes for Redox build compatibility

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-18 17:58:52 +01:00
parent 7904dc9b3d
commit 5451f25a7a
23 changed files with 177 additions and 116 deletions
@@ -15,6 +15,27 @@
#include <QFile>
#include <QSharedMemory>
#ifdef __redox__
static bool sharedMemoryLock(QSharedMemory &)
{
return true;
}
static void sharedMemoryUnlock(QSharedMemory &)
{
}
#else
static bool sharedMemoryLock(QSharedMemory &memory)
{
return memory.lock();
}
static void sharedMemoryUnlock(QSharedMemory &memory)
{
memory.unlock();
}
#endif
class KMemFile::Private
{
public:
@@ -82,7 +103,7 @@ bool KMemFile::Private::loadContentsFromFile()
parent->setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(filename));
return false;
}
shmData.lock();
sharedMemoryLock(shmData);
qint64 size = 0;
qint64 bytesRead;
char *data = static_cast<char *>(shmData.data());
@@ -93,15 +114,15 @@ bool KMemFile::Private::loadContentsFromFile()
return false;
}
shmDataSize = size;
shmData.unlock();
sharedMemoryUnlock(shmData);
return true;
}
void KMemFile::Private::close()
{
shmData.unlock();
sharedMemoryUnlock(shmData);
shmData.detach();
shmInfo.unlock();
sharedMemoryUnlock(shmInfo);
shmInfo.detach();
readWritePos = 0;
shmDataSize = 0;
@@ -151,44 +172,44 @@ bool KMemFile::open(OpenMode mode)
}
QSharedMemory lock(QDir(d->filename).canonicalPath());
lock.lock();
sharedMemoryLock(lock);
Private::sharedInfoData *infoPtr;
d->shmInfo.setKey(d->getShmKey());
// see if it's already in memory
if (!d->shmInfo.attach(QSharedMemory::ReadWrite)) {
if (!d->shmInfo.create(sizeof(Private::sharedInfoData))) {
lock.unlock();
sharedMemoryUnlock(lock);
setErrorString(QCoreApplication::translate("", "Cannot create memory segment for file %1").arg(d->filename));
return false;
}
d->shmInfo.lock();
sharedMemoryLock(d->shmInfo);
// no -> create it
infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data());
memset(infoPtr, 0, sizeof(Private::sharedInfoData));
infoPtr->shmCounter = 1;
if (!d->loadContentsFromFile()) {
d->shmInfo.unlock();
sharedMemoryUnlock(d->shmInfo);
d->shmInfo.detach();
lock.unlock();
sharedMemoryUnlock(lock);
return false;
}
} else {
d->shmInfo.lock();
sharedMemoryLock(d->shmInfo);
infoPtr = static_cast<Private::sharedInfoData *>(d->shmInfo.data());
d->shmData.setKey(d->getShmKey(infoPtr->shmCounter));
if (!d->shmData.attach(QSharedMemory::ReadOnly)) {
if (!d->loadContentsFromFile()) {
d->shmInfo.unlock();
sharedMemoryUnlock(d->shmInfo);
d->shmInfo.detach();
lock.unlock();
sharedMemoryUnlock(lock);
return false;
}
}
}
d->shmDataSize = infoPtr->shmDataSize;
d->shmInfo.unlock();
lock.unlock();
sharedMemoryUnlock(d->shmInfo);
sharedMemoryUnlock(lock);
setOpenMode(mode);
return true;
@@ -232,17 +253,17 @@ qint64 KMemFile::writeData(const char *, qint64)
void KMemFile::fileContentsChanged(const QString &filename)
{
QSharedMemory lock(QDir(filename).canonicalPath());
lock.lock();
sharedMemoryLock(lock);
QSharedMemory shmData(Private::getShmKey(filename));
if (!shmData.attach()) {
return;
}
shmData.lock();
sharedMemoryLock(shmData);
Private::sharedInfoData *infoPtr = static_cast<Private::sharedInfoData *>(shmData.data());
infoPtr->shmCounter++;
infoPtr->shmDataSize = 0;
shmData.unlock();
sharedMemoryUnlock(shmData);
}
#endif // QT_NO_SHAREDMEMORY