allocator fixes
[csql.git] / include / os.h
blobf8281dbf0ed8c4023701c2daab0e1381bfb3180c
1 /***************************************************************************
2 * *
3 * Copyright (C) Lakshya Solutions Ltd. All rights reserved. *
4 * *
5 ***************************************************************************/
7 #ifndef OS_H
8 #define OS_H
9 #include<build.h>
11 #if defined(SOLARIS) || defined(LINUX) || defined(FreeBSD)
13 #include <stdio.h>
14 #include <sys/mman.h>
15 #include <sys/msg.h>
16 #include <sys/shm.h>
17 #include <unistd.h>
18 #include <string.h>
19 #include <stdlib.h>
20 #include <sys/types.h>
21 #include <sys/stat.h>
22 #include <fcntl.h>
23 #include <pthread.h>
24 #include <math.h>
25 #include <signal.h>
26 #include <ctype.h>
27 #include <limits.h>
28 #include <sys/socket.h>
29 #include <fnmatch.h>
30 #include <sys/time.h>
31 #include <stdarg.h>
32 #include <net/if.h>
33 #include <arpa/inet.h>
34 #include <netinet/in.h>
35 #include <netinet/tcp.h>
36 #include <sys/file.h>
37 #include <sys/wait.h>
38 #if defined(SOLARIS)
39 #include <sys/varargs.h>
40 #include <crypt.h>
41 #include <errno.h>
42 #include <sys/atomic.h>
43 #include <timecsql.h>
44 #include <ucontext.h>
45 //extern int errno;
46 #endif
47 #if defined(LINUX)
48 #include <execinfo.h>
49 #include <ifaddrs.h>
50 #include <sys/errno.h>
51 #include <crypt.h>
52 #endif
53 #if defined(FreeBSD)
54 #include <sys/errno.h>
55 #endif
57 typedef void (*sighandler_t)(int);
59 enum FileOpenMode
61 fileOpenReadOnly = O_RDONLY,
62 fileOpenWriteOnly = O_WRONLY,
63 fileOpenReadWrite = O_RDWR,
64 fileOpenAppend = O_CREAT| O_APPEND |O_RDWR,
65 fileOpenCreat = O_CREAT |O_RDWR,
66 // If set and fileOpenExcl is set, the
67 // open will fail if the file already exists.
68 fileOpenExcl = O_EXCL,
69 fileOpenTrunc = O_TRUNC
72 enum MapProtMode
74 mapProtRead = PROT_READ,
75 mapProtWrite = PROT_WRITE,
76 mapProcExec = PROT_EXEC,
77 mapProcNone = PROT_NONE
80 enum MapMode
82 mapShared = MAP_SHARED,
83 mapPrivate = MAP_PRIVATE,
84 mapFixed = MAP_FIXED,
85 // Interpret address exactly.
86 mapNoReserve = MAP_NORESERVE,
87 // Don't reserver swap space.
89 //mapAlign = MAP_ALIGN,
90 //for msync system call
91 mapSync = MS_SYNC ,
92 mapASync = MS_ASYNC
96 #define SQL_STMT_LEN 8192
97 #define MAX_FILE_LEN 1024
98 #define IDENTIFIER_LENGTH 64
99 #define ERROR_STRING_LENGTH 128
100 #define DEFAULT_VALUE_BUF_LENGTH 32
101 #define STATE_LENGTH 8
102 #define SYSTEMDB "SYSTEMDB"
103 #define DBAUSER "root"
104 #define DBAPASS "manager"
105 #define I_USER "i@1r4D_f$_a"
106 #define I_PASS "a_$f_D4r1@i"
107 #define DEFAULT_CONFIG_FILE "/etc/csql/csql.conf"
108 #define LOCK_BUCKET_SIZE 2048
109 #define STMT_BUCKET_SIZE 1023
110 #define MAX_CHUNKS 20
111 #define PAGE_SIZE Conf::config.getPageSize()
112 #define MAX_MUTEX_PER_THREAD 4
113 #define MAX_THREADS_PER_PROCESS 30
114 #define MAX_FILE_PATH_LEN 1024
115 #define CHUNK_NAME_LEN 64
116 #define LOG_ROLLOVER_SIZE 20*1024*1024
117 #define SIGCSQL1 SIGUSR1
118 #define MIN_VARCHAR_ALLOC_SIZE 30
120 #define BIT(x) (1 << (x))
121 #define SETBITS(x,y) ((x) |= (y))
122 #define CLEARBITS(x,y) ((x) &= (~(y)))
123 #define SETBIT(x,y) SETBITS((x), (BIT((y))))
124 #define CLEARBIT(x,y) CLEARBITS((x), (BIT((y))))
125 #define BITSET(x,y) ((x) & (BIT(y)))
128 typedef key_t shared_memory_key;
129 typedef int shared_memory_id;
130 #if defined(__sparcv9)
131 typedef long InUse;
132 #else
133 typedef int InUse;
134 #endif
136 #endif
138 class os
140 public:
141 static void* mmap(void* addr, size_t len, int prot, int flags, int fildes, off_t off);
142 static int munmap(caddr_t addr, size_t len);
143 static int openFile(const char *name, FileOpenMode flags, size_t size);
144 static int closeFile(int fd);
145 static int lockFile(int fd);
146 static int unlockFile(int fd);
147 static off_t lseek(int fildes, off_t offset, int whence);
148 static int openFileForAppend(const char* fname, int flags);
149 static int getFileSize(const char* fname);
150 static size_t write(int fildes, char *buf, size_t size);
151 static int msync(caddr_t addr, size_t len, int flags);
152 static int fsync(int fildes);
153 inline static size_t alignLong(size_t size)
154 { return ((size - 1) | (sizeof(long) - 1)) + 1;}
155 inline static size_t align(size_t size)
156 { return ((size - 1) | (sizeof(InUse) - 1)) + 1;}
157 static char* encrypt(const char * key, const char *salt);
158 static void* memset(void *src, int c, size_t size);
159 static void* memcpy(void *src, const void *dest, size_t size);
160 static int memcmp(const void *s1, const void *s2, size_t size);
161 static int select(int nfds, fd_set *readfds, fd_set *writefds,
162 fd_set *exceptfds, struct timeval * timeout);
164 static int usleep(int microsecs);
165 static int sleep(int secs);
166 static shared_memory_id shm_create(shared_memory_key key, size_t size, int flag);
167 static shared_memory_id shm_open(shared_memory_key key, size_t size, int flag);
168 static void* shm_attach(shared_memory_id id, const void *ptr, int flag);
169 static int shm_detach (void*);
170 static int shmctl(int shmid, int cmd);
171 inline static double floor(double val)
172 { return ::floor(val); }
173 static sighandler_t signal(int signum, sighandler_t handler);
175 static int gettimeofday(struct timeval *tp);
176 static struct tm* localtime(long *secs);
177 static pid_t getpid()
178 { return ::getpid(); }
179 static pthread_t getthrid()
180 { return ::pthread_self(); }
181 static char* getenv(const char *envVarName);
182 static int setenv(const char *envVarName, const char *value);
184 static int kill(pid_t pid, int sig);
185 static bool atobool(char *value);
186 static pid_t createProcess(const char* cmdName, const char *arg0);
187 static pid_t fork();
188 static size_t send(int fd, const void *buf, size_t len, int flags);
189 static size_t recv(int fd, void *buf, size_t len, int flags);
190 static int gethostname(char *hostname, size_t len);
191 static int strmatch(char *pattern, char *str);
192 static int msgget(key_t key, int oflag);
193 static int msgsnd(int msqid, const void *ptr, size_t len, int flag);
194 static ssize_t msgrcv(int msqid, void *ptr, size_t len, long type, int flag);
195 static int msgctl(int msqid, int cmd, struct msqid_ds *buff);
196 static int isValidIP(char ipstr[] );
197 static bool fileExists(char *fileName);
198 static char* strcasestr(char *s1, const char *s2);
199 static int getNoOfProcessors();
200 static mode_t umask(mode_t mask);
201 static int fdatasync(int fd);
202 static int atexit(void (*exitHndlr)(void));
205 #endif