Commit Graph

532 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult 859c1e0045 (1823) randr: replace xallocarray() by calloc()
Only key difference that calloc(), in contrast to rellocarray(),
is zero-initializing. The overhead is hard to measure on today's
machines, and it's safer programming practise to always allocate
zero-initialized, so one can't forget to do it explicitly.

Cocci rule:

    @@
    expression COUNT;
    expression LEN;
    @@
    - xallocarray(COUNT,LEN)
    + calloc(COUNT,LEN)

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:59 +02:00
Enrico Weigelt, metux IT consult d300c8d354 (!1909) randr: use calloc() instead of malloc()
Using calloc() instead of malloc() as preventive measure, so there
never can be any hidden bugs or leaks due uninitialized memory.

The extra cost of using this compiler intrinsic should be practically
impossible to measure - in many cases a good compiler can even deduce
if certain areas really don't need to be zero'd (because they're written
to right after allocation) and create more efficient machine code.

The code pathes in question are pretty cold anyways, so it's probably
not worth even thinking about potential extra runtime costs.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:49 +02:00
Enrico Weigelt, metux IT consult 06f016f5f1 (!1714) randr: use CloseScreen hook
Wrapping ScreenRec's function pointers is problematic for many reasons,
so use the new screen close notify hook instead.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:46 +02:00
Enrico Weigelt, metux IT consult 95ffd3178f (!1972) randr: add BUG_* checks for possible NULL pointer issue
The ‘RRCrtcNotify() and RRCrtcSet() functions are exported, so there's chance
that a buggy driver could call them with NULL parameter, leading to segfault.
Those are hard to trace, so it's better having a BUG_* check here.

| ../randr/rrcrtc.c: In function ‘RRCrtcNotify’:
| ../randr/rrcrtc.c:187:5: warning: use of NULL ‘outputs’ where non-null expected [CWE-476] [-Wanalyzer-null-argument]
|   187 |     memcpy(crtc->outputs, outputs, numOutputs * sizeof(RROutputPtr));
|       |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

| ../randr/rrcrtc.c: In function ‘RRCrtcSet’:
| ../randr/rrcrtc.c:742:20: warning: dereference of NULL ‘outputs’ [CWE-476] [-Wanalyzer-null-dereference]
|   742 |         if (outputs[o]) {
|       |             ~~~~~~~^~~

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult 4b79884bb3 (!1972) randr: skip payload assembly in ProcRRGetScreenInfo() no data to send
If there's no data to send, the whole reply payload can be skipped entirely.
This can also ease the whole code flow, and we don't need to rely on the
individual copy loops never trying to dereference a NULL pointer.
(what the analyzer can't proof). Also scoping several some variables that
are only used when there actually is data to send.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult 9c9e77c745 (!1972) randr: skip payload assembly in rrGetScreenResources() no data to send
If there's no data to send, the whole reply payload can be skipped entirely.
This can also ease the whole code flow, and we don't need to rely on the
individual copy loops never trying to dereference a NULL pointer.
(what the analyzer can't proof). Also scoping several some variables that
are only used when there actually is data to send.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult 474e494562 (!1972) randr: simplify reply assembly in ProcRRListProviderProperties()
Moving payload buffer assembly right into the same branch where the buffer is
allocated, so making the whole code flow easier to understand. Also moving the
byteswap there (when the fields should still be in CPU cache), instead of having
some callback doing it much later, so even more simplication.

As a nice by-product, that's also reducing some analyzer noise.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult dfa43a0bfb (!1972) randr: no need to for local temp buffer in ProcRRQueryProviderProperty()
The code can be much simpler by just using CopySwap32Write().
And we also don't need the callback in WriteSwappedDataToClient(),
just call the corresponding write function directly.

This also makes some analyzer warnings go away.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult f62a9ef6be (!1972) randr: ProcRRGetOutputInfo() skip payload assembly when nothing to do
If there's no extra payload to send, we can skip the whole payload
assembly chain.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:40 +02:00
Enrico Weigelt, metux IT consult af8bacb4fc (!1972) randr: simplify extra payload copying in ProcRRGetOutputInfo()
Make it a bit easier to understand how exactly the name string is copied into
the reply payload: just do the little memcpy() right where the target position
is decided any the rest of the payload is filled.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 8af9fc8ecc (!1972) randr: RROutputSetCrtcs(): simplify buffer allocation / copying
Instead of relying on memcpy() coping with NULL buffer when size == 0,
move the call to the branch where we actually have things to copy.

This also silences yet another analyzer warning.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 9d6279aceb (!1972) randr: RROutputSetModes(): simplify buffer allocation / copying
Instead of relying on memcpy() coping with NULL buffer when size == 0,
move the call to the branch where we actually have things to copy.

This also silences yet another analyzer warning.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult b6069ed240 (!1972) randr: RROutputSetClones(): simplify buffer allocation / copying
Instead of relying on memcpy() coping with NULL buffer when size == 0,
move the call to the branch where we actually have things to copy.

This also silences yet another analyzer warning.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 830cee281d (!1972) randr: refine allocation and copying of optional buffers
Simplifying the code flow allocating/checking/copying some buffers in
RRConfigureOutputProperty() and RRConfigureProviderProperty() so it's
easier to understand for both the human reader as well as the analyzer.

Depending on whether we have elements to process, a temporary buffer needs
to be allocated, checked for successful allocation and copy over data. The
way it's currently done is technically correct, but unnecessarily complex to
understand: instead of just branching on whether there are elements and doing
all the buffer-related things only then, the branching is done just somewhere
in the middle, only on checking for allocation failure, and relying on both
calloc() and memcpy() not doing weird things when size is zero.

It's easy to simplify by putting it all behind one if statement and so make
things easier for both human reader as well as the analyzer (so it's not
spilling out false alarms here anymore) and also drops unnecessary calls
in the zero-size case.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 5cb22c7863 (!1985) randr: unexport and document RRTransformCopy()
Not used by any external drivers, so no neeed to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 67e2b0868b (!1985) randr: unexport and document RRTransformSetFilter()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 32a62458dc (!1985) randr: unexport and document RRTransformEqual()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 71a2f0b104 (!1985) randr: unexport and document RRTransformInit()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:39 +02:00
Enrico Weigelt, metux IT consult 0d75792cb1 (!1985) randr: unexport and document RRXineramaExtensionInit()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult f9e815e946 (!1985) randr: unexport and document RRQueryOutputProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 1a3ead7b51 (!1985) randr: unexport and document RRGetOutputProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 2197fc8ff0 (!1985) randr: unexport resource type IDs
Not used by any external drivers, so no need to keep them exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 32f846fab1 (!1985) randr: unexport and document RRConfigureProviderProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 3087feda69 (!1985) randr: unexport and document RRChangeProviderProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 4a80a04413 (!1985) randr: unexport and document RRDeleteProviderProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 35b9d5ce55 (!1985) randr: unexport and document RRQueryProviderProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult f87a48780c (!1985) randr: unexport and document RRGetProviderProperty()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 1fdd80ad6f (!1985) randr: unexport and document RRProviderAutoConfigGpuScreen()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult f1969882df (!1985) randr: unexport and document RRDeliverProviderEvent()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult d7f5a3ad93 (!1985) randr: unexport and document RRProviderDestroy()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult e3c34c8862 (!1985) randr: unexport and document RRProviderSetCapabilities()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 2ad1f88a1b (!1985) randr: unexport and document RRProviderCreate()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 3f79ed0c2c (!1985) randr: unexport and document RRProviderInitErrorValue()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult c8f89450a7 (!1985) randr: unexport and document RRProviderInit()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 6a20c741e0 (!1985) randr: unexport and document RRDeleteAllOutputProperties()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 9c6e10704f (!1985) randr: unexport and document RRPointerScreenConfigured()
Not usde by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 4e9ac859e6 (!1985) randr: unexport and document RROutputInitErrorValue()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 115943c0b0 (!1985) randr: unexport and document RROutputInit()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 1168697eef (!1985) randr: unexport and document RRDeliverOutputEvent()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 447c9557e9 (!1985) randr: unexport and document RROutputSetSubpixelOrder()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 8296cb66b0 (!1985) randr: unexport and document RROutputDeleteUserMode()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 9a7a44365e (!1985) randr: unexport and document RROutputAddUserMode()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult d21bfea109 (!1985) randr: unexport and document RRModeInitErrorValue()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult d16a923260 (!1985) randr: unexport and document RRModeInit()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 63bc8af34d (!1985) randr: unexport and document RRModesForScreen()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult e2a179d86c (!1985) randr: unexport and document RROutputIsLeased()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:38 +02:00
Enrico Weigelt, metux IT consult 4d5c7d86e8 (!1985) randr: unexport and document RRCrtcIsLeased()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:37 +02:00
Enrico Weigelt, metux IT consult bf9952ee05 (!1985) randr: unexport and document RRLeaseFree()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:37 +02:00
Enrico Weigelt, metux IT consult caaba77d09 (!1985) randr: unexport and document RRLeaseTerminated()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:37 +02:00
Enrico Weigelt, metux IT consult d0e2e34306 (!1985) randr: unexport and document RRClientKnowsRates()
Not used by any external drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2025-05-22 17:34:37 +02:00