Skip to content

Commit f90adb6

Browse files
committed
Split wob_create_argb_buffer() into wob_shm_create() & wob_shm_alloc()
1 parent bb7ad6c commit f90adb6

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

buffer.c

+20-17
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,47 @@
99

1010
#include "buffer.h"
1111

12-
bool
13-
wob_create_argb_buffer(const size_t size, int *shmid, uint32_t **buffer)
12+
int
13+
wob_shm_create()
1414
{
15-
int shmid_local = -1;
15+
int shmid = -1;
1616
char shm_name[NAME_MAX];
1717
for (unsigned char i = 0; i < UCHAR_MAX; ++i) {
1818
if (snprintf(shm_name, NAME_MAX, "/wob-%hhu", i) >= NAME_MAX) {
1919
break;
2020
}
21-
shmid_local = shm_open(shm_name, O_RDWR | O_CREAT | O_EXCL, 0600);
22-
if (shmid_local > 0 || errno != EEXIST) {
21+
shmid = shm_open(shm_name, O_RDWR | O_CREAT | O_EXCL, 0600);
22+
if (shmid > 0 || errno != EEXIST) {
2323
break;
2424
}
2525
}
2626

27-
if (shmid_local < 0) {
27+
if (shmid < 0) {
2828
perror("shm_open");
29-
return false;
29+
return -1;
3030
}
3131

3232
if (shm_unlink(shm_name) != 0) {
3333
perror("shm_unlink");
34-
return false;
34+
return -1;
3535
}
3636

37-
if (ftruncate(shmid_local, size) != 0) {
37+
return shmid;
38+
}
39+
40+
void *
41+
wob_shm_alloc(const int shmid, const size_t size)
42+
{
43+
if (ftruncate(shmid, size) != 0) {
3844
perror("ftruncate");
39-
return false;
45+
return NULL;
4046
}
4147

42-
void *buffer_local = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shmid_local, 0);
43-
if (buffer_local == MAP_FAILED) {
48+
void *buffer = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shmid, 0);
49+
if (buffer == MAP_FAILED) {
4450
perror("mmap");
45-
return false;
51+
return NULL;
4652
}
4753

48-
*buffer = (uint32_t *) buffer_local;
49-
*shmid = shmid_local;
50-
51-
return true;
54+
return buffer;
5255
}

include/buffer.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <stdbool.h>
55
#include <stdint.h>
66

7-
bool wob_create_argb_buffer(const size_t size, int *shmid, uint32_t **buffer);
7+
int wob_shm_create();
8+
9+
void *wob_shm_alloc(int shmid, size_t size);
810

911
#endif

main.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,14 @@ main(int argc, char **argv)
487487
geom.size = geom.stride * geom.height;
488488
app.wob_geom = &geom;
489489

490-
uint32_t *argb = NULL;
491-
if (!wob_create_argb_buffer(app.wob_geom->size, &(app.shmid), &argb)) {
490+
int shmid = wob_shm_create();
491+
if (shmid < 0) {
492+
return EXIT_FAILURE;
493+
}
494+
app.shmid = shmid;
495+
496+
uint32_t *argb = wob_shm_alloc(shmid, app.wob_geom->size);
497+
if (argb == NULL) {
492498
return EXIT_FAILURE;
493499
}
494500

0 commit comments

Comments
 (0)