From 654be492a0faf9be25af1c6160c54aabfb3a1c81 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 18 Sep 2023 20:07:56 -0500 Subject: [PATCH] Avoid using LFS64 interfaces with Musl --- app/masterhook.c | 6 +++--- app/masterhook_internal.c | 6 +++--- app/streaming/video/ffmpeg-renderers/drm.cpp | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/masterhook.c b/app/masterhook.c index 4eace66d..323c8ff6 100644 --- a/app/masterhook.c +++ b/app/masterhook.c @@ -34,7 +34,7 @@ // Qt's DRM master FD grabbed by our hook int g_QtDrmMasterFd = -1; -struct stat64 g_DrmMasterStat; +struct stat g_DrmMasterStat; // The DRM master FD created for SDL int g_SdlDrmMasterFd = -1; @@ -55,7 +55,7 @@ int drmModeSetCrtc(int fd, uint32_t crtcId, uint32_t bufferId, // EGLFS backend's DRM FD, on which we will call drmDropMaster() later. if (g_QtDrmMasterFd == -1 && drmIsMaster(fd)) { g_QtDrmMasterFd = fd; - fstat64(g_QtDrmMasterFd, &g_DrmMasterStat); + fstat(g_QtDrmMasterFd, &g_DrmMasterStat); SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Captured Qt EGLFS DRM master fd (legacy): %d", g_QtDrmMasterFd); @@ -73,7 +73,7 @@ int drmModeAtomicCommit(int fd, drmModeAtomicReqPtr req, // EGLFS backend's DRM FD, on which we will call drmDropMaster() later. if (g_QtDrmMasterFd == -1 && drmIsMaster(fd)) { g_QtDrmMasterFd = fd; - fstat64(g_QtDrmMasterFd, &g_DrmMasterStat); + fstat(g_QtDrmMasterFd, &g_DrmMasterStat); SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Captured Qt EGLFS DRM master fd (atomic): %d", g_QtDrmMasterFd); diff --git a/app/masterhook_internal.c b/app/masterhook_internal.c index 5bebe0ff..5cc08b57 100644 --- a/app/masterhook_internal.c +++ b/app/masterhook_internal.c @@ -27,7 +27,7 @@ #if SDL_VERSION_ATLEAST(2, 0, 15) extern int g_QtDrmMasterFd; -extern struct stat64 g_DrmMasterStat; +extern struct stat g_DrmMasterStat; extern int g_SdlDrmMasterFd; int openHook(const char *funcname, const char *pathname, int flags, va_list va) @@ -50,9 +50,9 @@ int openHook(const char *funcname, const char *pathname, int flags, va_list va) if (fd >= 0 && g_QtDrmMasterFd != -1) { if (strncmp(pathname, "/dev/dri/card", 13) == 0) { // It's a DRM device, but is it _our_ DRM device? - struct stat64 fdstat; + struct stat fdstat; - fstat64(fd, &fdstat); + fstat(fd, &fdstat); if (g_DrmMasterStat.st_dev == fdstat.st_dev && g_DrmMasterStat.st_ino == fdstat.st_ino) { // It is our device. Time to do the magic! diff --git a/app/streaming/video/ffmpeg-renderers/drm.cpp b/app/streaming/video/ffmpeg-renderers/drm.cpp index ceec70d5..431e5e6f 100644 --- a/app/streaming/video/ffmpeg-renderers/drm.cpp +++ b/app/streaming/video/ffmpeg-renderers/drm.cpp @@ -746,7 +746,11 @@ bool DrmRenderer::mapSoftwareFrame(AVFrame *frame, AVDRMFrameDescriptor *mappedF // This leads to issues when DRM_IOCTL_MODE_MAP_DUMB returns a > 4GB offset. The high bits are // chopped off when passed via the normal mmap() call using 32-bit off_t. We avoid this issue // by explicitly calling mmap64() to ensure the 64-bit offset is never truncated. +#if defined(__GLIBC__) && QT_POINTER_SIZE == 4 drmFrame->mapping = (uint8_t*)mmap64(nullptr, drmFrame->size, PROT_WRITE, MAP_SHARED, m_DrmFd, mapBuf.offset); +#else + drmFrame->mapping = (uint8_t*)mmap(nullptr, drmFrame->size, PROT_WRITE, MAP_SHARED, m_DrmFd, mapBuf.offset); +#endif if (drmFrame->mapping == MAP_FAILED) { SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "mmap() failed for dumb buffer: %d",