45 #define MAX_ARGLEN 1024
47 #define error(x) { errno = x; return -1; }
53 if (args == NULL) error(OK);
57 while ((argc <=
MAX_ARGC) && (args[argc] != NULL)) argc++;
58 if (argc == 0) error(OK);
63 size_t total_length = 1;
64 for (
size_t i = 0; i < argc; i++) {
66 if (arg == NULL) error(EINVAL);
72 total_length += (len + 1);
76 int fd = shm_open(SHM_ANON, O_RDWR, 0);
77 if (fd < 0)
return -1;
78 if (ftruncate(fd, total_length) < 0)
return -1;
79 if (fcntl(fd, F_SETFD, 0) == -1)
return -1;
81 char *mem = mmap(NULL, total_length, PROT_READ | PROT_WRITE, 0, fd, 0);
82 if (mem == MAP_FAILED)
return -1;
85 for (
size_t i = 0; i < argc; i++)
86 head = stpncpy(head, args[i], lengths[i] + 1) + 1;
88 munmap(mem, total_length);