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
);
34 shared_memory_id
os::shm_create(shared_memory_key key
, size_t size
, int flag
)
36 return ::shmget(key
, size
, IPC_CREAT
| IPC_EXCL
| flag
);
37 //return ::shmget(key, size, IPC_CREAT | flag);
40 shared_memory_id
os::shm_open(shared_memory_key key
, size_t size
, int flag
)
42 return ::shmget(key
, size
, flag
);
44 int os::shmctl(int shmid
, int cmd
)
46 return ::shmctl(shmid
, cmd
, NULL
);
49 void* os::shm_attach(shared_memory_id id
, const void *ptr
, int flag
)
51 return ::shmat(id
, ptr
, flag
);
54 int os::shm_detach (void* addr
)
56 return ::shmdt((char*)addr
);
59 int os::gettimeofday(struct timeval
*tp
)
62 retval
=::gettimeofday(tp
, NULL
);
66 struct tm
* os::localtime(long *secs
)
69 return (struct tm
*) ::localtime(secs
);
71 return ::localtime(secs
);
75 int os::openFile(const char *name
, FileOpenMode flags
, size_t size
)
78 //mode_t mode = S_IRWXU | S_IRGRP | S_IWGRP ;
79 mode_t oldMode
= umask(0000);
80 mode_t mode
= (mode_t
)0777 ;
81 retval
=::open(name
, flags
, mode
);
85 os::lseek(retval
, size
-1, SEEK_SET
);
86 char *buf
= (char*)" ";
87 os::write(retval
, buf
, 1);
90 int os::openFileForAppend(const char *name
, int flag
)
92 mode_t mode
= (mode_t
)0644 ;
93 int flags
= flag
| O_WRONLY
|O_APPEND
;
94 return ::open(name
, flags
, mode
);
97 int os::closeFile(int fd
)
101 int os::lockFile(int fd
)
103 return flock(fd
, LOCK_EX
);
105 int os::unlockFile(int fd
)
107 return ::flock(fd
, LOCK_UN
);
110 off_t
os::lseek(int fildes
, off_t offset
, int whence
)
112 return ::lseek(fildes
, offset
, whence
);
115 size_t os::write(int fildes
, char *buf
, size_t size
)
117 return ::write(fildes
, buf
, size
);
120 int os::msync(caddr_t addr
, size_t len
, int flags
)
122 return ::msync(addr
, len
, flags
);
124 int os::fsync(int fildes
)
126 return ::fsync(fildes
);
129 char* os::encrypt(const char *key
, const char *salt
)
131 return ::crypt(key
, salt
);
134 void* os::memset(void *src
, int c
, size_t size
)
136 return::memset(src
, c
, size
);
139 void* os::memcpy(void *src
, const void *dest
, size_t size
)
141 return ::memcpy(src
, dest
, size
);
144 int os::memcmp(const void *s1
, const void *s2
, size_t size
)
146 return ::memcmp(s1
, s2
, size
);
148 sighandler_t
os::signal(int signum
, sighandler_t handler
)
150 return ::signal(signum
, handler
);
153 int os::select(int nfds
, fd_set
*readfds
, fd_set
*writefds
,
154 fd_set
*exceptfds
, struct timeval
* timeout
)
156 return ::select(nfds
, readfds
, writefds
, exceptfds
, timeout
);
158 int os::sleep(int secs
)
160 return ::sleep(secs
);
162 int os::usleep(int msecs
)
164 struct timeval timeout
;
166 timeout
.tv_usec
= msecs
;
167 os::select(0,0,0,0, &timeout
);
170 int os::getFileSize(const char *fileName
)
173 stat(fileName
, &buf
);
177 char* os::getenv(const char *envVarName
)
180 retVal
= ::getenv(envVarName
);
184 int os::setenv(const char *envVarName
, const char *value
)
187 char str
[IDENTIFIER_LENGTH
*3];
188 sprintf(str
, "%s=%s", envVarName
, value
);
191 return ::setenv(envVarName
, value
,1);
195 int os::kill(pid_t pid
, int sig
)
197 return ::kill(pid
, sig
);
199 bool os::atobool(char *value
)
201 if (strlen(value
) ==3 && strncasecmp(value
,"YES",3)==0) return true;
202 else if (strlen(value
) ==2 && strncasecmp(value
,"NO", 2)==0) return false;
203 else if (strlen(value
) ==4 && strncasecmp(value
,"true",4)==0) return true;
204 else if (strlen(value
) ==5 && strncasecmp(value
,"false",5)==0) return false;
207 pid_t
os::createProcess(const char* cmdName
, const char* execName
)
211 if (pid
== (pid_t
) -1 )
213 printf("Process creation failed\n");
221 pid
=::execl(cmdName
,execName
, NULL
);
223 printf("Exec failed\n");
230 size_t os::send(int fd
, const void *buf
, size_t len
, int flags
)
232 size_t totalLen
= len
;
233 size_t nbytes
= ::send(fd
, buf
, len
, flags
);
234 while (nbytes
!= -1 && nbytes
!= len
) {
236 nbytes
= ::send(fd
, ((char *)buf
)+nbytes
, len
, flags
);
238 if (nbytes
== -1) return -1;
239 else return totalLen
;
241 size_t os::recv(int fd
, void *buf
, size_t len
, int flags
)
243 size_t totalLen
= len
;
244 size_t nbytes
= ::recv(fd
, buf
, len
, flags
);
245 if (!nbytes
) return 0;
246 while (nbytes
!= -1 && nbytes
!= len
) {
248 nbytes
= ::recv(fd
, ((char *)buf
)+nbytes
, len
, flags
);
250 if (nbytes
== -1) return -1;
251 else return totalLen
;
253 int os::gethostname(char *hostname
, size_t len
)
255 return ::gethostname(hostname
, len
);
257 int os::strmatch(char *pattern
, char *str
)
259 return ::fnmatch(pattern
, str
, 0);
262 int os::msgget(key_t key
, int oflag
)
264 return ::msgget(key
, oflag
| IPC_CREAT
);
267 int os::msgsnd(int msqid
, const void *ptr
, size_t len
, int flag
)
269 return ::msgsnd(msqid
, ptr
, len
, flag
);
272 ssize_t
os::msgrcv(int msqid
, void *ptr
, size_t len
, long type
, int flag
)
274 return ::msgrcv(msqid
, ptr
, len
, type
, flag
);
277 int os::msgctl(int msqid
, int cmd
, struct msqid_ds
*buff
)
279 return ::msgctl(msqid
, cmd
, buff
);
281 bool os::fileExists(char *fileName
)
283 int ret
= access(fileName
, R_OK
);
284 if (0 == ret
) return true; else return false;
286 int os::isValidIP(char ipstr
[] )
289 struct ifaddrs
* ifAddrStruct
=NULL
;
290 void * tmpAddrPtr
=NULL
;
291 char addressBuffer
[100];
293 getifaddrs(&ifAddrStruct
);
295 while (ifAddrStruct
!=NULL
)
297 if (ifAddrStruct
->ifa_addr
->sa_family
==AF_INET
&& strcmp(ifAddrStruct
->ifa_name
, "lo0")!=0)
299 tmpAddrPtr
=&((struct sockaddr_in
*)ifAddrStruct
->ifa_addr
)->sin_addr
;
300 inet_ntop(AF_INET
, tmpAddrPtr
, addressBuffer
, 100);
301 if(strcmp(ipstr
,addressBuffer
) == 0)
303 // printf("\nThe ip is matched %s and %s",ipstr,addressBuffer);
306 // printf("IP Address %s\n", inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, 100));
308 ifAddrStruct
=ifAddrStruct
->ifa_next
;
313 char* os::strcasestr(char *str1
, const char *str2
)
316 return ::strcasestr(str1
, str2
);
318 return ::strstr(str1
, str2
);
320 int size=strlen(str1);
321 char *tmpStr=new char[size];
322 char *tmpStrPtr=NULL;
323 strcpy(tmpStr, str1);
325 while(*tmpStrPtr != '\0')
327 *tmpStrPtr=::toupper(*tmpStrPtr);
330 char *subStrPtr = ::strstr(tmpStr, str2);
336 int os::getNoOfProcessors()
338 return ::sysconf(_SC_NPROCESSORS_ONLN
);