1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 ***************************************************************************/
24 #if defined(solaris) || defined(linux)
29 #include <sys/errno.h>
33 #include <sys/types.h>
40 #include <sys/varargs.h>
46 typedef void (*sighandler_t
)(int);
50 fileOpenReadOnly
= O_RDONLY
,
51 fileOpenWriteOnly
= O_WRONLY
,
52 fileOpenReadWrite
= O_RDWR
,
53 fileOpenAppend
= O_APPEND
|O_RDWR
,
54 fileOpenCreat
= O_CREAT
|O_RDWR
,
55 // If set and fileOpenExcl is set, the
56 // open will fail if the file already exists.
57 fileOpenExcl
= O_EXCL
,
58 fileOpenTrunc
= O_TRUNC
63 mapProtRead
= PROT_READ
,
64 mapProtWrite
= PROT_WRITE
,
65 mapProcExec
= PROT_EXEC
,
66 mapProcNone
= PROT_NONE
71 mapShared
= MAP_SHARED
,
72 mapPrivate
= MAP_PRIVATE
,
74 // Interpret address exactly.
75 mapNoReserve
= MAP_NORESERVE
,
76 // Don't reserver swap space.
78 //mapAlign = MAP_ALIGN,
79 //for msync system call
85 #define MAX_FILE_LEN 1024
86 #define PAGE_SIZE 8192
87 #define IDENTIFIER_LENGTH 128
88 #define DEFAULT_VALUE_BUF_LENGTH 32
89 #define MAX_CHUNKS 100
91 #define MAX_PROCESS 100
92 #define SYSTEMDB "SYSTEMDB"
94 #define DBAPASS "manager"
95 #define SYSTEM_DB_SIZE 104857600
96 #define SYSTEMDB_KEY 2222
97 #define USERDB_KEY 5555
98 typedef key_t shared_memory_key
;
99 typedef int shared_memory_id
;
101 #define LOCK_BUCKET_SIZE 2048
109 static caddr_t
mmap(caddr_t addr
, size_t len
, int prot
, int flags
, int fildes
, off_t off
);
110 static int munmap(caddr_t addr
, size_t len
);
111 static int openFile(const char *name
, FileOpenMode flags
, size_t size
);
112 static int closeFile(int fd
);
113 static off_t
lseek(int fildes
, off_t offset
, int whence
);
114 static size_t write(int fildes
, char *buf
, size_t size
);
115 static int msync(caddr_t addr
, size_t len
, int flags
);
116 static int fsync(int fildes
);
117 static size_t alignLong(size_t size
);
118 static size_t align(size_t size
);
119 static char* encrypt(const char * key
, const char *salt
);
120 static void* memset(void *src
, int c
, size_t size
);
121 static void* memcpy(void *src
, const void *dest
, size_t size
);
122 static int memcmp(const void *s1
, const void *s2
, size_t size
);
123 static int select(int nfds
, fd_set
*readfds
, fd_set
*writefds
,
124 fd_set
*exceptfds
, struct timeval
* timeout
);
126 static shared_memory_id
shm_create(shared_memory_key key
, size_t size
, int flag
);
127 static shared_memory_id
shm_open(shared_memory_key key
, size_t size
, int flag
);
128 static void* shm_attach(shared_memory_id id
);
129 static int shm_detach (void*);
130 static int shmctl(int shmid
, int cmd
);
131 static double floor(double val
);
132 static sighandler_t
signal(int signum
, sighandler_t handler
);
134 static int gettimeofday(struct timeval
*tp
);
135 static struct tm
* localtime(long *secs
);
137 static int getthrid();