mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-07 22:58:11 +00:00
90731970a6
again. The prototype was changed in revision 1.14 of "src/sys/sys/sem.h". In order to make this work on older systems too, I have incremented __FreeBSD_version and `ifdef'ed based on that. Unfortunately, there was a 3-day gap between when the semctl() interface changed (May 30) and when I bumped __FreeBSD_version (June 2). FreeBSD-current systems from that date range will still have problems building this port.
710 lines
13 KiB
Plaintext
710 lines
13 KiB
Plaintext
Fix a const-related compiler warning produced by the "execve" wrapper.
|
|
Move network related wrappers to separate files, for SOCKS support.
|
|
Fix some things so that it will compile under FreeBSD-3.0.
|
|
Add missing wrappers for various system calls.
|
|
Fix numerous argument declarations to agree with their prototypes.
|
|
Fix the wrapper for ftruncate so that it deals properly with the 64-bit
|
|
arguments.
|
|
|
|
--- m3/m3core/src/runtime/FreeBSD2/RTHeapDepC.c.orig Sat Mar 23 14:52:21 1996
|
|
+++ m3/m3core/src/runtime/FreeBSD2/RTHeapDepC.c Tue Jun 2 14:22:48 1998
|
|
@@ -80,7 +80,8 @@
|
|
#include <sys/file.h>
|
|
#include <sys/param.h>
|
|
#if __FreeBSD__ >= 2
|
|
-# include <sys/sysctl.h>
|
|
+#include <sys/sysctl.h>
|
|
+#include <osreldate.h>
|
|
#endif
|
|
#include <sys/mount.h>
|
|
#include <sys/ipc.h>
|
|
@@ -89,9 +90,21 @@
|
|
#include <ufs/ufs/quota.h>
|
|
#include <sys/signal.h>
|
|
#include <sys/socket.h>
|
|
+#include <sys/stat.h>
|
|
#include <sys/uio.h>
|
|
#include <sys/wait.h>
|
|
|
|
+#if __FreeBSD__ >= 3
|
|
+#include <sys/time.h>
|
|
+#include <nfs/rpcv2.h>
|
|
+#include <nfs/nfsproto.h>
|
|
+#include <nfs/nfs.h>
|
|
+#include <ufs/ufs/ufsmount.h>
|
|
+#endif
|
|
+
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+
|
|
#ifdef NULL
|
|
#undef NULL
|
|
#endif
|
|
@@ -110,22 +123,8 @@
|
|
/* Unless otherwise noted, all the following wrappers have the same
|
|
structure. */
|
|
|
|
-int accept(s, addr, addrlen) /* ok */
|
|
-int s;
|
|
-struct sockaddr *addr;
|
|
-int *addrlen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(addr);
|
|
- MAKE_WRITABLE(addrlen);
|
|
- result = syscall(SYS_accept, s, addr, addrlen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int access(path, mode) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
int mode;
|
|
{ int result;
|
|
|
|
@@ -137,7 +136,7 @@
|
|
}
|
|
|
|
int acct(file) /* ok */
|
|
-char *file;
|
|
+const char *file;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -228,19 +227,6 @@
|
|
}
|
|
*/
|
|
|
|
-int bind(s, name, namelen) /* ok */
|
|
-int s;
|
|
-const struct sockaddr *name;
|
|
-int namelen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(name);
|
|
- result = syscall(SYS_bind, s, name, namelen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
/* not implemented
|
|
int cachectl(addr, nbytes, op)
|
|
char *addr;
|
|
@@ -268,7 +254,7 @@
|
|
*/
|
|
|
|
int chdir(path) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -278,8 +264,20 @@
|
|
return result;
|
|
}
|
|
|
|
+int chflags(path, flags)
|
|
+const char *path;
|
|
+u_long flags;
|
|
+{ int result;
|
|
+
|
|
+ ENTER_CRITICAL;
|
|
+ MAKE_READABLE(path);
|
|
+ result = syscall(SYS_chflags, path, flags);
|
|
+ EXIT_CRITICAL;
|
|
+ return result;
|
|
+}
|
|
+
|
|
int chmod(path, mode) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
mode_t mode;
|
|
{ int result;
|
|
|
|
@@ -291,7 +289,7 @@
|
|
}
|
|
|
|
int chown(path, owner, group) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
uid_t owner;
|
|
gid_t group;
|
|
{ int result;
|
|
@@ -304,7 +302,7 @@
|
|
}
|
|
|
|
int chroot(dirname) /* ok */
|
|
-char *dirname;
|
|
+const char *dirname;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -314,19 +312,6 @@
|
|
return result;
|
|
}
|
|
|
|
-int connect(s, name, namelen) /* ok */
|
|
-int s;
|
|
-const struct sockaddr *name;
|
|
-int namelen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(name);
|
|
- result = syscall(SYS_connect, s, name, namelen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
/* not implemented (obsolete)
|
|
int creat(name, mode)
|
|
const char *name;
|
|
@@ -356,8 +341,8 @@
|
|
result = syscall(SYS_execve, name, argv, envp);
|
|
if (result == -1 && errno == EFAULT) {
|
|
MAKE_READABLE(name);
|
|
- { char **a; for (a = argv; *a; a++) MAKE_READABLE(*a); }
|
|
- { char **e; for (e = envp; *e; e++) MAKE_READABLE(*e); }
|
|
+ { char * const *a; for (a = argv; *a; a++) MAKE_READABLE(*a); }
|
|
+ { char * const *e; for (e = envp; *e; e++) MAKE_READABLE(*e); }
|
|
} else {
|
|
return result;
|
|
}
|
|
@@ -473,7 +458,7 @@
|
|
|
|
int getgroups(gidsetsize, grouplist) /* ok */
|
|
int gidsetsize;
|
|
-int grouplist[];
|
|
+gid_t grouplist[];
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -513,20 +498,6 @@
|
|
}
|
|
*/
|
|
|
|
-int getpeername(s, name, namelen) /* ok */
|
|
-int s;
|
|
-struct sockaddr *name;
|
|
-int *namelen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(name);
|
|
- MAKE_WRITABLE(namelen);
|
|
- result = syscall(SYS_getpeername, s, name, namelen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int getrlimit(resource, rlp) /* ok */
|
|
int resource;
|
|
struct rlimit *rlp;
|
|
@@ -551,20 +522,6 @@
|
|
return result;
|
|
}
|
|
|
|
-int getsockname(s, name, namelen) /* ok */
|
|
-int s;
|
|
-struct sockaddr *name;
|
|
-int *namelen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(name);
|
|
- MAKE_WRITABLE(namelen);
|
|
- result = syscall(SYS_getsockname, s, name, namelen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int getsockopt(s, level, optname, optval, optlen) /* ok */
|
|
int s, level, optname;
|
|
void *optval;
|
|
@@ -629,9 +586,24 @@
|
|
return result;
|
|
}
|
|
|
|
+#ifdef SYS_lchown
|
|
+int lchown(path, owner, group) /* ok */
|
|
+const char *path;
|
|
+uid_t owner;
|
|
+gid_t group;
|
|
+{ int result;
|
|
+
|
|
+ ENTER_CRITICAL;
|
|
+ MAKE_READABLE(path);
|
|
+ result = syscall(SYS_lchown, path, owner, group);
|
|
+ EXIT_CRITICAL;
|
|
+ return result;
|
|
+}
|
|
+#endif /* SYS_lchown */
|
|
+
|
|
int link(name1, name2) /* ok */
|
|
-char *name1;
|
|
-char *name2;
|
|
+const char *name1;
|
|
+const char *name2;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -643,7 +615,7 @@
|
|
}
|
|
|
|
int lstat(path, buf) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
struct stat *buf;
|
|
{ int result;
|
|
|
|
@@ -656,7 +628,7 @@
|
|
}
|
|
|
|
int mkdir(path, mode) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
mode_t mode;
|
|
{ int result;
|
|
|
|
@@ -667,8 +639,20 @@
|
|
return result;
|
|
}
|
|
|
|
+int mkfifo(path, mode) /* ok */
|
|
+const char *path;
|
|
+mode_t mode;
|
|
+{ int result;
|
|
+
|
|
+ ENTER_CRITICAL;
|
|
+ MAKE_READABLE(path);
|
|
+ result = syscall(SYS_mkfifo, path, mode);
|
|
+ EXIT_CRITICAL;
|
|
+ return result;
|
|
+}
|
|
+
|
|
int mknod(path, mode, dev) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
mode_t mode;
|
|
dev_t dev;
|
|
{ int result;
|
|
@@ -680,13 +664,51 @@
|
|
return result;
|
|
}
|
|
|
|
-/* quite different ...
|
|
-int mount(special, name, rwflag, type, options)
|
|
-char *special;
|
|
-char *name;
|
|
-int rwflag, type;
|
|
-char *options;
|
|
-*/
|
|
+#if __FreeBSD_version >= 300001 /* New form of mount(2) */
|
|
+int
|
|
+mount(type, dir, flags, data)
|
|
+ const char *type;
|
|
+ const char *dir;
|
|
+ int flags;
|
|
+ void *data;
|
|
+{ int result;
|
|
+ struct ufs_args *u_data;
|
|
+ struct mfs_args *m_data;
|
|
+ struct nfs_args *n_data;
|
|
+
|
|
+ ENTER_CRITICAL;
|
|
+ MAKE_READABLE(type);
|
|
+ MAKE_READABLE(dir);
|
|
+ if (strcmp(type, "ufs") == 0) {
|
|
+ u_data = (struct ufs_args*) data;
|
|
+ MAKE_READABLE(u_data);
|
|
+ MAKE_READABLE(u_data->fspec);
|
|
+ result = syscall(SYS_mount, type, dir, flags, data);
|
|
+ } else if (strcmp(type, "mfs") == 0) {
|
|
+ m_data = (struct mfs_args*) data;
|
|
+ MAKE_READABLE(m_data);
|
|
+ MAKE_READABLE(m_data->fspec);
|
|
+ result = syscall(SYS_mount, type, dir, flags, data);
|
|
+ } else if (strcmp(type, "nfs") == 0) {
|
|
+ n_data = (struct nfs_args*) data;
|
|
+ MAKE_READABLE(n_data);
|
|
+ MAKE_READABLE(n_data->addr);
|
|
+ MAKE_READABLE(n_data->fh);
|
|
+ MAKE_READABLE(n_data->hostname);
|
|
+ result = syscall(SYS_mount, type, dir, flags, data);
|
|
+ } else { /* Not anything we recognize. */
|
|
+ MAKE_READABLE(data);
|
|
+ result = syscall(SYS_mount, type, dir, flags, data);
|
|
+ }
|
|
+ EXIT_CRITICAL;
|
|
+ if (result != -1) {
|
|
+ result = 0;
|
|
+ }
|
|
+ return result;
|
|
+}
|
|
+
|
|
+#else /* __FreeBSD_version >= 300001 */
|
|
+
|
|
int mount(type, dir, flags, data)
|
|
int type;
|
|
const char *dir;
|
|
@@ -723,6 +745,7 @@
|
|
}
|
|
return result;
|
|
}
|
|
+#endif /* __FreeBSD_version >= 300001 */
|
|
|
|
int msgctl(msqid, cmd, buf) /* ok */
|
|
int msqid, cmd;
|
|
@@ -821,21 +844,8 @@
|
|
return result;
|
|
}
|
|
|
|
-int read(d, buf, nbytes) /* ok */
|
|
-int d;
|
|
-char *buf;
|
|
-size_t nbytes;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(buf);
|
|
- result = syscall(SYS_read, d, buf, nbytes);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int readlink(path, buf, bufsiz) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
char *buf;
|
|
int bufsiz;
|
|
{ int result;
|
|
@@ -865,46 +875,6 @@
|
|
return result;
|
|
}
|
|
|
|
-int recv(s, buf, len, flags) /* ok */
|
|
-int s;
|
|
-void *buf;
|
|
-#if __FreeBSD__ >=2
|
|
-size_t len;
|
|
-#else
|
|
-int len;
|
|
-#endif
|
|
-int flags;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(buf);
|
|
- result = syscall(SYS_recvfrom, s, buf, len, flags, NULL, 0);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
-int recvfrom(s, buf, len, flags, from, fromlen) /* ok */
|
|
-int s;
|
|
-void *buf;
|
|
-#if __FreeBSD__ >=2
|
|
-size_t len;
|
|
-#else
|
|
-int len;
|
|
-#endif
|
|
-int flags;
|
|
-struct sockaddr *from;
|
|
-int *fromlen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(buf);
|
|
- MAKE_WRITABLE(from);
|
|
- MAKE_WRITABLE(fromlen);
|
|
- result = syscall(SYS_recvfrom, s, buf, len, flags, from, fromlen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int recvmsg(s, msg, flags) /* ok */
|
|
int s;
|
|
struct msghdr msg[];
|
|
@@ -940,7 +910,7 @@
|
|
}
|
|
|
|
int rmdir(path) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -950,44 +920,40 @@
|
|
return result;
|
|
}
|
|
|
|
-int select(nfds, readfds, writefds, exceptfds, timeout) /* ok */
|
|
-int nfds;
|
|
-fd_set *readfds;
|
|
-fd_set *writefds;
|
|
-fd_set *exceptfds;
|
|
-struct timeval *timeout;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(readfds);
|
|
- MAKE_WRITABLE(writefds);
|
|
- MAKE_WRITABLE(exceptfds);
|
|
- MAKE_READABLE(timeout);
|
|
- result = syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
+int
|
|
+#if __FreeBSD_version >= 300002
|
|
+semctl(int semid, int semnum, int cmd, ...)
|
|
+#else
|
|
+semctl(int semid, int semnum, int cmd, union semun arg)
|
|
+#endif
|
|
+{
|
|
+ int result;
|
|
+#if __FreeBSD_version >= 300002
|
|
+ union semun arg;
|
|
+ va_list ap;
|
|
|
|
-int semctl(semid, semnum, cmd, arg) /* ok ? */
|
|
-int semid, cmd;
|
|
-int semnum;
|
|
-union semun arg;
|
|
-{ int result;
|
|
+ va_start(ap, cmd);
|
|
+ arg = va_arg(ap, union semun);
|
|
+ va_end(ap);
|
|
+#endif
|
|
|
|
ENTER_CRITICAL;
|
|
switch (cmd) {
|
|
- case GETNCNT:
|
|
- case GETPID:
|
|
- case GETVAL:
|
|
- case GETALL:
|
|
- case GETZCNT:
|
|
+
|
|
+ case IPC_SET:
|
|
MAKE_READABLE(arg.buf);
|
|
break;
|
|
+
|
|
case SETALL:
|
|
- case SETVAL:
|
|
+ MAKE_READABLE(arg.array);
|
|
+ break;
|
|
+
|
|
+ case IPC_STAT:
|
|
MAKE_WRITABLE(arg.buf);
|
|
break;
|
|
- default:
|
|
+
|
|
+ case GETALL:
|
|
+ MAKE_WRITABLE(arg.array);
|
|
break;
|
|
}
|
|
result = syscall(SYS_semsys, 0, semid, semnum, cmd, arg);
|
|
@@ -1012,24 +978,6 @@
|
|
return result;
|
|
}
|
|
|
|
-int send(s, msg, len, flags) /* ok */
|
|
-int s;
|
|
-const void *msg;
|
|
-#if __FreeBSD__ >=2
|
|
-size_t len;
|
|
-#else
|
|
-int len;
|
|
-#endif
|
|
-int flags;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(msg);
|
|
- result = syscall(SYS_sendto, s, msg, len, flags, NULL, 0);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int sendmsg(s, msg, flags) /* ok */
|
|
int s;
|
|
const struct msghdr msg[];
|
|
@@ -1051,29 +999,8 @@
|
|
return result;
|
|
}
|
|
|
|
-int sendto(s, msg, len, flags, to, tolen) /* ok */
|
|
-int s;
|
|
-const void *msg;
|
|
-#if __FreeBSD__ >=2
|
|
-size_t len;
|
|
-#else
|
|
-int len;
|
|
-#endif
|
|
-int flags;
|
|
-const struct sockaddr *to;
|
|
-int tolen;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(msg);
|
|
- MAKE_READABLE(to);
|
|
- result = syscall(SYS_sendto, s, msg, len, flags, to, tolen);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
int setdomainname(name, namelen) /* ok */
|
|
-char *name;
|
|
+const char *name;
|
|
int namelen;
|
|
{ int result;
|
|
|
|
@@ -1086,7 +1013,7 @@
|
|
|
|
int setgroups(ngroups, gidset) /* ok */
|
|
int ngroups;
|
|
-int *gidset;
|
|
+const gid_t *gidset;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -1097,7 +1024,7 @@
|
|
}
|
|
|
|
int sethostname(name, namelen) /* ok */
|
|
-char *name;
|
|
+const char *name;
|
|
int namelen;
|
|
{ int result;
|
|
#if __FreeBSD__ >= 2
|
|
@@ -1213,20 +1140,20 @@
|
|
return result;
|
|
}
|
|
|
|
-/* not implemented
|
|
-int sigpending(set)
|
|
-sigset_t *set;
|
|
+int sigaction(sig, act, oact)
|
|
+int sig;
|
|
+const struct sigaction *act;
|
|
+struct sigaction *oact;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
- MAKE_WRITABLE(set);
|
|
- result = syscall(SYS_sigpending, set);
|
|
+ MAKE_READABLE(act);
|
|
+ MAKE_WRITABLE(oact);
|
|
+ result = syscall(SYS_sigaction, sig, act, oact);
|
|
EXIT_CRITICAL;
|
|
return result;
|
|
}
|
|
-*/
|
|
|
|
-#if __FreeBSD__ >= 2
|
|
int sigaltstack(ss, oss) /* ok */
|
|
const struct sigaltstack *ss;
|
|
struct sigaltstack *oss;
|
|
@@ -1239,20 +1166,6 @@
|
|
EXIT_CRITICAL;
|
|
return result;
|
|
}
|
|
-#else
|
|
-int sigstack(ss, oss) /* ok */
|
|
-const struct sigstack *ss;
|
|
-struct sigstack *oss;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(ss);
|
|
- MAKE_WRITABLE(oss);
|
|
- result = syscall(SYS_sigstack, ss, oss);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-#endif
|
|
|
|
int socketpair(d, type, protocol, sv) /* ok */
|
|
int d, type, protocol;
|
|
@@ -1267,7 +1180,7 @@
|
|
}
|
|
|
|
int stat(path, buf) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
struct stat *buf;
|
|
{ int result;
|
|
|
|
@@ -1280,7 +1193,7 @@
|
|
}
|
|
|
|
int swapon(special) /* ok */
|
|
-char *special;
|
|
+const char *special;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -1291,8 +1204,8 @@
|
|
}
|
|
|
|
int symlink(name1, name2) /* ok */
|
|
-char *name1;
|
|
-char *name2;
|
|
+const char *name1;
|
|
+const char *name2;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -1304,14 +1217,14 @@
|
|
}
|
|
|
|
int truncate(path, length) /* ok */
|
|
-char *path;
|
|
-long length;
|
|
+const char *path;
|
|
+off_t length;
|
|
{ int result;
|
|
- off_t len = (off_t)length;
|
|
|
|
ENTER_CRITICAL;
|
|
MAKE_READABLE(path);
|
|
- result = syscall(SYS_truncate, path, len);
|
|
+ /* The casts below pad "path" out to a 64-bit value as required. */
|
|
+ result = __syscall(SYS_truncate, (u_quad_t) (u_int) path, length);
|
|
EXIT_CRITICAL;
|
|
return result;
|
|
}
|
|
@@ -1328,7 +1241,7 @@
|
|
}
|
|
|
|
int unlink(path) /* ok */
|
|
-char *path;
|
|
+const char *path;
|
|
{ int result;
|
|
|
|
ENTER_CRITICAL;
|
|
@@ -1414,19 +1327,6 @@
|
|
ENTER_CRITICAL;
|
|
MAKE_WRITABLE(status);
|
|
result = syscall(SYS_wait4, pid, status, options, NULL);
|
|
- EXIT_CRITICAL;
|
|
- return result;
|
|
-}
|
|
-
|
|
-int write(fd, buf, nbytes) /* ok */
|
|
-int fd;
|
|
-char *buf;
|
|
-int nbytes;
|
|
-{ int result;
|
|
-
|
|
- ENTER_CRITICAL;
|
|
- MAKE_READABLE(buf);
|
|
- result = syscall(SYS_write, fd, buf, nbytes);
|
|
EXIT_CRITICAL;
|
|
return result;
|
|
}
|