00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "common/h/headers.h"
00032
00033 extern "C" {
00034
00035
00036 extern int getrusage(int, struct rusage*);
00037
00038
00039
00040 extern int listen(int, int);
00041 extern int rexec(char **ahost, u_short inport, char *user, char *passwd,
00042 char *cmd, int *fd2p);
00043 extern int socket(int, int, int);
00044 extern int socketpair(int, int, int, int sv[2]);
00045 extern int pipe(int fd[2]);
00046 extern int vfork();
00047 extern int fork();
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #ifndef _AIX43
00058 extern bool_t xdrrec_endofrecord (XDR *xdrs, bool_t sendnow);
00059 #endif
00060
00061 };
00062
00063
00064
00065
00066 int P_getopt(int argc, char *argv[], const char *optstring) { return getopt(argc, argv, optstring);}
00067 void P_abort() { abort();}
00068 int P_close (int FILEDES) { return (close(FILEDES));}
00069 int P_dup2 (int OLD, int NEW) { return (dup2(OLD, NEW));}
00070
00071
00072 int P_execvp (const char *FILENAME, char *const ARGV[]) {
00073 return (execvp(FILENAME, ARGV));}
00074 int P_execve (const char* FILENAME, char* const ARGV[], char* const ENVP[]) {
00075 return (execve(FILENAME, ARGV, ENVP));
00076 }
00077 void P__exit (int STATUS) { _exit(STATUS);}
00078 int P_fcntl (int filedes, int command, int arg2) {
00079 return (fcntl(filedes, command, arg2));}
00080 FILE * P_fdopen (int FILEDES, const char *OPENTYPE) {
00081 return (fdopen(FILEDES, OPENTYPE));}
00082 FILE * P_fopen (const char *FILENAME, const char *OPENTYPE) {
00083 return (fopen(FILENAME, OPENTYPE));}
00084 int P_fstat (int FILEDES, struct stat *BUF) { return (fstat(FILEDES, BUF));}
00085 pid_t P_getpid () { return (getpid());}
00086 int P_kill(pid_t PID, int SIGNUM) { return (kill(PID, SIGNUM));}
00087 off_t P_lseek (int FILEDES, off_t OFFSET, int WHENCE) {
00088 return (lseek(FILEDES, OFFSET, WHENCE));}
00089 int P_open(const char *FILENAME, int FLAGS, mode_t MODE) {
00090 return (open64(FILENAME, FLAGS, MODE));}
00091 int P_pclose (FILE *STREAM) { return (pclose(STREAM));}
00092 FILE *P_popen (const char *COMMAND, const char *MODE) { return (popen(COMMAND, MODE));}
00093 size_t P_read (int FILEDES, void *BUFFER, size_t SIZE) {
00094 return (read(FILEDES, BUFFER, SIZE));}
00095 int P_uname(utsname *unm) { return (uname(unm));}
00096 pid_t P_wait(int *status_ptr) { return (wait(status_ptr));}
00097 pid_t P_waitpid(pid_t pid, int *statusp, int options) {
00098 return (waitpid(pid, statusp, options));}
00099 size_t P_write (int FILEDES, const void *BUFFER, size_t SIZE) {
00100 return (write(FILEDES, BUFFER, SIZE));}
00101
00102
00103 int P_shmget(key_t thekey, int size, int flags) { return shmget(thekey, size, flags); }
00104 void *P_shmat(int shmid, void *addr, int flags) { return shmat(shmid, addr, flags); }
00105 int P_shmdt(void *addr) { return shmdt(addr); }
00106 int P_shmctl(int shmid, int cmd, struct shmid_ds *buf) { return shmctl(shmid, cmd, buf); }
00107
00108
00109 void P_exit (int STATUS) { exit(STATUS);}
00110 int P_fflush(FILE *stream) {return (fflush(stream));}
00111 char *P_fgets (char *S, int COUNT, FILE *STREAM) { return (fgets(S, COUNT, STREAM));}
00112 void * P_malloc (size_t SIZE) { return (malloc(SIZE));}
00113 void * P_memcpy (void *A1, const void *A2, size_t SIZE) {
00114 return (memcpy(A1, A2, SIZE));}
00115 void * P_memset (void *BLOCK, int C, unsigned SIZE) {
00116 return (memset(BLOCK, C, SIZE));}
00117 void P_perror (const char *MESSAGE) { perror(MESSAGE);}
00118 P_sig_handler P_signal (int SIGNUM, P_sig_handler ACTION) {
00119 return (signal(SIGNUM, ACTION));}
00120 char *P_strcat(char *TO, const char *FROM) { return (strcat(TO, FROM));}
00121 char *P_strchr(const char *S, int C) { return (strchr(S, C));}
00122 int P_strcmp(const char *S1, const char *S2) { return (strcmp(S1, S2));}
00123 char *P_strcpy(char *TO, const char *FROM) { return (strcpy(TO, FROM));}
00124 char *P_strdup(const char *FROM) { return (strdup(FROM));}
00125 size_t P_strlen (const char *S) { return (strlen(S));}
00126 char * P_strncat (char *TO, const char *FROM, size_t SIZE) {
00127 return (strncat(TO, FROM, SIZE));}
00128 int P_strncmp (const char *S1, const char *S2, size_t SIZE) {
00129 return (strncmp(S1, S2, SIZE));}
00130 char * P_strncpy (char *TO, const char *FROM, size_t SIZE) {
00131 return (strncpy(TO, FROM, SIZE));}
00132 char * P_strrchr (const char *STRING, int C) { return (strrchr(STRING, C));}
00133 char * P_strstr (const char *HAYSTACK, const char *NEEDLE) {
00134 return (strstr(HAYSTACK, NEEDLE));}
00135 double P_strtod (const char *STRING, char **TAILPTR) {
00136 return(strtod(STRING, TAILPTR));}
00137 char * P_strtok (char *NEWSTRING, const char *DELIMITERS) {
00138 return (strtok(NEWSTRING, DELIMITERS));}
00139 long int P_strtol (const char *STRING, char **TAILPTR, int BASE){
00140 return (strtol(STRING, TAILPTR, BASE));}
00141 unsigned long int P_strtoul(const char *STRING, char **TAILPTR, int BASE){
00142 return (strtoul(STRING, TAILPTR, BASE));}
00143
00144
00145
00146 int P_accept (int SOCK, struct sockaddr *ADDR, socklen_t *LENGTH_PTR) {
00147 #if defined(CROSSCOMPILER)
00148 return (accept(SOCK, ADDR, (int *)LENGTH_PTR));
00149 #else
00150 return (accept(SOCK, ADDR, LENGTH_PTR));
00151 #endif
00152 }
00153
00154 int P_bind(int socket, struct sockaddr *addr, socklen_t len) {
00155 return (bind(socket, addr, len));}
00156
00157
00158
00159 int P_connect(int socket, struct sockaddr *addr, socklen_t len) {
00160 return (connect(socket, addr, len));}
00161
00162 struct hostent *P_gethostbyname (const char *NAME) {
00163 return (gethostbyname(NAME));
00164 }
00165
00166 int P_gethostname(char *name, size_t size) {
00167 return (gethostname(name, size));}
00168
00169 int P_getrusage(int i, struct rusage *r) {return (getrusage(i, r));}
00170
00171 struct servent *P_getservbyname (const char *NAME, const char *PROTO) {
00172 return (getservbyname(NAME, PROTO));}
00173
00174 int P_getsockname (int SOCKET, struct sockaddr *ADDR, socklen_t *LENGTH_PTR) {
00175 #if defined(CROSSCOMPILER)
00176 return (getsockname(SOCKET, ADDR, (int *)LENGTH_PTR));
00177 #else
00178 return (getsockname(SOCKET, ADDR, LENGTH_PTR));
00179 #endif
00180 }
00181
00182
00183
00184
00185 int P_listen(int socket, unsigned int n) {
00186 return (listen(socket, n));}
00187
00188 caddr_t P_mmap(caddr_t addr, size_t len, int prot, int flags,
00189 int fd, off_t off) {
00190 return ((caddr_t)mmap(addr, len, prot, flags, fd, off));}
00191
00192 int P_munmap(caddr_t ca, int i) {return (munmap(ca, i));}
00193
00194 int P_select (int wid, fd_set *rd, fd_set *wr, fd_set *ex, struct timeval *tm) {
00195 return (select((unsigned long)wid, rd, wr, ex, tm));}
00196
00197 int P_socket (int NAMESPACE, int STYLE, int PROTOCOL) {
00198 return (socket(NAMESPACE, STYLE, PROTOCOL));}
00199
00200 int P_socketpair(int NAMESPACE, int style, int protocol, int filedes[2]) {
00201 return (socketpair(NAMESPACE, style, protocol, filedes));}
00202
00203 int P_pipe(int fd[2]) { return (pipe(fd)); }
00204
00205 int P_recv(int s, void *buf, size_t len, int flags) {
00206 return (recv(s, buf, len, flags));
00207 }
00208
00209
00210 int P_strcasecmp(const char *s1, const char *s2) {
00211 return (strcasecmp(s1, s2));}
00212
00213 int P_strncasecmp (const char *S1, const char *S2, size_t N) {
00214 return (strncasecmp(S1, S2, N));}
00215
00216 int P_rexec(char **ahost, u_short inport, char *user,
00217 char *passwd, char *cmd, int *fd2p){
00218 return (rexec(ahost, inport, user, passwd, cmd, fd2p));}
00219
00220 void P_endservent(void) { endservent(); }
00221
00222 void P_xdr_destroy(XDR *xdrs) { xdr_destroy(xdrs); }
00223 bool_t P_xdr_u_char(XDR *x, u_char *u) { return (xdr_u_char(x, u));}
00224 bool_t P_xdr_int(XDR *x, int *i) { return (xdr_int(x, i));}
00225 bool_t P_xdr_double(XDR *x, double *d) { return (xdr_double(x, d));}
00226 bool_t P_xdr_u_int(XDR *x, u_int *u) { return (xdr_u_int(x, u));}
00227 bool_t P_xdr_float(XDR *x, float *f) { return (xdr_float(x, f));}
00228 bool_t P_xdr_char(XDR *x, char *c) { return (xdr_char(x, c));}
00229 bool_t P_xdr_string(XDR *x, char **c, const u_int maxsize) {
00230 return (xdr_string(x, c, maxsize));}
00231 bool_t P_xdrrec_endofrecord(XDR *x, int now) {return (xdrrec_endofrecord(x, now));}
00232 bool_t P_xdrrec_skiprecord(XDR*x) { return (xdrrec_skiprecord(x));}
00233 void P_xdrrec_create(XDR *x, const u_int send_sz, const u_int rec_sz,
00234 const caddr_t handle,
00235 xdr_rd_func readit, xdr_wr_func writeit) {
00236 xdrrec_create(x, send_sz, rec_sz, handle,
00237 (int(*)(void *, char *, int))readit,
00238 (int(*)(void *, char *, int))writeit);}
00239
00240
00241 #define DMGL_PARAMS (1 << 0)
00242 #define DMGL_ANSI (1 << 1)
00243
00244 #if defined(cap_native_demangler)
00245 #include <demangle.h>
00246 extern "C" {
00247 extern Name *demangle(char *name, char **rest, unsigned long options);
00248 extern NameKind kind(Name *);
00249 extern char *text(Name *);
00250 extern char *functionName(Name *);
00251 extern char *varName(Name *);
00252 extern void erase(Name *);
00253 }
00254 #endif
00255
00256 #if defined(cap_liberty)
00257 extern "C" char *cplus_demangle(char *, int);
00258 #endif
00259
00260 #if defined(cap_gnu_demangler)
00261 #include <cxxabi.h>
00262 using namespace __cxxabiv1;
00263 #endif
00264
00265 extern void dedemangle( char * demangled, char * dedemangled );
00266
00267 char *P_cplus_demangle( const char * symbol, bool nativeCompiler, bool includeTypes ) {
00268
00269
00270 #if defined(cap_liberty) || defined(cap_gnu_demangler)
00271 if( !nativeCompiler ) {
00272 #if defined(cap_gnu_demangler)
00273 int status;
00274 char *demangled = __cxa_demangle(symbol, NULL, NULL, &status);
00275 if (status == -1) {
00276
00277 return NULL;
00278 }
00279 if (status == -2) {
00280
00281 return NULL;
00282 }
00283 assert(status == 0);
00284 #else
00285 char * demangled = cplus_demangle( const_cast<char *>(symbol),
00286 includeTypes ? DMGL_PARAMS | DMGL_ANSI : 0 );
00287 #endif
00288 if( demangled == NULL ) { return NULL; }
00289
00290 if( ! includeTypes ) {
00291
00292 char * dedemangled = strdup( demangled );
00293 assert( dedemangled != NULL );
00294
00295 dedemangle( demangled, dedemangled );
00296 assert( dedemangled != NULL );
00297
00298 free( demangled );
00299 return dedemangled;
00300 }
00301
00302 return demangled;
00303 }
00304 #endif
00305
00306 #if defined(cap_native_demangler)
00307
00308 Name * name;
00309 char * rest;
00310
00311
00312
00313 name = demangle( const_cast<char*>(symbol), (char **) & rest,
00314 RegularNames | ClassNames | SpecialNames | ParameterText | QualifierText );
00315 if( name == NULL ) { return NULL; }
00316
00317 char * demangled = NULL;
00318 switch( kind( name ) ) {
00319 case ::Function:
00320 if (includeTypes)
00321 demangled = text(name);
00322 else
00323 demangled = functionName(name);
00324 break;
00325
00326 case MemberFunction:
00327
00328 demangled = text(name);
00329 break;
00330
00331 case MemberVar:
00332 demangled = varName(name);
00333 break;
00334
00335 case VirtualName:
00336 case Class:
00337 case Special:
00338 case Long:
00339 demangled = text(name);
00340 break;
00341 default: assert( 0 );
00342 }
00343
00344
00345
00346
00347
00348
00349 if( ! includeTypes ) {
00350
00351 char * dedemangled = strdup( demangled );
00352 char *old_demangled = dedemangled;
00353 assert( dedemangled != NULL );
00354
00355 dedemangle( demangled, dedemangled );
00356 assert( dedemangled != NULL );
00357 erase(name);
00358
00359 assert(old_demangled == dedemangled);
00360 return dedemangled;
00361 }
00362 char *strname = strdup(demangled);
00363 erase(name);
00364 return strname;
00365 #endif
00366 return NULL;
00367 }
00368
00369
00370
00371
00372
00373