1 /** 2 * Copyright (c) 2013 Larisa Grigore <larisagrigore@gmail.com>. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef SYSVD_UTILS_H 29 #define SYSVD_UTILS_H 30 31 #define SOCKET_FD_IDX 0 32 33 #define POLLPIPE (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND) 34 35 #define CONNEXION_CLOSED 0 36 37 #define SHMSEG_FREE 0x0200 38 #define SHMSEG_REMOVED 0x0400 39 #define SHMSEG_ALLOCATED 0x0800 40 #define SHMSEG_WANTED 0x1000 41 42 #define DIRPATH "/var/run/sysvipc" 43 44 #define SHM_NAME "shm" 45 #define SEM_NAME "sem" 46 #define MSG_NAME "msg" 47 #define UNDO_NAME "undo" 48 49 #include <sys/queue.h> 50 51 struct client { 52 //int fd[2]; 53 int sock; 54 pid_t pid; 55 int undoid; 56 LIST_HEAD(_ids_attached, id_attached) ids_attached; 57 }; 58 59 struct client_entry { 60 struct client *client; 61 LIST_ENTRY(client_entry) client_link; 62 }; 63 64 struct pid_attached { 65 int pid; 66 LIST_ENTRY(pid_attached) link; 67 }; 68 69 struct id_attached { 70 int shmid; 71 LIST_ENTRY(id_attached) link; 72 }; 73 74 struct shm_handle { 75 int type; 76 int fd; 77 LIST_HEAD(_attached_list, pid_attached) attached_list; 78 }; 79 80 /* Print wrappers. */ 81 void sysvd_print_err(const char *fmt, ...) __printflike(1, 2); 82 void sysvd_print(const char *fmt, ...) __printflike(1, 2); 83 84 #endif 85