From: Jan Kiszka <[email protected]>

Seen with uclibc in POSIX compliance.

Fixes: db3391923c0e ("tools: ivshmem-demo: Adjust selection of interrupt 
target")
Signed-off-by: Jan Kiszka <[email protected]>
---
 tools/demos/ivshmem-demo.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/tools/demos/ivshmem-demo.c b/tools/demos/ivshmem-demo.c
index 5d3c333f..f9ef438e 100644
--- a/tools/demos/ivshmem-demo.c
+++ b/tools/demos/ivshmem-demo.c
@@ -45,7 +45,7 @@ static inline void mmio_write32(void *address, uint32_t value)
        *(volatile uint32_t *)address = value;
 }

-static size_t uio_read_mem_size(char *devpath, int idx)
+static size_t uio_read_mem_size(char *uio_devname, int idx)
 {
        char sysfs_path[64];
        char output[20] = "";
@@ -54,7 +54,7 @@ static size_t uio_read_mem_size(char *devpath, int idx)

        snprintf(sysfs_path, sizeof(sysfs_path),
                 "/sys/class/uio/%s/maps/map%d/size",
-                basename(devpath), idx);
+                uio_devname, idx);
        fd = open(sysfs_path, O_RDONLY);
        if (fd < 0)
                error(1, errno, "open(sysfs)");
@@ -88,7 +88,8 @@ int main(int argc, char *argv[])
        struct signalfd_siginfo siginfo;
        struct pollfd fds[2];
        sigset_t sigset;
-       char *path = "/dev/uio0";
+       char *path = strdup("/dev/uio0");
+       char *uio_devname;
        int has_msix, i;
        int ret, size, offset, pgsize;
        uint32_t id, max_peers, int_count;
@@ -115,12 +116,13 @@ int main(int argc, char *argv[])
                error(1, errno, "open(%s)", path);
        fds[0].events = POLLIN;

+       uio_devname = basename(path);
        snprintf(sysfs_path, sizeof(sysfs_path),
-                "/sys/class/uio/%s/device/msi_irqs", basename(path));
+                "/sys/class/uio/%s/device/msi_irqs", uio_devname);
        has_msix = access(sysfs_path, R_OK) == 0;

        offset = 0;
-       size = uio_read_mem_size(path, 0);
+       size = uio_read_mem_size(uio_devname, 0);
        regs = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
                    fds[0].fd, offset);
        if (regs == MAP_FAILED)
@@ -138,26 +140,26 @@ int main(int argc, char *argv[])
                error(1, EINVAL, "invalid peer number");

        offset += pgsize;
-       size = uio_read_mem_size(path, 1);
+       size = uio_read_mem_size(uio_devname, 1);
        state = mmap(NULL, size, PROT_READ, MAP_SHARED, fds[0].fd, offset);
        if (state == MAP_FAILED)
                error(1, errno, "mmap(state)");

        offset += pgsize;
-       size = uio_read_mem_size(path, 2);
+       size = uio_read_mem_size(uio_devname, 2);
        rw = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
                  fds[0].fd, offset);
        if (rw == MAP_FAILED)
                error(1, errno, "mmap(rw)");

        offset += pgsize;
-       size = uio_read_mem_size(path, 3);
+       size = uio_read_mem_size(uio_devname, 3);
        in = mmap(NULL, size, PROT_READ, MAP_SHARED, fds[0].fd, offset);
        if (in == MAP_FAILED)
                error(1, errno, "mmap(in)");

        offset += pgsize;
-       size = uio_read_mem_size(path, 4);
+       size = uio_read_mem_size(uio_devname, 4);
        out = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
                   fds[0].fd, offset);
        if (out == MAP_FAILED)
--
2.26.2

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/9325b765d1ef16af3ad6e84f6dee872cd9e553c9.1609774199.git.jan.kiszka%40web.de.

Reply via email to