Use memcpy/memmove instead of loop operations
authorThilo Schulz <thilo@tjps.eu>
Sun, 1 Feb 2015 14:58:36 +0000 (15:58 +0100)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 2 Feb 2015 01:42:57 +0000 (11:42 +1000)
Signed-off-by: Thilo Schulz <thilo@tjps.eu>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
libevdev/libevdev-int.h

index 5e5ab26..372db53 100644 (file)
@@ -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;
 }