aboutsummaryrefslogtreecommitdiff
path: root/sway/input/input-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/input/input-manager.c')
-rw-r--r--sway/input/input-manager.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c
index 34766ee6..6a49b13b 100644
--- a/sway/input/input-manager.c
+++ b/sway/input/input-manager.c
@@ -5,6 +5,7 @@
#include <stdio.h>
#include <string.h>
#include <libinput.h>
+#include <math.h>
#include "sway/config.h"
#include "sway/input/input-manager.h"
#include "sway/input/seat.h"
@@ -33,6 +34,13 @@ static struct sway_seat *input_manager_get_seat(
return sway_seat_create(input, seat_name);
}
+static inline int strlen_num(int num) {
+ if (num == 0) {
+ return 2;
+ }
+ return (int)((ceil(log10(abs(num)))+2));
+}
+
static char *get_device_identifier(struct wlr_input_device *device) {
int vendor = device->vendor;
int product = device->product;
@@ -46,9 +54,12 @@ static char *get_device_identifier(struct wlr_input_device *device) {
}
}
- sway_log(L_DEBUG, "rewritten name %s", name);
+ int len =
+ (strlen(name) +
+ strlen_num(device->vendor) +
+ strlen_num(device->product) +
+ 3) * sizeof(char);
- int len = strlen(name) + sizeof(char) * 6;
char *identifier = malloc(len);
if (!identifier) {
sway_log(L_ERROR, "Unable to allocate unique input device name");