diff --git a/configure.in b/configure.in index cbd09992..74f532af 100644 --- a/configure.in +++ b/configure.in @@ -201,6 +201,7 @@ AC_CHECK_HEADERS(sys/utsname.h) AC_CHECK_HEADERS(stdint.h inttypes.h) AC_CHECK_HEADERS(locale.h pwd.h) AC_CHECK_HEADERS(termios.h) +AC_CHECK_HEADERS(sys/ipc.h sys/sem.h sys/shm.h) AC_CHECK_HEADERS(sys/epoll.h, [HAVE_SYS_EPOLL_H=yes]) diff --git a/src/main/main.c b/src/main/main.c index bf6eda98..05067e03 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -54,7 +54,9 @@ #include "util/file.h" #include "util/memdebug.h" #include "util/memory.h" +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) #include "util/sem.h" +#endif #include "viewer/dump/dump.h" #include "viewer/text/festival.h" #include "viewer/text/marks.h" @@ -115,6 +117,7 @@ check_cwd(void) static void init_master_ipc(void) { +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) struct string filename; key_t k1, k2, k3; @@ -132,11 +135,13 @@ init_master_ipc(void) shared_mem = shmat(shared_mem_ipc, NULL, 0); } done_string(&filename); +#endif } static void init_slave_ipc(void) { +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) struct string filename; key_t k1, k2, k3; @@ -152,11 +157,13 @@ init_slave_ipc(void) shared_mem = shmat(shared_mem_ipc, NULL, 0); } done_string(&filename); +#endif } static void done_ipc(void) { +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) if (shared_mem) shmdt(shared_mem); if (master_sem >= 0) @@ -164,6 +171,7 @@ done_ipc(void) if (slave_sem >= 0) sem_close(slave_sem); /* shared_mem_ipc will be automatically done by sem_close() */ +#endif } static void diff --git a/src/mime/backend/mailcap.c b/src/mime/backend/mailcap.c index 257cfbdd..028f52d4 100644 --- a/src/mime/backend/mailcap.c +++ b/src/mime/backend/mailcap.c @@ -41,7 +41,9 @@ #include "util/hash.h" #include "util/lists.h" #include "util/memory.h" +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) #include "util/sem.h" +#endif #include "util/string.h" extern int master_sem; @@ -671,11 +673,11 @@ get_mime_handler_mailcap_common(unsigned char *type) static struct mime_handler * get_mime_handler_mailcap(unsigned char *type, struct terminal *term) { - struct mime_handler *handler; + struct mime_handler *handler = NULL; unsigned char *desc, *data; int block, len; - if (!term || term->master) + if (!term || term->master || slave_sem == -1) return get_mime_handler_mailcap_common(type); len = strlen(type) + 1; @@ -687,16 +689,20 @@ get_mime_handler_mailcap(unsigned char *type, struct terminal *term) memcpy(data + 2, type, len); hard_write(term->fdout, data, len + 2); fmem_free(data); - +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) + if (!shared_mem) + return NULL; + shared_mem[0] = '\0'; /* For unexpected death of slave. */ sem_signal(slave_sem); sem_wait(master_sem); - if (!shared_mem || !*shared_mem) + if (!*shared_mem) return NULL; desc = strchr(shared_mem, '\0') + 1; block = (shared_mem[4095] > 0); handler = init_mime_handler(shared_mem, desc, mailcap_mime_module.name, get_mailcap_ask(), block); if (handler) handler->copiousoutput = shared_mem[4095] & 1; +#endif return handler; } @@ -704,6 +710,7 @@ get_mime_handler_mailcap(unsigned char *type, struct terminal *term) void get_slave_mailcap(unsigned char *type) { +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) sem_wait(slave_sem); if (shared_mem) { struct mailcap_entry *entry; @@ -748,6 +755,7 @@ get_slave_mailcap(unsigned char *type) } end: sem_signal(master_sem); +#endif } const struct mime_backend mailcap_mime_backend = { diff --git a/src/terminal/kbd.c b/src/terminal/kbd.c index a72e8c8a..d086fa93 100644 --- a/src/terminal/kbd.c +++ b/src/terminal/kbd.c @@ -563,7 +563,9 @@ has_nul_byte: if (fg == 3) { /* Mailcap */ +#ifdef CONFIG_MAILCAP get_slave_mailcap(path.source); +#endif goto next_round; } diff --git a/src/util/sem.c b/src/util/sem.c index 51aaa41f..3acafcd9 100644 --- a/src/util/sem.c +++ b/src/util/sem.c @@ -26,6 +26,7 @@ or use of these programs. #include "elinks.h" +#if defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SEM_H) && defined(HAVE_SYS_SHM_H) #include "util/sem.h" extern int shared_mem_ipc; @@ -311,3 +312,4 @@ sem_op(int id, int value) semop(id, &op_op[0], 1); /* err_sys("sem_op error"); */ } +#endif