1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.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 ***************************************************************************/
19 void* os::mmap(void* addr
, size_t len
, int prot
, int flags
, int fildes
, off_t off
)
22 return ((void*)::mmap((char*)addr
,len
,prot
,flags
,fildes
,off
));
24 return ((void*)::mmap(addr
,len
,prot
,flags
,fildes
,off
));
28 int os::munmap(caddr_t addr
, size_t len
)
30 return ::munmap(addr
, len
);
33 int os::atexit(void (*exitHndlr
)(void))
35 return ::atexit(exitHndlr
);
38 shared_memory_id
os::shm_create(shared_memory_key key
, size_t size
, int flag
)
40 return ::shmget(key
, size
, IPC_CREAT
| IPC_EXCL
| flag
);
41 //return ::shmget(key, size, IPC_CREAT | flag);
44 shared_memory_id
os::shm_open(shared_memory_key key
, size_t size
, int flag
)
46 return ::shmget(key
, size
, flag
);
48 int os::shmctl(int shmid
, int cmd
)
50 return ::shmctl(shmid
, cmd
, NULL
);
53 void* os::shm_attach(shared_memory_id id
, const void *ptr
, int flag
)
55 return ::shmat(id
, ptr
, flag
);
58 int os::shm_detach (void* addr
)
60 return ::shmdt((char*)addr
);
63 int os::gettimeofday(struct timeval
*tp
)
66 retval
=::gettimeofday(tp
, NULL
);
70 struct tm
* os::localtime(long *secs
)
73 return (struct tm
*) ::localtime(secs
);
75 return ::localtime(secs
);
79 int os::openFile(const char *name
, FileOpenMode flags
, size_t size
)
82 //mode_t mode = S_IRWXU | S_IRGRP | S_IWGRP ;
83 mode_t oldMode
= umask(0000);
84 mode_t mode
= (mode_t
)0644 ;
85 retval
=::open(name
, flags
, mode
);
89 os::lseek(retval
, size
-1, SEEK_SET
);
90 char *buf
= (char*)" ";
91 os::write(retval
, buf
, 1);
94 int os::openFileForAppend(const char *name
, int flag
)
96 mode_t mode
= (mode_t
)0644 ;
97 int flags
= flag
| O_WRONLY
|O_APPEND
;
98 return ::open(name
, flags
, mode
);
101 int os::closeFile(int fd
)
105 int os::lockFile(int fd
)
111 return flock(fd
, LOCK_EX
);
114 int os::unlockFile(int fd
)
120 return ::flock(fd
, LOCK_UN
);
124 off_t
os::lseek(int fildes
, off_t offset
, int whence
)
126 return ::lseek(fildes
, offset
, whence
);
129 size_t os::write(int fildes
, char *buf
, size_t size
)
131 return ::write(fildes
, buf
, size
);
134 int os::msync(caddr_t addr
, size_t len
, int flags
)
136 return ::msync(addr
, len
, flags
);
138 int os::fsync(int fildes
)
140 return ::fsync(fildes
);
143 char* os::encrypt(const char *key
, const char *salt
)
145 return ::crypt(key
, salt
);
148 void* os::memset(void *src
, int c
, size_t size
)
150 return::memset(src
, c
, size
);
153 void* os::memcpy(void *src
, const void *dest
, size_t size
)
155 return ::memcpy(src
, dest
, size
);
158 int os::memcmp(const void *s1
, const void *s2
, size_t size
)
160 return ::memcmp(s1
, s2
, size
);
162 sighandler_t
os::signal(int signum
, sighandler_t handler
)
164 return ::signal(signum
, handler
);
167 int os::select(int nfds
, fd_set
*readfds
, fd_set
*writefds
,
168 fd_set
*exceptfds
, struct timeval
* timeout
)
170 return ::select(nfds
, readfds
, writefds
, exceptfds
, timeout
);
172 int os::sleep(int secs
)
174 return ::sleep(secs
);
176 int os::usleep(int msecs
)
178 struct timeval timeout
;
180 timeout
.tv_usec
= msecs
;
181 os::select(0,0,0,0, &timeout
);
184 int os::getFileSize(const char *fileName
)
187 stat(fileName
, &buf
);
191 char* os::getenv(const char *envVarName
)
194 retVal
= ::getenv(envVarName
);
198 int os::setenv(const char *envVarName
, const char *value
)
201 char str
[IDENTIFIER_LENGTH
*3];
202 sprintf(str
, "%s=%s", envVarName
, value
);
205 return ::setenv(envVarName
, value
,1);
209 int os::kill(pid_t pid
, int sig
)
211 return ::kill(pid
, sig
);
213 bool os::atobool(char *value
)
215 if (strlen(value
) ==3 && strncasecmp(value
,"YES",3)==0) return true;
216 else if (strlen(value
) ==2 && strncasecmp(value
,"NO", 2)==0) return false;
217 else if (strlen(value
) ==4 && strncasecmp(value
,"true",4)==0) return true;
218 else if (strlen(value
) ==5 && strncasecmp(value
,"false",5)==0) return false;
221 pid_t
os::createProcess(const char* cmdName
, const char* execName
)
225 if (pid
== (pid_t
) -1 )
227 printf("Process creation failed\n");
235 pid
=::execl(cmdName
,execName
, NULL
);
237 printf("Exec failed\n");
244 size_t os::send(int fd
, const void *buf
, size_t len
, int flags
)
246 size_t totalLen
= len
;
247 size_t nbytes
= ::send(fd
, buf
, len
, flags
);
248 while (nbytes
!= -1 && nbytes
!= len
) {
250 nbytes
= ::send(fd
, ((char *)buf
)+nbytes
, len
, flags
);
252 if (nbytes
== -1) return -1;
253 else return totalLen
;
255 size_t os::recv(int fd
, void *buf
, size_t len
, int flags
)
257 size_t totalLen
= len
;
258 size_t nbytes
= ::recv(fd
, buf
, len
, flags
);
259 if (!nbytes
) return 0;
260 while (nbytes
!= -1 && nbytes
!= len
) {
262 nbytes
= ::recv(fd
, ((char *)buf
)+nbytes
, len
, flags
);
264 if (nbytes
== -1) return -1;
265 else return totalLen
;
267 int os::gethostname(char *hostname
, size_t len
)
269 return ::gethostname(hostname
, len
);
271 int os::strmatch(char *pattern
, char *str
)
273 return ::fnmatch(pattern
, str
, 0);
276 int os::msgget(key_t key
, int oflag
)
278 return ::msgget(key
, oflag
| IPC_CREAT
);
281 int os::msgsnd(int msqid
, const void *ptr
, size_t len
, int flag
)
283 return ::msgsnd(msqid
, ptr
, len
, flag
);
286 ssize_t
os::msgrcv(int msqid
, void *ptr
, size_t len
, long type
, int flag
)
288 return ::msgrcv(msqid
, ptr
, len
, type
, flag
);
291 int os::msgctl(int msqid
, int cmd
, struct msqid_ds
*buff
)
293 return ::msgctl(msqid
, cmd
, buff
);
295 bool os::fileExists(char *fileName
)
297 int ret
= access(fileName
, R_OK
);
298 if (0 == ret
) return true; else return false;
300 int os::isValidIP(char ipstr
[] )
303 struct ifaddrs
* ifAddrStruct
=NULL
;
304 void * tmpAddrPtr
=NULL
;
305 char addressBuffer
[100];
307 getifaddrs(&ifAddrStruct
);
309 while (ifAddrStruct
!=NULL
)
311 if (ifAddrStruct
->ifa_addr
->sa_family
==AF_INET
&& strcmp(ifAddrStruct
->ifa_name
, "lo0")!=0)
313 tmpAddrPtr
=&((struct sockaddr_in
*)ifAddrStruct
->ifa_addr
)->sin_addr
;
314 inet_ntop(AF_INET
, tmpAddrPtr
, addressBuffer
, 100);
315 if(strcmp(ipstr
,addressBuffer
) == 0)
317 // printf("\nThe ip is matched %s and %s",ipstr,addressBuffer);
320 // printf("IP Address %s\n", inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, 100));
322 ifAddrStruct
=ifAddrStruct
->ifa_next
;
327 char* os::strcasestr(char *str1
, const char *str2
)
330 return ::strcasestr(str1
, str2
);
332 return ::strstr(str1
, str2
);
334 int size=strlen(str1);
335 char *tmpStr=new char[size];
336 char *tmpStrPtr=NULL;
337 strcpy(tmpStr, str1);
339 while(*tmpStrPtr != '\0')
341 *tmpStrPtr=::toupper(*tmpStrPtr);
344 char *subStrPtr = ::strstr(tmpStr, str2);
350 int os::getNoOfProcessors()
352 return ::sysconf(_SC_NPROCESSORS_ONLN
);
354 mode_t
os::umask(mode_t mask
)
358 int os::fdatasync(int fd
)
363 return ::fdatasync(fd
);