[...]

+               .expected_offset = 1
+       }, {
+               .data = "-R1111",
+               .data_len = 3,

The string is longer than 3 chars, is this intended?

Yes, I wanted to ensure that the algorithm stop at data_len and not \0

--- a/drivers/gpu/drm/vkms/vkms_configfs.c
+++ b/drivers/gpu/drm/vkms/vkms_configfs.c

+static ssize_t plane_supported_formats_store(struct config_item *item,
+                                            const char *page, size_t count)
+{
+       struct vkms_configfs_plane *plane;
+
+       plane = plane_item_to_vkms_configfs_plane(item);
+       int ret = 0;
+       const char *end_page = page + count;
+
+       scoped_guard(mutex, &plane->dev->lock) {
+               while (1) {
+                       char *tmp;
+                       char fmt[4] = {' ', ' ', ' ', ' '};
+                       int len = vkms_configfs_parse_next_format(page, end_page, 
&tmp);
+
+                       // No fourcc code found
+                       if (len <= 1)
+                               break;
+
+                       page = tmp + len;
+                       memcpy(tmp, &fmt[1], min(len - 1, 4));
Should this be instead:        fmt   tmp
?

memcpy(void *to, const void *from

Make sense yes... My tests were not sufficient :(

I will triple check this before sending the v3

Also I think it would be good to reject strings longer than 4 chars (len >
5), because they cannot br fourccs.

I will add this limitation.

Thanks!

Otherwise looks good.

BTW, I feel your pain in implementing the parsing!

Luca

--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Reply via email to