summaryrefslogtreecommitdiff
path: root/libevdev/libevdev-int.h
diff options
context:
space:
mode:
authorThilo Schulz <thilo@tjps.eu>2015-02-01 15:58:36 +0100
committerPeter Hutterer <peter.hutterer@who-t.net>2015-02-02 11:42:57 +1000
commit7571dc49e5237830ba53a1fe9156d56ef15ba6ee (patch)
tree4bccfd9be6f0e0c866581af9ef0b38adae248c34 /libevdev/libevdev-int.h
parent867a237c5597ab14daff50253d5d73bcc8a44ef6 (diff)
downloadlibevdev-7571dc49e5237830ba53a1fe9156d56ef15ba6ee.tar.gz
Use memcpy/memmove instead of loop operations
Signed-off-by: Thilo Schulz <thilo@tjps.eu> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev/libevdev-int.h')
-rw-r--r--libevdev/libevdev-int.h17
1 files changed, 8 insertions, 9 deletions
diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h
index 5e5ab26..372db53 100644
--- a/libevdev/libevdev-int.h
+++ b/libevdev/libevdev-int.h
@@ -193,22 +193,21 @@ queue_peek(struct libevdev *dev, size_t idx, struct input_event *ev)
static inline int
queue_shift_multiple(struct libevdev *dev, size_t n, struct input_event *ev)
{
- size_t i;
+ size_t remaining;
if (dev->queue_next == 0)
return 0;
- n = min(n, dev->queue_next);
+ remaining = dev->queue_next;
+ n = min(n, remaining);
+ remaining -= n;
- if (ev) {
- for (i = 0; i < n; i++)
- ev[i] = dev->queue[i];
- }
+ if (ev)
+ memcpy(ev, dev->queue, n * sizeof(*ev));
- for (i = 0; i < dev->queue_next - n; i++)
- dev->queue[i] = dev->queue[n + i];
+ memmove(dev->queue, &dev->queue[n], remaining * sizeof(*dev->queue));
- dev->queue_next -= n;
+ dev->queue_next = remaining;
return n;
}