rbb 99/05/27 12:02:45
Modified: apr configure.in
apr/file_io/beos dir.c fileacc.c filedup.c fileio.h
filestat.c open.c pipe.c readwrite.c seek.c
apr/file_io/unix open.c
apr/lib apr_pools.c
apr/locks/beos crossproc.c intraproc.c locks.c locks.h
apr/misc/beos start.c
apr/network_io/beos networkio.h poll.c sendrecv.c sockets.c
sockopt.c
apr/test Makefile.in testfile.c testproc.c
apr/threadproc/beos Makefile.in proc.c signals.c thread.c
threadcancel.c threadpriv.c threadproc.h
apr/time/beos access.c atime.h time.c
Log:
BeOS is up to date with UNIX once again.
Submitted by: David Reid
Revision Changes Path
1.16 +1 -1 apache-apr/apr/configure.in
Index: configure.in
===================================================================
RCS file: /home/cvs/apache-apr/apr/configure.in,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- configure.in 1999/05/27 15:28:08 1.15
+++ configure.in 1999/05/27 19:02:19 1.16
@@ -21,7 +21,7 @@
if (echo "$SYS_SW" | grep -qi 'Linux'); then
SYS_KV=`echo $SYS_REL | awk -F. '{printf "%s%s", $1, $2}'`
- LDLIBS="$LDLIBS -ldl"
+ LDLIBS="$LDLIBS -ldl -lpthread"
CFLAGS="$CFLAGS -DUSE_PTHREAD_SERIALIZE -DUSE_FCNTL_SERIALIZE"
PLATFORM="-DLINUX=$SYS_KV"
OSDIR="unix"
1.5 +94 -91 apache-apr/apr/file_io/beos/dir.c
Index: dir.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/dir.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- dir.c 1999/05/24 02:03:56 1.4
+++ dir.c 1999/05/27 19:02:20 1.5
@@ -68,36 +68,37 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
-struct dir_t *ap_opendir(ap_context_t *cont, const char *dirname)
+ap_status_t ap_opendir(ap_context_t *cont, const char *dirname, ap_dir_t **
new)
{
- struct dir_t *thedir = (ap_dir_t
*)ap_palloc(cont->pool,sizeof(ap_dir_t));
+ (*new) = (struct dir_t *)ap_palloc(cont->pool,sizeof(struct dir_t));
- thedir->dirname = strdup(dirname);
- thedir->dirstruct = opendir(dirname);
- thedir->entry = NULL;
+ (*new)->cntxt = cont;
+ (*new)->dirname = strdup(dirname);
+ (*new)->dirstruct = opendir(dirname);
+ (*new)->entry = NULL;
- if (thedir->dirstruct == NULL) {
- free(thedir);
- return NULL;
+ if ((*new)->dirstruct == NULL) {
+ (*new)->dirstruct = NULL;
+ return errno;
}
else {
- ap_register_cleanup(cont->pool, (void*)thedir, dir_cleanup, NULL);
- return thedir;
+ ap_register_cleanup(cont->pool, (void*)(*new), dir_cleanup, NULL);
+ return APR_SUCCESS;
}
}
ap_status_t ap_closedir(struct dir_t *thedir)
{
if (dir_cleanup(thedir) == APR_SUCCESS) {
- ap_kill_cleanup(cont->pool, thedir, dir_cleanup);
+ ap_kill_cleanup(thedir->cntxt->pool, thedir, dir_cleanup);
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
@@ -105,7 +106,7 @@
{
thedir->entry = readdir(thedir->dirstruct);
if (thedir->entry == NULL){
- return APR_FAILURE;
+ return errno;
}
return APR_SUCCESS;
}
@@ -122,7 +123,7 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
@@ -132,86 +133,88 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
-ap_ssize_t ap_dir_entry_size(ap_context_t *context, ap_dir_t *thedir)
-{
- struct stat filestat;
+ap_status_t ap_dir_entry_size(struct dir_t *thedir, ap_ssize_t *size)
+{
+ struct stat filestat;
char *fname = NULL;
-
- if (thedir->entry == NULL) {
- errno = ENOFILE;
- return -1;
- }
- fname = ap_pstrcat(context->pool, thedir->dirname, "/",
- thedir->entry->d_name, NULL);
- if (stat(fname, &filestat) == -1) {
- errno = ENOSTAT;
- return -1;
- }
+
+ if (thedir->entry == NULL) {
+ *size = -1;
+ return APR_ENOFILE;
+ }
+ fname = ap_pstrcat(thedir->cntxt->pool, thedir->dirname, "/",
+ thedir->entry->d_name, NULL);
+ if (stat(fname, &filestat) == -1) {
+ *size = -1;
+ return APR_ENOSTAT;
+ }
- return filestat.st_size;
-}
-
-time_t ap_dir_entry_mtime(ap_context_t *context, ap_dir_t *thedir)
-{
- struct stat filestat;
- char *fname = NULL;
-
- if (thedir->entry == NULL) {
- errno = ENOFILE;
- return -1;
- }
-
- fname = ap_pstrcat(context->pool, thedir->dirname, "/",
- thedir->entry->d_name, NULL);
- if (stat(fname, &filestat) == -1) {
- errno = ENOSTAT;
- return -1;
- }
+ *size = filestat.st_size;
+ return APR_SUCCESS;
+}
+
+ap_status_t ap_dir_entry_mtime(struct dir_t *thedir, time_t *time)
+{
+ struct stat filestat;
+ char *fname = NULL;
+
+ if (thedir->entry == NULL) {
+ *time = -1;
+ return APR_ENOFILE;
+ }
+
+ fname = ap_pstrcat(thedir->cntxt->pool, thedir->dirname, "/",
+ thedir->entry->d_name, NULL);
+ if (stat(fname, &filestat) == -1) {
+ *time = -1;
+ return APR_ENOSTAT;
+ }
- return filestat.st_mtime;
-}
-
-ap_filetype_e ap_dir_entry_ftype(ap_context_t *context, ap_dir_t *thedir)
-{
- struct stat filestat;
- char *fname = NULL;
-
- if (thedir->entry == NULL) {
- errno = ENOFILE;
- return -1;
- }
-
- fname = ap_pstrcat(context->pool, thedir->dirname, "/",
- thedir->entry->d_name, NULL);
- if (stat(fname, &filestat) == -1) {
- errno = ENOSTAT;
- return -1;
- }
-
- if (S_ISREG(filestat.st_mode))
- return APR_REG;
- if (S_ISDIR(filestat.st_mode))
- return APR_DIR;
- if (S_ISCHR(filestat.st_mode))
- return APR_CHR;
- if (S_ISBLK(filestat.st_mode))
- return APR_BLK;
- if (S_ISFIFO(filestat.st_mode))
- return APR_PIPE;
- if (S_ISLNK(filestat.st_mode))
- return APR_LNK;
- /*if (S_ISSOCK(filestat.st_mode))
- return APR_SOCK;*/
-}
-
-char * ap_get_dir_filename(ap_context_t * context, ap_dir_t *thedir)
-{
- char *name = (char *)ap_palloc(context->pool,
strlen(thedir->entry->d_name));
- name = ap_pstrdup(context->pool, thedir->entry->d_name);
- return name;
-}
+ *time = filestat.st_mtime;
+ return APR_SUCCESS;
+}
+ap_status_t ap_dir_entry_ftype(struct dir_t *thedir, ap_filetype_e *type)
+{
+ struct stat filestat;
+ char *fname = NULL;
+
+ if (thedir->entry == NULL) {
+ *type = APR_REG;
+ return APR_ENOFILE;
+ }
+
+ fname = ap_pstrcat(thedir->cntxt->pool, thedir->dirname, "/",
+ thedir->entry->d_name, NULL);
+ if (stat(fname, &filestat) == -1) {
+ *type = APR_REG;
+ return APR_ENOSTAT;
+ }
+
+ if (S_ISREG(filestat.st_mode))
+ *type = APR_REG;
+ if (S_ISDIR(filestat.st_mode))
+ *type = APR_DIR;
+ if (S_ISCHR(filestat.st_mode))
+ *type = APR_CHR;
+ if (S_ISBLK(filestat.st_mode))
+ *type = APR_BLK;
+ if (S_ISFIFO(filestat.st_mode))
+ *type = APR_PIPE;
+ if (S_ISLNK(filestat.st_mode))
+ *type = APR_LNK;
+ /*if (S_ISSOCK(filestat.st_mode))
+ *type = APR_SOCK; */
+ return APR_SUCCESS;
+}
+
+ap_status_t ap_get_dir_filename(struct dir_t *thedir, char **new)
+{
+ (*new) = ap_pstrdup(thedir->cntxt->pool, thedir->entry->d_name);
+ return APR_SUCCESS;
+}
+
1.5 +66 -3 apache-apr/apr/file_io/beos/fileacc.c
Index: fileacc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/fileacc.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- fileacc.c 1999/05/24 02:03:56 1.4
+++ fileacc.c 1999/05/27 19:02:21 1.5
@@ -61,13 +61,15 @@
/* A file to put ALL of the accessor functions for struct file_t types. */
-char * ap_get_filename(struct file_t *thefile)
+ap_status_t ap_get_filename(struct file_t *thefile, char **new)
{
if (thefile != NULL) {
- return thefile->fname;
+ *new = (char*)ap_pstrdup(thefile->cntxt->pool, thefile->fname);
+ return APR_SUCCESS;
}
else {
- return NULL;
+ *new = NULL;
+ return APR_ENOFILE;
}
}
@@ -98,4 +100,65 @@
return rv;
}
+
+
+ap_status_t ap_get_filesize(struct file_t *file, ap_ssize_t *size)
+{
+ if (file != NULL) {
+ *size = file->size;
+ return APR_SUCCESS;
+ }
+ else {
+ *size = -1;
+ return APR_ENOFILE;
+ }
+}
+
+ap_status_t ap_get_fileperms(struct file_t *file, ap_fileperms_t *perm)
+{
+ if (file != NULL) {
+ *perm = file->protection;
+ return APR_SUCCESS;
+ }
+ else {
+ *perm = -1;
+ return APR_ENOFILE;
+ }
+}
+
+ap_status_t ap_get_fileatime(struct file_t *file, time_t *time)
+{
+ if (file != NULL) {
+ *time = file->atime;
+ return APR_SUCCESS;
+ }
+ else {
+ *time = -1;
+ return APR_ENOFILE;
+ }
+}
+
+ap_status_t ap_get_filectime(struct file_t *file, time_t *time)
+{
+ if (file != NULL) {
+ *time = file->ctime;
+ return APR_SUCCESS;
+ }
+ else {
+ *time = -1;
+ return APR_ENOFILE;
+ }
+}
+
+ap_status_t ap_get_filemtime(struct file_t *file, time_t *time)
+{
+ if (file != NULL) {
+ *time = file->mtime;
+ return APR_SUCCESS;
+ }
+ else {
+ *time = -1;
+ return APR_ENOFILE;
+ }
+}
1.5 +19 -18 apache-apr/apr/file_io/beos/filedup.c
Index: filedup.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/filedup.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- filedup.c 1999/05/24 02:03:56 1.4
+++ filedup.c 1999/05/27 19:02:21 1.5
@@ -58,24 +58,25 @@
#include "apr_file_io.h"
#include "apr_general.h"
-struct file_t *ap_dupfile(struct file_t *old_file)
+ap_status_t ap_dupfile(struct file_t *old_file, struct file_t **new_file)
{
- struct file_t * new_file = (struct file_t
*)ap_palloc(cont->pool,sizeof(struct file_t));
+ (*new_file) = (struct file_t *)ap_palloc(old_file->cntxt->pool,
+ sizeof(struct file_t));
- if (new_file == NULL) {
- errno = ENOMEM;
- return NULL;
- }
- old_file->filedes = new_file->filedes;
- old_file->fname = new_file->fname;
- old_file->buffered = new_file->buffered;
- old_file->protection = new_file->protection;
- old_file->user = new_file->user;
- old_file->group = new_file->group;
- old_file->size = new_file->size;
- old_file->atime = new_file->atime;
- old_file->mtime = new_file->mtime;
- old_file->ctime = new_file->ctime;
- ap_register_cleanup(cont->pool, (void *)new_file, file_cleanup, NULL);
+ if ((*new_file) == NULL) {
+ return APR_ENOMEM;
+ }
+ (*new_file)->cntxt = old_file->cntxt;
+ (*new_file)->filedes = dup(old_file->filedes);
+ (*new_file)->fname = (char*)ap_pstrdup(old_file->cntxt->pool,
old_file->fname);
+ (*new_file)->buffered = old_file->buffered;
+ (*new_file)->protection = old_file->protection;
+ (*new_file)->user = old_file->user;
+ (*new_file)->group = old_file->group;
+ (*new_file)->size = old_file->size;
+ (*new_file)->atime = old_file->atime;
+ (*new_file)->mtime = old_file->mtime;
+ (*new_file)->ctime = old_file->ctime;
+ ap_register_cleanup((*new_file)->cntxt->pool, (void *)(*new_file),
file_cleanup, NULL);
+ return APR_SUCCESS;
}
-
1.3 +3 -1 apache-apr/apr/file_io/beos/fileio.h
Index: fileio.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/fileio.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- fileio.h 1999/05/17 18:31:30 1.2
+++ fileio.h 1999/05/27 19:02:21 1.3
@@ -69,6 +69,7 @@
#define ENOFILE B_ENTRY_NOT_FOUND
struct file_t {
+ ap_context_t *cntxt;
int filedes;
char * fname;
int buffered;
@@ -82,13 +83,14 @@
};
struct dir_t {
+ ap_context_t *cntxt;
char *dirname;
DIR *dirstruct;
struct dirent *entry;
};
-typedef mode_t fileperms_t;
struct iovec_t {
+ ap_context_t *cntxt;
struct iovec *iovec;
};
1.5 +3 -5 apache-apr/apr/file_io/beos/filestat.c
Index: filestat.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/filestat.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- filestat.c 1999/05/24 02:03:56 1.4
+++ filestat.c 1999/05/27 19:02:22 1.5
@@ -61,7 +61,7 @@
ap_status_t ap_getfileinfo(struct file_t *thefile)
{
struct stat info;
- int rv = stat(fname, &info);
+ int rv = stat(thefile->fname, &info);
if (rv == 0) {
thefile->protection = info.st_mode;
@@ -74,8 +74,7 @@
return APR_SUCCESS;
}
else {
- errno = ENOSTAT;
- return APR_FAILURE;
+ return APR_ENOSTAT;
}
}
@@ -95,7 +94,6 @@
return APR_SUCCESS;
}
else {
- errno = ENOSTAT;
- return APR_FAILURE;
+ return APR_ENOSTAT;
}
}
1.6 +31 -27 apache-apr/apr/file_io/beos/open.c
Index: open.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/open.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- open.c 1999/05/24 02:03:57 1.5
+++ open.c 1999/05/27 19:02:22 1.6
@@ -75,17 +75,21 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
/* Are there any error conditions other than EINTR or EBADF? */
}
}
-ap_file_t *ap_open(ap_context_t *cont, char *fname, ap_int32_t flag,
ap_fileperms_t mode)
+ap_status_t ap_open(ap_context_t *cont, char *fname, ap_int32_t flag,
ap_fileperms_t perm, struct file_t **new)
{
int oflags = 0;
- struct file_t *dafile = (struct file_t *)ap_palloc(cont->pool,
sizeof(struct file_t));
struct stat info;
+ mode_t mode = get_fileperms(perm);
+ (*new) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
+
+ (*new)->cntxt = cont;
+
if ((flag & APR_READ) && (flag & APR_WRITE)) {
oflags = B_READ_WRITE;
}
@@ -96,11 +100,14 @@
oflags = B_WRITE_ONLY;
}
else {
- errno = EACCES;
- free (dafile);
- return NULL;
+ (*new)->filedes = -1;
+ return APR_EACCES;
}
- dafile->fname = (char*)strdup(fname);
+ if (flag & APR_BUFFERED) {
+ (*new)->buffered = TRUE;
+ }
+
+ (*new)->fname = (char*)strdup(fname);
if (flag & APR_CREATE) {
oflags |= B_CREATE_FILE;
if (flag & APR_EXCL) {
@@ -108,10 +115,8 @@
}
}
if ((flag & APR_EXCL) && !(flag & APR_CREATE)) {
- errno = EACCES;
- free(dafile->fname);
- free (dafile);
- return NULL;
+ (*new)->filedes = -1;
+ return APR_EACCES;
}
if (flag & APR_APPEND) {
@@ -120,33 +125,32 @@
if (flag & APR_TRUNCATE) {
oflags |= B_ERASE_FILE;
}
- dafile->filedes = open(fname, oflags, mode);
-
- if (dafile->filedes < 0) {
- dafile->filedes = -1;
- return NULL;
- }
- if (ap_updatefileinfo(cont, dafile) == APR_SUCCESS) {
- ap_register_cleanup(cont->pool, (void *)dafile, file_cleanup,
NULL);
- return dafile;
+ (*new)->filedes = open(fname, oflags, mode);
+
+ if ((*new)->filedes < 0) {
+ (*new)->filedes = -1;
+ return errno;
+ }
+ if (ap_updatefileinfo(*new) == APR_SUCCESS) {
+ ap_register_cleanup((*new)->cntxt->pool, (void *)(*new),
+ file_cleanup, NULL);
+ return APR_SUCCESS;
}
else {
- errno = ENOSTAT;
- free(dafile->fname);
- free (dafile);
- return NULL;
+ (*new)->filedes = -1;
+ return APR_ENOSTAT;
}
}
ap_status_t ap_close(struct file_t * file)
{
if (file_cleanup(file) == APR_SUCCESS) {
- ap_kill_cleanup(cont->pool, file, file_cleanup);
+ ap_kill_cleanup(file->cntxt->pool, file, file_cleanup);
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
/* Are there any error conditions other than EINTR or EBADF? */
}
}
@@ -157,6 +161,6 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
1.3 +17 -13 apache-apr/apr/file_io/beos/pipe.c
Index: pipe.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/pipe.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- pipe.c 1999/05/24 02:03:57 1.2
+++ pipe.c 1999/05/27 19:02:22 1.3
@@ -62,30 +62,34 @@
#include "apr_file_io.h"
#include "apr_general.h"
-ap_status_t ap_create_pipe(struct file_t *out)
+ap_status_t ap_create_pipe(ap_context_t *cont, struct file_t **in, struct
file_t **out)
{
int filedes[2];
+
if (pipe(filedes) == -1) {
- return APR_FAILURE;
+ return errno;
}
- in->filedes = filedes[0];
- in->fname = strdup("PIPE");
+ (*in) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
+ (*in)->cntxt = cont;
+ (*in)->filedes = filedes[0];
+ (*in)->fname = (char*)ap_pstrdup(cont->pool, "PIPE");
- out->filedes = filedes[1];
- out->fname = strdup("PIPE");
+ (*out) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
+ (*out)->cntxt = cont;
+ (*out)->filedes = filedes[1];
+ (*out)->fname = (char*)ap_pstrdup(cont->pool, "PIPE");
return APR_SUCCESS;
}
-char *ap_create_namedpipe(ap_context_t *cont, char *dirpath, ap_fileperms_t
perm)
+ap_status_t ap_create_namedpipe(ap_context_t *cont, char *dirpath,
ap_fileperms_t perm, char **new)
{
- char *tmp;
mode_t mode = get_fileperms(perm);
- tmp = tempnam(dirpath, NULL);
- if (mkfifo(tmp, mode) == -1) {
- free(tmp);
- return NULL;
+
+ *new = tempnam(dirpath, NULL);
+ if (mkfifo((*new), mode) == -1) {
+ return errno;
}
- return tmp;
+ return APR_SUCCESS;
}
1.6 +19 -14 apache-apr/apr/file_io/beos/readwrite.c
Index: readwrite.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/readwrite.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- readwrite.c 1999/05/24 02:03:57 1.5
+++ readwrite.c 1999/05/27 19:02:22 1.6
@@ -60,31 +60,32 @@
#include "apr_general.h"
#include "apr_errno.h"
-ap_ssize_t ap_read(struct file_t *thefile, void *buf, ap_ssize_t nbytes)
+ap_status_t ap_read(const struct file_t *thefile, void *buf, ap_ssize_t
*nbytes)
{
ap_size_t rv;
if (thefile->filedes < 0) {
- errno = EBADF;
- return -1;
+ *nbytes = -1;
+ return APR_EBADF;
}
- rv = read(thefile->filedes, buf, nbytes);
+ rv = read(thefile->filedes, buf, *nbytes);
- return rv;
+ *nbytes = rv;
+ return APR_SUCCESS;
}
-ap_ssize_t ap_write(struct file_t *thefile, void * buf, ap_ssize_t nbytes)
+ap_status_t ap_write(struct file_t *thefile, void * buf, ap_ssize_t *nbytes)
{
ap_size_t rv;
struct stat info;
if (thefile->filedes < 0) {
- errno = EBADF;
- return APR_FAILURE;
+ *nbytes = -1;
+ return APR_EBADF;
}
- rv = write(thefile->filedes, buf, nbytes);
+ rv = write(thefile->filedes, buf, *nbytes);
if (stat(thefile->fname, &info) == 0) {
thefile->size = info.st_size;
@@ -92,16 +93,20 @@
thefile->mtime = info.st_mtime;
thefile->ctime = info.st_ctime;
}
- return rv;
+
+ *nbytes = rv;
+ return APR_SUCCESS;
}
-ap_ssize_t ap_writev(struct iovec_t *vec, ap_ssize_t iocnt)
+ap_status_t ap_writev(struct file_t *thefile, const struct iovec_t *vec,
ap_ssize_t *iocnt)
{
ap_ssize_t bytes;
- if ((bytes = writev(thefile->filedes, vec->iovec, iocnt)) < 0){
- return APR_FAILURE;
+ if ((bytes = writev(thefile->filedes, vec->iovec, *iocnt)) < 0){
+ *iocnt = bytes;
+ return errno;
}
else {
- return bytes;
+ *iocnt = bytes;
+ return APR_SUCCESS;
}
}
1.5 +12 -2 apache-apr/apr/file_io/beos/seek.c
Index: seek.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/beos/seek.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- seek.c 1999/05/24 02:03:57 1.4
+++ seek.c 1999/05/27 19:02:23 1.5
@@ -58,7 +58,17 @@
#include "fileio.h"
#include "apr_file_io.h"
-ap_off_t ap_seek(struct file_t *thefile, ap_off_t offset, ap_seek_where_t
where)
+ap_status_t ap_seek(struct file_t *thefile, ap_seek_where_t where, ap_off_t
*offset)
{
- return lseek(thefile->filedes, offset, where);
+ ap_off_t rv;
+ rv = lseek(thefile->filedes, *offset, where);
+ if (rv == -1) {
+ *offset = -1;
+ return errno;
+ }
+ else {
+ *offset = rv;
+ return APR_SUCCESS;
+ }
+
}
1.25 +2 -1 apache-apr/apr/file_io/unix/open.c
Index: open.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/file_io/unix/open.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- open.c 1999/05/25 03:14:15 1.24
+++ open.c 1999/05/27 19:02:25 1.25
@@ -59,6 +59,7 @@
#include "apr_lib.h"
#include <errno.h>
#include <string.h>
+#include <stdio.h>
ap_status_t file_cleanup(void *thefile)
{
@@ -79,7 +80,7 @@
struct stat info;
mode_t mode = get_fileperms(perm);
- (*new) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
+ (*new) = (struct file_t *)ap_palloc(cont->pool, sizeof(struct file_t));
(*new)->cntxt = cont;
1.4 +0 -1 apache-apr/apr/lib/apr_pools.c
Index: apr_pools.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/lib/apr_pools.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- apr_pools.c 1999/05/10 17:46:21 1.3
+++ apr_pools.c 1999/05/27 19:02:29 1.4
@@ -1720,7 +1720,6 @@
ap_status_t (*child_cleanup) (void *))
{
struct cleanup *c;
-
c = (struct cleanup *) ap_palloc(p, sizeof(struct cleanup));
c->data = data;
c->plain_cleanup = plain_cleanup;
1.2 +16 -17 apache-apr/apr/locks/beos/crossproc.c
Index: crossproc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/locks/beos/crossproc.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- crossproc.c 1999/05/17 18:41:15 1.1
+++ crossproc.c 1999/05/27 19:02:31 1.2
@@ -57,61 +57,60 @@
#include "apr_general.h"
#include "locks.h"
-ap_status_t lock_inter_cleanup(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t lock_inter_cleanup(ap_lock_t *lock)
{
if (lock->curr_locked == 1) {
if (atomic_add(&lock->ben_interproc , -1) > 1){
release_sem (lock->sem_interproc);
- } else {
- return APR_FAILURE;
}
}
return APR_SUCCESS;
}
-ap_status_t create_inter_lock(ap_context_t *cont, ap_lock_t *new)
+ap_status_t create_inter_lock(ap_lock_t *new)
{
- new->sem_interproc = (sem_id)ap_palloc(cont->pool, sizeof(sem_id));
- new->ben_interproc = (int32)ap_palloc(cont->pool, sizeof(int32));
+ new->sem_interproc = (sem_id)ap_palloc(new->cntxt->pool, sizeof(sem_id));
+ new->ben_interproc = (int32)ap_palloc(new->cntxt->pool, sizeof(int32));
new->ben_interproc = 0;
new->sem_interproc = create_sem(0, "ap_intraproc");
if (new->sem_interproc < B_NO_ERROR){
- lock_inter_cleanup(cont, new);
- return APR_FAILURE;
+ lock_inter_cleanup(new);
+ return errno;
}
new->curr_locked == 0;
- ap_register_cleanup(cont->pool, (void *)new, lock_inter_cleanup, NULL);
+ ap_register_cleanup(new->cntxt->pool, (void *)new, lock_inter_cleanup,
NULL);
return APR_SUCCESS;
}
-ap_status_t lock_inter(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t lock_inter(ap_lock_t *lock)
{
if (atomic_add(&lock->ben_interproc, 1) > 0){
acquire_sem(lock->sem_interproc);
} else {
- return APR_FAILURE;
+ return errno;
}
lock->curr_locked == 1;
return APR_SUCCESS;
}
-ap_status_t unlock_inter(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t unlock_inter(ap_lock_t *lock)
{
if (atomic_add(&lock->ben_interproc, -1) > 1){
release_sem(lock->sem_interproc);
} else {
- return APR_FAILURE;
+ return errno;
}
lock->curr_locked == 0;
return APR_SUCCESS;
}
-ap_status_t destroy_inter_lock(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t destroy_inter_lock(ap_lock_t *lock)
{
- if (lock_inter_cleanup(cont, lock) == APR_SUCCESS) {
- ap_kill_cleanup(cont->pool, lock, lock_inter_cleanup);
+ ap_status_t stat;
+ if ((stat = lock_inter_cleanup(lock)) == APR_SUCCESS) {
+ ap_kill_cleanup(lock->cntxt->pool, lock, lock_inter_cleanup);
return APR_SUCCESS;
}
- return APR_FAILURE;
+ return stat;
}
1.2 +22 -17 apache-apr/apr/locks/beos/intraproc.c
Index: intraproc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/locks/beos/intraproc.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- intraproc.c 1999/05/17 18:41:16 1.1
+++ intraproc.c 1999/05/27 19:02:31 1.2
@@ -57,48 +57,52 @@
#include "apr_general.h"
#include "locks.h"
#include <kernel/OS.h>
+#include <stdio.h>
-ap_status_t lock_intra_cleanup(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t lock_intra_cleanup(ap_lock_t *lock)
{
+printf ("lock_intra_cleanup\n");
if (lock->curr_locked == 1) {
if (atomic_add(&lock->ben_intraproc , -1) > 1){
release_sem (lock->sem_intraproc);
} else {
- return APR_FAILURE;
+ return errno;
}
}
return APR_SUCCESS;
}
-ap_status_t create_intra_lock(ap_context_t *cont, ap_lock_t *new)
+ap_status_t create_intra_lock(struct lock_t *new)
{
- new->sem_intraproc = (sem_id)ap_palloc(cont->pool, sizeof(sem_id));
- new->ben_intraproc = (int32)ap_palloc(cont->pool, sizeof(int32));
+ int32 stat;
+ new->sem_intraproc = (sem_id)ap_palloc(new->cntxt->pool, sizeof(sem_id));
+ new->ben_intraproc = (int32)ap_palloc(new->cntxt->pool, sizeof(int32));
new->ben_intraproc = 0;
- new->sem_intraproc = create_sem(0, "ap_intraproc");
- if (new->sem_intraproc < B_NO_ERROR){
- lock_intra_cleanup(cont, new);
- return APR_FAILURE;
+ stat = create_sem(0, "ap_intraproc");
+ if (stat < B_NO_ERROR){
+ lock_intra_cleanup(new);
+ return stat;
}
+ new->sem_intraproc = stat;
new->curr_locked == 0;
- ap_register_cleanup(cont->pool, (void *)new, lock_intra_cleanup, NULL);
+ ap_register_cleanup(new->cntxt->pool, (void *)new, lock_intra_cleanup,
NULL);
return APR_SUCCESS;
}
-ap_status_t lock_intra(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t lock_intra(ap_lock_t *lock)
{
lock->curr_locked == 1;
if (atomic_add (&lock->ben_intraproc, 1) >0){
if (acquire_sem(lock->sem_intraproc) != B_NO_ERROR){
atomic_add(&lock->ben_intraproc,-1);
- return(APR_FAILURE);
+ return errno;
}
}
return APR_SUCCESS;
}
-ap_status_t unlock_intra(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t unlock_intra(ap_lock_t *lock)
{
if (atomic_add(&lock->ben_intraproc, -1) > 1){
release_sem(lock->sem_intraproc);
@@ -107,11 +111,12 @@
return APR_SUCCESS;
}
-ap_status_t destroy_intra_lock(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t destroy_intra_lock(ap_lock_t *lock)
{
- if (lock_intra_cleanup(cont, lock) == APR_SUCCESS) {
- ap_kill_cleanup(cont->pool, lock, lock_intra_cleanup);
+ ap_status_t stat;
+ if ((stat = lock_intra_cleanup(lock)) == APR_SUCCESS) {
+ ap_kill_cleanup(lock->cntxt->pool, lock, lock_intra_cleanup);
return APR_SUCCESS;
}
- return APR_FAILURE;
+ return stat;
}
1.2 +40 -25 apache-apr/apr/locks/beos/locks.c
Index: locks.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/locks/beos/locks.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- locks.c 1999/05/17 18:41:16 1.1
+++ locks.c 1999/05/27 19:02:31 1.2
@@ -57,69 +57,84 @@
#include "apr_general.h"
#include "locks.h"
#include <strings.h>
+#include <stdio.h>
-ap_lock_t *ap_create_lock(ap_context_t *cont, ap_locktype_e type, char
*fname)
+ap_status_t ap_create_lock(ap_context_t *cont, ap_locktype_e type, char
*fname, struct lock_t **lock)
{
- ap_lock_t *new;
-
- new = (ap_lock_t *)ap_palloc(cont->pool, sizeof(ap_lock_t));
-
+ struct lock_t *new;
+ ap_status_t stat;
+
+ new = (struct lock_t *)ap_palloc(cont->pool, sizeof(struct lock_t));
+ if (new == NULL){
+ return APR_ENOMEM;
+ }
+
+ new->cntxt = cont;
+ if (new->cntxt->pool == NULL){
+ printf ("null pool\n");
+ return APR_ENOMEM;
+ }
new->type = type;
new->fname = strdup(fname);
if (type != APR_CROSS_PROCESS) {
- if (create_intra_lock(cont, new) == APR_FAILURE) {
- return NULL;
+ if ((stat = create_intra_lock(new)) != APR_SUCCESS) {
+ return stat;
}
}
if (type != APR_INTRAPROCESS) {
- if (create_inter_lock(cont, new) == APR_FAILURE) {
- return NULL;
+ if ((stat = create_inter_lock(new)) != APR_SUCCESS) {
+ return stat;
}
}
- return new;
+ (*lock) = new;
+ return APR_SUCCESS;
}
-ap_status_t ap_lock(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t ap_lock(ap_lock_t *lock)
{
+ ap_status_t stat;
+
if (lock->type != APR_CROSS_PROCESS) {
- if (lock_intra(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = lock_intra(lock)) != APR_SUCCESS) {
+ return stat;
}
}
if (lock->type != APR_INTRAPROCESS) {
- if (lock_inter(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = lock_inter(lock)) != APR_SUCCESS) {
+ return stat;
}
}
return APR_SUCCESS;
}
-ap_status_t ap_unlock(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t ap_unlock(ap_lock_t *lock)
{
+ ap_status_t stat;
if (lock->type != APR_CROSS_PROCESS) {
- if (unlock_intra(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = unlock_intra(lock)) != APR_SUCCESS) {
+ return stat;
}
}
if (lock->type != APR_INTRAPROCESS) {
- if (unlock_inter(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = unlock_inter(lock)) != APR_SUCCESS) {
+ return stat;
}
}
return APR_SUCCESS;
}
-ap_status_t ap_destroy_lock(ap_context_t *cont, ap_lock_t *lock)
+ap_status_t ap_destroy_lock(ap_lock_t *lock)
{
+ ap_status_t stat;
if (lock->type != APR_CROSS_PROCESS) {
- if (destroy_intra_lock(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = destroy_intra_lock(lock)) != APR_SUCCESS) {
+ return stat;
}
}
if (lock->type != APR_INTRAPROCESS) {
- if (destroy_inter_lock(cont, lock) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = destroy_inter_lock(lock)) != APR_SUCCESS) {
+ return stat;
}
}
return APR_SUCCESS;
1.2 +1 -0 apache-apr/apr/locks/beos/locks.h
Index: locks.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/locks/beos/locks.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- locks.h 1999/05/17 18:41:16 1.1
+++ locks.h 1999/05/27 19:02:32 1.2
@@ -60,6 +60,7 @@
#include "apr_file_io.h"
struct lock_t {
+ ap_context_t *cntxt;
ap_locktype_e type;
int curr_locked;
char *fname;
1.2 +35 -37 apache-apr/apr/misc/beos/start.c
Index: start.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/misc/beos/start.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- start.c 1999/05/17 18:43:35 1.1
+++ start.c 1999/05/27 19:02:33 1.2
@@ -62,60 +62,58 @@
#include <errno.h>
#include <string.h>
-ap_context_t *ap_initialize(void *data)
+ap_status_t ap_create_context(ap_context_t *cont, void *data, ap_context_t
**newcont)
{
ap_context_t *new;
ap_pool_t *pool;
- pool = ap_init_alloc();
-
+ if (cont) {
+ pool = ap_make_sub_pool(cont->pool);
+ }
+ else {
+ pool = ap_init_alloc();;
+ }
+
if (pool == NULL) {
- errno = ENOPOOL;
- return NULL;
+ return APR_ENOPOOL;
}
new = (ap_context_t *)ap_palloc(pool, sizeof(ap_context_t));
new->pool = pool;
- new->prog_data = data;
- new->signal_safe = 0;
- new->cancel_safe = 0;
-
- return new;
+ if (data == NULL && cont) {
+ new->prog_data = cont->prog_data;
+ }
+ else {
+ new->prog_data = data;
+ }
+ if (cont) {
+ new->signal_safe = cont->signal_safe;
+ new->cancel_safe = cont->cancel_safe;
+ }
+ else {
+ new->signal_safe = 0;
+ new->cancel_safe = 0;
+ }
+
+ *newcont = new;
+ return APR_SUCCESS;
}
ap_status_t ap_set_signal_safe(ap_context_t *cont, ap_int16_t safe)
{
- cont->signal_safe = safe;
- return APR_SUCCESS;
+ if (cont) {
+ cont->signal_safe = safe;
+ return APR_SUCCESS;
+ }
+ return APR_ENOCONT;
}
ap_status_t ap_set_cancel_safe(ap_context_t *cont, ap_int16_t safe)
{
- cont->cancel_safe = safe;
- return APR_SUCCESS;
-}
-
-ap_context_t *ap_create_sub_context(ap_context_t *cont, void *data)
-{
- ap_context_t *new;
- ap_pool_t *pool;
-
- pool = ap_make_sub_pool(cont->pool);
- if (pool == NULL) {
- errno = ENOPOOL;
- return NULL;
- }
- new = (ap_context_t *)ap_palloc(pool, sizeof(ap_context_t));
- new->pool = pool;
- if (data == NULL) {
- cont->prog_data = cont->prog_data;
+ if (cont) {
+ cont->cancel_safe = safe;
+ return APR_SUCCESS;
}
- else {
- cont->prog_data = data;
- }
- cont->signal_safe = cont->signal_safe;
- cont->cancel_safe = cont->cancel_safe;
-
- return new;
+ return APR_ENOCONT;
}
ap_status_t ap_destroy_context(ap_context_t *cont)
1.3 +2 -0 apache-apr/apr/network_io/beos/networkio.h
Index: networkio.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/beos/networkio.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- networkio.h 1999/05/17 18:37:43 1.2
+++ networkio.h 1999/05/27 19:02:34 1.3
@@ -68,6 +68,7 @@
#define POLLNVAL 32
struct socket_t {
+ ap_context_t *cntxt;
int socketdes;
char *remote_hostname;
struct sockaddr_in * addr;
@@ -75,6 +76,7 @@
};
struct pollfd_t {
+ ap_context_t *cntxt;
struct socket_t *sock;
int16 events;
int16 revents;
1.3 +47 -25 apache-apr/apr/network_io/beos/poll.c
Index: poll.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/beos/poll.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- poll.c 1999/05/24 02:04:05 1.2
+++ poll.c 1999/05/27 19:02:34 1.3
@@ -54,8 +54,6 @@
*/
-#include <errno.h>
-#include <stdio.h>
#include "networkio.h"
#include "apr_network_io.h"
#include "networkio.h"
@@ -66,11 +64,14 @@
/* uses select. However, select on beos isn't that hot either, so */
/* until R5 we have to live with a less than perfect implementation */
-struct pollfd_t *ap_setup_poll(ap_context_t *context, ap_int32_t num)
+ap_status_t ap_setup_poll(ap_context_t *cont, ap_int32_t num, struct
pollfd_t **new)
{
- struct pollfd_t *new;
- new = (struct pollfd_t *)ap_palloc(context->pool, sizeof(struct
pollfd_t) * num);
- return new;
+ (*new) = (struct pollfd_t *)ap_palloc(cont->pool, sizeof(struct
pollfd_t) * num);
+ if ((*new) == NULL) {
+ return APR_ENOMEM;
+ }
+ (*new)->cntxt = cont;
+ return APR_SUCCESS;
}
ap_int16_t get_event(ap_int16_t event)
@@ -92,37 +93,57 @@
return rv;
}
+
+ap_int16_t get_revent(ap_int16_t event)
+{
+ ap_int16_t rv = 0;
+
+ if (event & POLLIN)
+ rv |= APR_POLLIN;
+ if (event & POLLPRI)
+ rv |= APR_POLLPRI;
+ if (event & POLLOUT)
+ rv |= APR_POLLOUT;
+ if (event & POLLERR)
+ rv |= APR_POLLERR;
+ if (event & POLLHUP)
+ rv |= APR_POLLHUP;
+ if (event & POLLNVAL)
+ rv |= APR_POLLNVAL;
+
+ return rv;
+}
-void ap_add_poll_socket(struct pollfd_t *aprset,
+ap_status_t ap_add_poll_socket(struct pollfd_t *aprset,
struct socket_t *sock, ap_int16_t event,
ap_int32_t pos)
{
aprset[pos].sock = sock;
- aprset[pos].events = get_event(event);
+ aprset[pos].events = get_event(event);
+ return APR_SUCCESS;
}
-ap_int32_t ap_poll(struct pollfd_t *aprset, ap_int32_t nsds, ap_int32_t
timeout)
+ap_status_t ap_poll(struct pollfd_t *aprset, ap_int32_t *nsds, ap_int32_t
timeout)
{
int i;
- int rv,maxfd;
+ int rv = 0, maxfd = 0;
uint32 starttime;
char test = 'T';
struct timeval tv;
fd_set rd;
struct beos_pollfd_t *pollset;
- pollset = (struct beos_pollfd_t *)ap_palloc(cont->pool, sizeof(struct
beos_pollfd_t *) * nsds);;
+ pollset = (struct beos_pollfd_t *)ap_palloc(aprset->cntxt->pool,
sizeof(struct beos_pollfd_t *) * *nsds);;
FD_ZERO(&rd);
/* try to build the fd_set mask for the read sockets... */
- for (i = 0; i < nsds; i++) {
+ for (i = 0; i < *nsds; i++) {
pollset[i].fd = aprset[i].sock->socketdes;
pollset[i].events = aprset[i].events;
if (pollset[i].fd > maxfd)
maxfd=pollset[i].fd;
if (aprset[i].events & POLLIN) {
- printf ("Setting socket %d to POLLIN - maxfd is
%d...\n",pollset[i].fd, maxfd);
FD_SET(pollset[i].fd, &rd);
}
}
@@ -140,7 +161,6 @@
/* if rv == -1 then it's an error */
/* if the errno == EINTR then we need to go again... */
if (rv == -1 && errno == EINTR){
- printf ("EINTR\n");
if (timeout == -1){ /* i.e. no timeout */
goto tryselectagain;
} else {
@@ -163,20 +183,12 @@
if (rv >= 0){
/* i.e. we have a read socket to set the revents for */
rv = 0; /* we reset for an independant check ! */
- for (i = 0; i < nsds; i++){
+ for (i = 0; i < *nsds; i++){
int ret = 0;
- printf ("Looking at pollset %d for ",i);
- if (pollset[i].events & POLLIN)
- printf ("POLLIN");
- if (pollset[i].events & POLLOUT)
- printf ("POLLOUT");
- printf ("\n");
if ((pollset[i].events & POLLIN) && FD_ISSET(pollset[i].fd,
&rd)){
- printf ("socket %d is OK to read from.\n",
pollset[i].fd);
ret |= POLLIN;
}
if (pollset[i].events & POLLOUT) {
- printf ("Trying POLLOUT for %d...\n",i);
/* we asked if we could send... */
if (send(pollset[i].fd, &test, 0, 0)!=0){
if (errno == EWOULDBLOCK){
@@ -186,7 +198,6 @@
goto tryselectagain;
} else {
/* an error has occurred... */
- perror("********* POLLOUT in poll");
ret |= POLLERR;
}
} else {
@@ -205,5 +216,16 @@
if (rv == 0 && ((real_time_clock() - starttime) < timeout))
goto tryselectagain;
- return rv;
+ (*nsds) = rv;
+ if ((*nsds) < 0) {
+ return errno;
+ }
+ return APR_SUCCESS;
}
+
+ap_status_t ap_get_revents(struct pollfd_t *aprset, ap_int32_t pos,
ap_int16_t *event)
+{
+ (*event) = aprset[pos].revents;
+ return APR_SUCCESS;
+}
+
1.4 +19 -12 apache-apr/apr/network_io/beos/sendrecv.c
Index: sendrecv.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/beos/sendrecv.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- sendrecv.c 1999/05/17 18:37:44 1.3
+++ sendrecv.c 1999/05/27 19:02:35 1.4
@@ -63,12 +63,13 @@
#include "apr_general.h"
#include "apr_network_io.h"
-ap_ssize_t ap_send(ap_context_t *cont, ap_socket_t *sock, const char *buf,
int len, time_t sec)
+ap_status_t ap_send(struct socket_t *sock, const char *buf, ap_ssize_t *len,
time_t sec)
{
- ap_ssize_t rv;
-
+ ssize_t rv;
+ int sendlen = *len;
+
do {
- rv = send(sock->socketdes, buf, len,0);
+ rv = send(sock->socketdes, buf, sendlen,0);
} while (rv == -1 && errno == EINTR);
if (rv == -1 && errno == EAGAIN && sec > 0) {
@@ -86,22 +87,26 @@
} while (srv == -1 && errno == EINTR);
if (srv < 1) {
- return (ap_ssize_t) -1;
+ (*len) = -1;
+ return errno;
}
else {
do {
- rv = send(sock->socketdes, buf, len,0);
+ rv = send(sock->socketdes, buf, sendlen,0);
} while (rv == -1 && errno == EINTR);
}
}
- return (ap_ssize_t) rv;
+ (*len) = rv;
+ return APR_SUCCESS;
}
-ap_ssize_t ap_recv(ap_context_t *cont, ap_socket_t *sock, char *buf, int
len, time_t sec)
+ap_status_t ap_recv(struct socket_t *sock, char *buf, ap_ssize_t *len,
time_t sec)
{
ap_ssize_t rv;
+ int recvlen = *len;
+
do {
- rv = recv(sock->socketdes, buf, len,0);
+ rv = recv(sock->socketdes, buf, recvlen,0);
} while (rv == -1 && errno == EINTR);
if (rv == -1 && errno == EAGAIN && sec > 0) {
@@ -119,14 +124,16 @@
} while (srv == -1 && errno == EINTR);
if (srv < 1) {
- return (ap_ssize_t) -1;
+ (*len) = -1;
+ return errno;
}
else {
do {
- rv = recv(sock->socketdes, buf, len,0);
+ rv = recv(sock->socketdes, buf, recvlen,0);
} while (rv == -1 && errno == EINTR);
}
}
- return (ap_ssize_t) rv;
+ (*len) = rv;
+ return APR_SUCCESS;
}
1.5 +57 -35 apache-apr/apr/network_io/beos/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/beos/sockets.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- sockets.c 1999/05/24 02:04:06 1.4
+++ sockets.c 1999/05/27 19:02:35 1.5
@@ -69,27 +69,40 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
-struct socket_t *ap_create_tcp_socket(ap_context_t *cont)
+ap_status_t ap_create_tcp_socket(ap_context_t *cont, struct socket_t **new)
{
- struct socket_t *thesocket = (ap_socket_t
*)ap_palloc(cont->pool,sizeof(ap_socket_t));
+ (*new) = (struct socket_t *)ap_palloc(cont->pool,sizeof(struct
socket_t));
+
+ if ((*new) == NULL){
+ return APR_ENOMEM;
+ }
+
+ (*new)->cntxt = cont;
+ (*new)->addr = (struct sockaddr_in *) ap_palloc((*new)->cntxt->pool,
+ sizeof (struct sockaddr_in));
+ if ((*new)->addr == NULL){
+ return APR_ENOMEM;
+ }
+
+ (*new)->socketdes = socket(AF_INET ,SOCK_STREAM, 0);
+ (*new)->remote_hostname=NULL;
+
+ (*new)->addr->sin_family = AF_INET;
- thesocket->socketdes = socket(AF_INET ,SOCK_STREAM, 0);
- thesocket->remote_hostname=NULL;
- thesocket->addr = (struct sockaddr_in *) ap_palloc(cont->pool,sizeof
(struct sockaddr_in));
- thesocket->addr->sin_family = AF_INET;
- thesocket->addr_len = sizeof(*thesocket->addr);
- memset(&thesocket->addr->sin_zero, 0,
sizeof(thesocket->addr->sin_zero));
+ (*new)->addr_len = sizeof(*(*new)->addr);
+ memset(&(*new)->addr->sin_zero, 0, sizeof((*new)->addr->sin_zero));
- if (thesocket->socketdes < 0) {
- return NULL;
+ if ((*new)->socketdes < 0) {
+ return errno;
}
else {
- ap_register_cleanup(cont->pool, (void *)thesocket, socket_cleanup,
NULL);
- return thesocket;
+ ap_register_cleanup((*new)->cntxt->pool, (void *)(*new),
+ socket_cleanup, NULL);
+ return APR_SUCCESS;
}
}
@@ -105,8 +118,8 @@
ap_status_t ap_close_socket(struct socket_t *thesocket)
{
- socket_cleanup(thesocket);
- ap_kill_cleanup(cont->pool,thesocket,socket_cleanup);
+ ap_kill_cleanup(thesocket->cntxt->pool,thesocket,socket_cleanup);
+ return socket_cleanup(thesocket);
}
ap_status_t ap_setport(struct socket_t *sock, ap_uint32_t port)
@@ -119,7 +132,7 @@
{
sock->addr->sin_addr.s_addr = INADDR_ANY;
if (bind(sock->socketdes, (struct sockaddr *)sock->addr, sock->addr_len)
== -1)
- return APR_FAILURE;
+ return errno;
else
return APR_SUCCESS;
}
@@ -127,31 +140,39 @@
ap_status_t ap_listen(struct socket_t *sock, ap_int32_t backlog)
{
if (listen(sock->socketdes, backlog) == -1)
- return APR_FAILURE;
+ return errno;
else
return APR_SUCCESS;
}
-struct socket_t *ap_accept(struct socket_t *sock)
+ap_status_t ap_accept(const struct socket_t *sock, struct socket_t **new)
{
- struct socket_t *new = (ap_socket_t
*)ap_palloc(cont->pool,sizeof(ap_socket_t));
struct hostent *hptr;
- new->addr = (struct sockaddr_in *)ap_palloc(cont->pool, sizeof(struct
sockaddr_in));
- new->addr_len = sizeof(struct sockaddr_in);
-
- new->socketdes = accept(sock->socketdes, (struct sockaddr *)new->addr,
&new->addr_len);
- if (new->socketdes <0){
- return NULL;
+ (*new) = (struct socket_t *)ap_palloc(sock->cntxt->pool,
+ sizeof(ap_socket_t));
+
+ (*new)->cntxt = sock->cntxt;
+ (*new)->addr = (struct sockaddr_in *)ap_palloc((*new)->cntxt->pool,
+ sizeof(struct sockaddr_in));
+ (*new)->addr_len = sizeof(struct sockaddr_in);
+
+ (*new)->socketdes = accept(sock->socketdes, (struct sockaddr
*)(*new)->addr,
+ &(*new)->addr_len);
+
+ if ((*new)->socketdes <0){
+ return errno;
}
- hptr = gethostbyaddr((char*)&new->addr->sin_addr, sizeof(struct
in_addr), AF_INET);
+ hptr = gethostbyaddr((char*)&(*new)->addr->sin_addr,
+ sizeof(struct in_addr), AF_INET);
if (hptr != NULL){
- new->remote_hostname = strdup(hptr->h_name);
+ (*new)->remote_hostname = strdup(hptr->h_name);
}
- ap_register_cleanup(cont->pool, (void *)new, socket_cleanup, NULL);
- return new;
+ ap_register_cleanup((*new)->cntxt->pool, (void *)new,
+ socket_cleanup, NULL);
+ return APR_SUCCESS;
}
ap_status_t ap_connect(struct socket_t *sock, char *hostname)
@@ -159,20 +180,21 @@
struct hostent *hp;
hp = gethostbyname(hostname);
- if ((sock->socketdes < 0) || (!hp) || (!sock->addr)) {
- return APR_FAILURE;
+ if ((sock->socketdes < 0) || (!sock->addr)) {
+ return APR_ENOTSOCK;
}
memcpy((char *)&sock->addr->sin_addr, hp->h_addr , hp->h_length);
- sock->addr->sin_family = AF_INET;
+ sock->addr->sin_family = AF_INET;
+
memset(sock->addr->sin_zero, 0, sizeof(sock->addr->sin_zero));
+
sock->addr_len = sizeof(sock->addr);
+
while ((connect(sock->socketdes, (const struct sockaddr *)sock->addr,
sock->addr_len) < 0)){
if (errno != EALREADY && errno != EINPROGRESS)
- return APR_FAILURE;
- if (errno == EINPROGRESS)
- printf ("EINPROGRESS ");
+ return errno;
}
sock->remote_hostname = strdup(hostname);
1.5 +10 -6 apache-apr/apr/network_io/beos/sockopt.c
Index: sockopt.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/network_io/beos/sockopt.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- sockopt.c 1999/05/24 02:04:06 1.4
+++ sockopt.c 1999/05/27 19:02:35 1.5
@@ -72,17 +72,17 @@
}
if (opt & APR_SO_DEBUG) {
if (setsockopt(sock->socketdes, SOL_SOCKET, SO_DEBUG, &one,
sizeof(one)) == -1) {
- return APR_FAILURE;
+ return errno;
}
}
if (opt & APR_SO_REUSEADDR) {
if (setsockopt(sock->socketdes, SOL_SOCKET, SO_REUSEADDR, &one,
sizeof(one)) == -1) {
- return APR_FAILURE;
+ return errno;
}
}
if (opt & APR_SO_NONBLOCK) {
if (setsockopt(sock->socketdes, SOL_SOCKET, SO_NONBLOCK, &one,
sizeof(one)) == -1){
- return APR_FAILURE;
+ return errno;
}
}
return APR_SUCCESS;
@@ -91,13 +91,17 @@
ap_status_t ap_gethostname(ap_context_t *cont, char * buf, int len)
{
if (gethostname(buf, len) == -1){
- return APR_FAILURE;
+ return errno;
} else {
return APR_SUCCESS;
}
}
-char *ap_get_remote_hostname(struct socket_t *sock)
+ap_status_t ap_get_remote_hostname(struct socket_t *sock, char **name)
{
- return sock->remote_hostname;
+ (*name) = (char*)ap_pstrdup(sock->cntxt->pool, sock->remote_hostname);
+ if (*name) {
+ return APR_SUCCESS;
+ }
+ return APR_ENOMEM;
}
1.8 +1 -1 apache-apr/apr/test/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/Makefile.in,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Makefile.in 1999/05/26 20:41:58 1.7
+++ Makefile.in 1999/05/27 19:02:37 1.8
@@ -7,7 +7,7 @@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@ @CFLAGS@ @OPTIM@
[EMAIL PROTECTED]@ -lpthread -L../network_io -lnetwork -L../threadproc
-lthreadproc -L../file_io -lfile -L../misc -lmisc -L../lib -lapr -L../time
-ltime -L../locks -llock
[EMAIL PROTECTED]@ -L../network_io -lnetwork -L../threadproc -lthreadproc
-L../file_io -lfile -L../misc -lmisc -L../lib -lapr -L../time -ltime -L../locks
-llock
[EMAIL PROTECTED]@ $(LDLIBS)
INCDIR=../include
INCDIR1=../../include
1.23 +0 -1 apache-apr/apr/test/testfile.c
Index: testfile.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/testfile.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- testfile.c 1999/05/26 13:46:58 1.22
+++ testfile.c 1999/05/27 19:02:38 1.23
@@ -76,7 +76,6 @@
char *buf;
char *str;
char *filename = "test.fil";
-
if (ap_create_context(NULL, NULL, &context) != APR_SUCCESS) {
fprintf(stderr, "Couldn't allocate context.");
exit(-1);
1.8 +1 -1 apache-apr/apr/test/testproc.c
Index: testproc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/test/testproc.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- testproc.c 1999/05/26 13:46:58 1.7
+++ testproc.c 1999/05/27 19:02:38 1.8
@@ -118,7 +118,7 @@
args[1] = ap_pstrdup(context->pool, "-X");
args[2] = NULL;
- fprintf(stdout, "Createing a new process.......");
+ fprintf(stdout, "Creating a new process.......");
if (ap_create_process(context, "../testproc", args, NULL, attr,
&newproc) != APR_SUCCESS) {
fprintf(stderr, "Could not create the new process\n");
exit(-1);
1.2 +8 -7 apache-apr/apr/threadproc/beos/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/Makefile.in,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Makefile.in 1999/05/18 13:40:20 1.1
+++ Makefile.in 1999/05/27 19:02:39 1.2
@@ -54,19 +54,20 @@
&& rm Makefile.new
# DO NOT REMOVE
-proc.o: proc.c ../../file_io/beos/fileio.h \
- ../../../include/apr_general.h ../../../include/apr_errno.h \
- ../../../include/apr_file_io.h threadproc.h \
- ../../../include/apr_thread_proc.h
+proc.o: proc.c threadproc.h ../../../include/apr_thread_proc.h \
+ ../../../include/apr_file_io.h ../../../include/apr_general.h \
+ ../../../include/apr_errno.h ../../file_io/beos/fileio.h
signals.o: signals.c threadproc.h ../../../include/apr_thread_proc.h \
../../../include/apr_file_io.h ../../../include/apr_general.h \
../../../include/apr_errno.h ../../file_io/beos/fileio.h
thread.o: thread.c threadproc.h ../../../include/apr_thread_proc.h \
../../../include/apr_file_io.h ../../../include/apr_general.h \
- ../../../include/apr_errno.h
+ ../../../include/apr_errno.h ../../file_io/beos/fileio.h
threadcancel.o: threadcancel.c threadproc.h \
../../../include/apr_thread_proc.h ../../../include/apr_file_io.h \
- ../../../include/apr_general.h ../../../include/apr_errno.h
+ ../../../include/apr_general.h ../../../include/apr_errno.h \
+ ../../file_io/beos/fileio.h
threadpriv.o: threadpriv.c threadproc.h \
../../../include/apr_thread_proc.h ../../../include/apr_file_io.h \
- ../../../include/apr_general.h ../../../include/apr_errno.h
+ ../../../include/apr_general.h ../../../include/apr_errno.h \
+ ../../file_io/beos/fileio.h
1.3 +80 -69 apache-apr/apr/threadproc/beos/proc.c
Index: proc.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/proc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- proc.c 1999/05/24 02:04:17 1.2
+++ proc.c 1999/05/27 19:02:40 1.3
@@ -62,112 +62,120 @@
#include "apr_file_io.h"
#include "apr_general.h"
-ap_procattr_t *ap_createprocattr_init(ap_context_t *cont)
+ap_status_t ap_createprocattr_init(ap_context_t *cont, struct procattr_t
**new)
{
- ap_procattr_t *new = (ap_procattr_t *)ap_palloc(cont->pool,
sizeof(ap_procattr_t));
+ (*new) = (struct procattr_t *)ap_palloc(cont->pool,
+ sizeof(struct procattr_t));
- new->parent_in = NULL;
- new->child_in = NULL;
- new->parent_out = NULL;
- new->child_out = NULL;
- new->parent_err = NULL;
- new->child_err = NULL;
- new->currdir = NULL;
- new->cmdtype = APR_PROGRAM;
- return new;
+ if ((*new) == NULL) {
+ return APR_ENOMEM;
+ }
+ (*new)->cntxt = cont;
+ (*new)->parent_in = NULL;
+ (*new)->child_in = NULL;
+ (*new)->parent_out = NULL;
+ (*new)->child_out = NULL;
+ (*new)->parent_err = NULL;
+ (*new)->child_err = NULL;
+ (*new)->currdir = NULL;
+ (*new)->cmdtype = APR_PROGRAM;
+ return APR_SUCCESS;
}
ap_status_t ap_setprocattr_io(struct procattr_t *attr, ap_int32_t in,
ap_int32_t out, ap_int32_t err)
{
+ ap_status_t stat;
if (in) {
- attr->parent_in = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- attr->child_in = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- if (ap_create_pipe(cont, attr->child_in,
- attr->parent_in) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = ap_create_pipe(attr->cntxt, &attr->child_in,
+ &attr->parent_in)) != APR_SUCCESS) {
+ return stat;
}
}
if (out) {
- attr->parent_out = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- attr->child_out = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- if (ap_create_pipe(cont, attr->parent_out,
- attr->child_out) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = ap_create_pipe(attr->cntxt, &attr->parent_out,
+ &attr->child_out)) != APR_SUCCESS) {
+ return stat;
}
}
if (err) {
- attr->parent_err = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- attr->child_err = (ap_file_t *)ap_palloc(cont->pool,
- sizeof(ap_file_t));
- if (ap_create_pipe(cont, attr->parent_err,
- attr->child_err) == APR_FAILURE) {
- return APR_FAILURE;
+ if ((stat = ap_create_pipe(attr->cntxt, &attr->parent_err,
+ &attr->child_err)) != APR_SUCCESS) {
+ return stat;
}
}
+ return APR_SUCCESS;
}
ap_status_t ap_setprocattr_dir(struct procattr_t *attr,
char *dir)
{
- attr->currdir = strdup(dir);
+ attr->currdir = (char*)ap_pstrdup(attr->cntxt->pool, dir);
+ if (attr->currdir) {
+ return APR_SUCCESS;
+ }
+ return APR_ENOMEM;
}
ap_status_t ap_setprocattr_cmdtype(struct procattr_t *attr,
ap_cmdtype_e cmd)
{
attr->cmdtype = cmd;
+ return APR_SUCCESS;
}
-ap_int32_t ap_fork(struct proc_t *proc)
+ap_status_t ap_fork(ap_context_t *cont, struct proc_t **proc)
{
int pid;
+
+ (*proc) = (struct proc_t *)ap_palloc(cont->pool, sizeof(struct proc_t));
if ((pid = fork()) < 0) {
- return -1;
+ return errno;
}
else if (pid == 0) {
- proc->pid = pid;
- proc->attr = NULL;
- return pid;
+ (*proc)->pid = pid;
+ (*proc)->attr = NULL;
+ return APR_INCHILD;
}
- proc->pid = pid;
- proc->attr = NULL;
- return 1;
+ (*proc)->pid = pid;
+ (*proc)->attr = NULL;
+ return APR_INPARENT;
}
-ap_proc_t *ap_create_process(ap_context_t *cont, char *progname,
+ap_status_t ap_create_process(ap_context_t *cont, char *progname,
char *const args[], char **env,
- struct procattr_t *attr)
+ struct procattr_t *attr, struct proc_t **new)
{
- struct proc_t *new = (struct proc_t *)ap_palloc(cont->pool,
sizeof(struct proc_t));
int i;
char **newargs;
+ (*new) = (struct proc_t *)ap_palloc(cont->pool, sizeof(struct proc_t));
- if ((new->pid = fork()) < 0) {
- return NULL;
+ if ((*new) == NULL){
+ return APR_ENOMEM;
}
- else if (new->pid == 0) {
+
+ (*new)->cntxt = cont;
+
+ if (((*new)->pid = fork()) < 0) {
+ return errno;
+ }
+ else if ((*new)->pid == 0) {
/* child process */
if (attr->child_in) {
- ap_close(cont, attr->parent_in);
+ ap_close(attr->parent_in);
dup2(attr->child_in->filedes, STDIN_FILENO);
- ap_close(cont, attr->child_in);
+ ap_close(attr->child_in);
}
if (attr->child_out) {
- ap_close(cont, attr->parent_out);
+ ap_close(attr->parent_out);
dup2(attr->child_out->filedes, STDOUT_FILENO);
- ap_close(cont, attr->child_out);
+ ap_close(attr->child_out);
}
if (attr->child_err) {
- ap_close(cont, attr->parent_err);
+ ap_close(attr->parent_err);
dup2(attr->child_err->filedes, STDERR_FILENO);
- ap_close(cont, attr->child_err);
+ ap_close(attr->child_err);
}
signal(SIGCHLD, SIG_DFL); /*not sure if this is needed or not */
@@ -202,47 +210,50 @@
}
/* Parent process */
if (attr->child_in) {
- ap_close(cont, attr->child_in);
+ ap_close(attr->child_in);
}
if (attr->child_out) {
- ap_close(cont, attr->child_out);
+ ap_close(attr->child_out);
}
if (attr->child_err) {
- ap_close(cont, attr->child_err);
+ ap_close(attr->child_err);
}
- new->attr = attr;
- return new;
+ (*new)->attr = attr;
+ return APR_SUCCESS;
}
-ap_file_t *ap_get_childin(struct proc_t *proc)
+ap_status_t ap_get_childin(struct proc_t *proc, ap_file_t **new)
{
- return proc->attr->parent_in;
+ (*new) = proc->attr->parent_in;
+ return APR_SUCCESS;
}
-ap_file_t *ap_get_childout(struct proc_t *proc)
+ap_status_t ap_get_childout(struct proc_t *proc, ap_file_t **new)
{
- return proc->attr->parent_out;
+ (*new) = proc->attr->parent_out;
+ return APR_SUCCESS;
}
-ap_file_t *ap_get_childerr(struct proc_t *proc)
+ap_status_t ap_get_childerr(struct proc_t *proc, ap_file_t **new)
{
- return proc->attr->parent_err;
+ (*new) = proc->attr->parent_err;
+ return APR_SUCCESS;
}
ap_status_t ap_wait_proc(struct proc_t *proc,
ap_wait_how_e wait)
{
if (!proc)
- return APR_FAILURE;
+ return APR_ENOPROC;
if (wait == APR_WAIT) {
if (waitpid(proc->pid, NULL, WUNTRACED) > 0)
- return APR_SUCCESS;
- return APR_FAILURE;
+ return APR_CHILD_DONE;
+ return APR_CHILD_NOTDONE;
}
if (waitpid(proc->pid, NULL, WUNTRACED | WNOHANG) > 0)
- return APR_SUCCESS;
- return APR_FAILURE;
+ return APR_CHILD_DONE;
+ return APR_CHILD_NOTDONE;
}
void ap_exit_proc(ap_context_t *cont)
1.2 +5 -2 apache-apr/apr/threadproc/beos/signals.c
Index: signals.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/signals.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- signals.c 1999/05/17 18:46:46 1.1
+++ signals.c 1999/05/27 19:02:40 1.2
@@ -62,8 +62,11 @@
#include <string.h>
#include <sys/wait.h>
-void ap_kill(struct proc_t *proc, int signal)
+ap_status_t ap_kill(struct proc_t *proc, int signal)
{
- kill(proc->pid, signal);
+ if (kill(proc->pid, signal) == -1){
+ return errno;
+ }
+ return APR_SUCCESS;
}
1.3 +56 -24 apache-apr/apr/threadproc/beos/thread.c
Index: thread.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/thread.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- thread.c 1999/05/24 02:04:17 1.2
+++ thread.c 1999/05/27 19:02:41 1.3
@@ -58,21 +58,31 @@
#include "apr_general.h"
-struct threadattr_t *ap_create_threadattr(ap_context_t *cont)
+ap_status_t ap_create_threadattr(ap_context_t *cont, struct threadattr_t
**new)
{
- struct threadattr_t *new;
+ ap_status_t stat;
- new = (struct threadattr_t *)ap_palloc(cont->pool, sizeof(struct
threadattr_t));
- new->attr = (int32)ap_palloc(cont->pool, sizeof(int32));
- new->attr = (int32)B_NORMAL_PRIORITY;
+ (*new) = (struct threadattr_t *)ap_palloc(cont->pool,
+ sizeof(struct threadattr_t));
+ (*new)->attr = (int32)ap_palloc(cont->pool,
+ sizeof(int32));
+
+ if ((*new) == NULL) {
+ return APR_ENOMEM;
+ }
+
+ (*new)->cntxt = cont;
+ (*new)->attr = (int32)B_NORMAL_PRIORITY;
+
+ return APR_SUCCESS;
}
ap_status_t ap_setthreadattr_detach(struct threadattr_t *attr, ap_int32_t on)
{
if (on == 1){
- attr -> detached = 1;
+ attr->detached = 1;
} else {
- attr -> detached = 0;
+ attr->detached = 0;
}
return APR_SUCCESS;
}
@@ -80,51 +90,73 @@
ap_status_t ap_getthreadattr_detach(struct threadattr_t *attr)
{
if (attr->detached == 1){
- return APR_SUCCESS;
+ return APR_DETACH;
}
- return APR_FAILURE;
+ return APR_NOTDETACH;
}
-struct thread_t *ap_create_thread(struct threadattr_t *attr,
ap_thread_start_t func, void *data)
-{
- struct thread_t *new;
+ap_status_t ap_create_thread(ap_context_t *cont, struct threadattr_t *attr,
+ ap_thread_start_t func, void *data,
+ struct thread_t **new)
+{
+ int32 temp;
+ ap_status_t stat;
+
+ (*new) = (struct thread_t *)ap_palloc(cont->pool, sizeof(struct
thread_t));
+ if ((*new) == NULL) {
+ return APR_ENOMEM;
+ }
+
+ (*new)->td = (thread_id) ap_palloc(cont->pool, sizeof(thread_id));
+ if ((*new)->td == (thread_id)NULL) {
+ return APR_ENOMEM;
+ }
- new = (struct thread_t *)ap_palloc(cont->pool, sizeof(struct thread_t));
+ (*new)->cntxt = cont;
+
/* First we create the new thread...*/
- if (attr == NULL){
- attr = ap_create_threadattr(cont);
+ if (attr)
+ temp = attr->attr;
+ else
+ temp = B_NORMAL_PRIORITY;
+
+ stat = ap_create_context(cont, NULL, &(*new)->cntxt);
+ if (stat != APR_SUCCESS) {
+ return stat;
}
- new->td = spawn_thread((thread_func)func, "apr thread", attr->attr,
data);
+
+ (*new)->td = spawn_thread((thread_func)func, "apr thread", temp, data);
/* Now we try to run it...*/
- if (resume_thread((thread_id)new->td) == B_NO_ERROR) {
- return new;
+ if (resume_thread((*new)->td) == B_NO_ERROR) {
+ return APR_SUCCESS;
}
else {
- return NULL;
+ return errno;
}
}
-void ap_thread_exit(ap_context_t *cont, ap_status_t *retval)
+ap_status_t ap_thread_exit(ap_thread_t *thd, ap_status_t *retval)
{
+ ap_destroy_pool(thd->cntxt->pool);
exit_thread ((status_t)retval);
}
-ap_status_t ap_thread_join(ap_context_t *cont, ap_thread_t *thd, ap_status_t
*retval)
+ap_status_t ap_thread_join(ap_thread_t *thd, ap_status_t *retval)
{
if (wait_for_thread(thd->td,(void *)&retval) == B_NO_ERROR) {
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
-ap_status_t ap_thread_detach(ap_context_t *cont, ap_thread_t *thd)
+ap_status_t ap_thread_detach(ap_thread_t *thd)
{
if (suspend_thread(thd->td) == B_NO_ERROR){
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
1.3 +1 -1 apache-apr/apr/threadproc/beos/threadcancel.c
Index: threadcancel.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/threadcancel.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- threadcancel.c 1999/05/24 02:04:18 1.2
+++ threadcancel.c 1999/05/27 19:02:41 1.3
@@ -64,7 +64,7 @@
return APR_SUCCESS;
}
else {
- return APR_FAILURE;
+ return errno;
}
}
1.3 +24 -20 apache-apr/apr/threadproc/beos/threadpriv.c
Index: threadpriv.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/threadpriv.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- threadpriv.c 1999/05/24 02:04:18 1.2
+++ threadpriv.c 1999/05/27 19:02:41 1.3
@@ -62,28 +62,32 @@
static struct beos_private_data *beos_data[BEOS_MAX_DATAKEYS];
static sem_id lock;
-struct threadkey_t *ap_create_thread_private(ap_context_t *cont, void
(*dest)(void *))
+ap_status_t ap_create_thread_private(ap_context_t *cont,
+ void (*dest)(void *), struct threadkey_t
**key)
{
- struct threadkey_t *key;
-
- key = (struct threadkey_t *)ap_palloc(cont->pool, sizeof(struct
threadkey_t));
+ (*key) = (struct threadkey_t *)ap_palloc(cont->pool, sizeof(struct
threadkey_t));
+ if ((*key) == NULL) {
+ return APR_ENOMEM;
+ }
+
+ (*key)->cntxt = cont;
+
acquire_sem(lock);
- for (key->key=0; key->key < BEOS_MAX_DATAKEYS; key->key++){
- if (key_table[key->key].assigned == 0){
- key_table[key->key].assigned = 1;
- key_table[key->key].destructor = dest;
+ for ((*key)->key=0; (*key)->key < BEOS_MAX_DATAKEYS; (*key)->key++){
+ if (key_table[(*key)->key].assigned == 0){
+ key_table[(*key)->key].assigned = 1;
+ key_table[(*key)->key].destructor = dest;
release_sem(lock);
- return key;
+ return APR_SUCCESS;
}
}
release_sem(lock);
- return NULL;
+ return APR_ENOMEM;
}
-void *ap_get_thread_private(struct threadkey_t *key)
+ap_status_t ap_get_thread_private(struct threadkey_t *key, void **new)
{
- void * data;
thread_id tid;
int i, index=0;
tid = find_thread(NULL);
@@ -97,21 +101,21 @@
}
if (index == 0){
/* no storage for thread so we can't get anything... */
- return NULL;
+ return APR_ENOMEM;
}
if ((key->key < BEOS_MAX_DATAKEYS) && (key_table)){
acquire_sem(key_table[key->key].lock);
if (key_table[key->key].count){
- data = (void*)beos_data[index]->data[key->key];
+ (*new) = (void*)beos_data[index]->data[key->key];
} else {
- data = NULL;
+ (*new) = NULL;
}
release_sem(key_table[key->key].lock);
} else {
- data = NULL;
+ (*new) = NULL;
}
- return data;
+ return APR_SUCCESS;
}
ap_status_t ap_set_thread_private(struct threadkey_t *key, void *priv)
@@ -141,7 +145,7 @@
}
if (index == 0){
/* we're out of luck.. */
- return APR_FAILURE;
+ return APR_ENOMEM;
}
if ((key->key < BEOS_MAX_DATAKEYS) && (key_table)){
acquire_sem(key_table[key->key].lock);
@@ -166,7 +170,7 @@
}
if (ret)
return APR_SUCCESS;
- return APR_FAILURE;
+ return APR_ENOMEM;
}
ap_status_t ap_delete_thread_private(struct threadkey_t *key)
@@ -179,7 +183,7 @@
}
release_sem(key_table[key->key].lock);
} else {
- return APR_FAILURE;
+ return APR_ENOMEM;
}
return APR_SUCCESS;
}
1.2 +5 -0 apache-apr/apr/threadproc/beos/threadproc.h
Index: threadproc.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/threadproc/beos/threadproc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- threadproc.h 1999/05/17 18:46:47 1.1
+++ threadproc.h 1999/05/27 19:02:42 1.2
@@ -72,16 +72,19 @@
#define BEOS_MAX_DATAKEYS 128
struct thread_t {
+ ap_context_t *cntxt;
thread_id td;
};
struct threadattr_t {
+ ap_context_t *cntxt;
int32 attr;
int detached;
int joinable;
};
struct threadkey_t {
+ ap_context_t *cntxt;
int32 key;
};
@@ -100,6 +103,7 @@
};
struct procattr_t {
+ ap_context_t *cntxt;
ap_file_t *parent_in;
ap_file_t *child_in;
ap_file_t *parent_out;
@@ -111,6 +115,7 @@
};
struct proc_t {
+ ap_context_t *cntxt;
pid_t pid;
struct procattr_t *attr;
};
1.2 +118 -32 apache-apr/apr/time/beos/access.c
Index: access.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/time/beos/access.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- access.c 1999/05/17 18:49:47 1.1
+++ access.c 1999/05/27 19:02:44 1.2
@@ -60,100 +60,186 @@
#include <errno.h>
#include <string.h>
-ap_int64_t ap_get_curtime(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_curtime(struct atime_t *time, ap_int64_t *rv)
{
- return time->currtime;
+ if (time) {
+ (*rv) = time->currtime;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_sec(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_sec(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_sec;
+ if (time) {
+ (*rv) = time->explodedtime->tm_sec;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_min(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_min(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_min;
+ if (time) {
+ (*rv) = time->explodedtime->tm_min;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_hour(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_hour(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_hour;
+ if (time) {
+ (*rv) = time->explodedtime->tm_hour;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_mday(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_mday(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_mday;
+ if (time) {
+ (*rv) = time->explodedtime->tm_mday;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_mon(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_mon(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_mon;
+ if (time) {
+ (*rv) = time->explodedtime->tm_mon;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_year(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_year(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_year;
+ if (time) {
+ (*rv) = time->explodedtime->tm_year;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-ap_int32_t ap_get_wday(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_get_wday(struct atime_t *time, ap_int32_t *rv)
{
- return time->explodedtime->tm_wday;
+ if (time) {
+ (*rv) = time->explodedtime->tm_wday;
+ return APR_SUCCESS;
+ }
+ return APR_ENOTIME;
}
-void ap_set_sec(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_sec(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
+ if (time->explodedtime == NULL) {
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ return APR_ENOMEM;
}
time->explodedtime->tm_sec = value;
+ return APR_SUCCESS;
}
-void ap_set_min(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_min(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
}
+ if (time->explodedtime == NULL) {
+ return APR_ENOMEM;
+ }
time->explodedtime->tm_min = value;
+ return APR_SUCCESS;
}
-void ap_set_hour(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_hour(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
}
+ if (time->explodedtime == NULL) {
+ return APR_ENOMEM;
+ }
time->explodedtime->tm_hour = value;
+ return APR_SUCCESS;
}
-void ap_set_mday(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_mday(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
+ if (time->explodedtime == NULL) {
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ return APR_ENOMEM;
}
time->explodedtime->tm_mday = value;
+ return APR_SUCCESS;
}
-void ap_set_mon(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_mon(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
+ if (time->explodedtime == NULL) {
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ return APR_ENOMEM;
}
time->explodedtime->tm_mon = value;
+ return APR_SUCCESS;
}
-void ap_set_year(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_year(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
}
+ if (time->explodedtime == NULL) {
+ return APR_ENOMEM;
+ }
time->explodedtime->tm_year = value;
+ return APR_SUCCESS;
}
-void ap_set_wday(ap_context_t *context, struct atime_t *time, ap_int32_t
value)
+ap_status_t ap_set_wday(struct atime_t *time, ap_int32_t value)
{
+ if (!time) {
+ return APR_ENOTIME;
+ }
if (time->explodedtime == NULL) {
- time->explodedtime = (struct tm *)ap_palloc(context->pool,
sizeof(struct tm));
+ time->explodedtime = (struct tm *)ap_palloc(time->cntxt->pool,
+ sizeof(struct tm));
}
+ if (time->explodedtime == NULL) {
+ return APR_ENOMEM;
+ }
time->explodedtime->tm_wday = value;
+ return APR_SUCCESS;
}
-
-
1.2 +1 -0 apache-apr/apr/time/beos/atime.h
Index: atime.h
===================================================================
RCS file: /home/cvs/apache-apr/apr/time/beos/atime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- atime.h 1999/05/17 18:49:47 1.1
+++ atime.h 1999/05/27 19:02:44 1.2
@@ -60,6 +60,7 @@
#include <time.h>
struct atime_t {
+ ap_context_t *cntxt;
time_t currtime;
struct tm *explodedtime;
};
1.2 +15 -15 apache-apr/apr/time/beos/time.c
Index: time.c
===================================================================
RCS file: /home/cvs/apache-apr/apr/time/beos/time.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- time.c 1999/05/17 18:49:47 1.1
+++ time.c 1999/05/27 19:02:44 1.2
@@ -60,25 +60,28 @@
#include <time.h>
#include <errno.h>
#include <string.h>
-
-struct atime_t *ap_make_time(ap_context_t *context)
+ap_status_t ap_make_time(ap_context_t *cont, struct atime_t **new)
{
- struct atime_t *new;
- new = (struct atime_t *)ap_palloc(context->pool, sizeof(struct atime_t));
+ (*new) = (struct atime_t *)ap_palloc(cont->pool, sizeof(struct atime_t));
+
+ if ((*new) == NULL) {
+ return APR_ENOMEM;
+ }
- new->explodedtime = NULL;
- return new;
+ (*new)->cntxt = cont;
+ (*new)->explodedtime = NULL;
+ return APR_SUCCESS;
}
-ap_status_t ap_current_time(ap_context_t *context, struct atime_t *new)
+ap_status_t ap_current_time(struct atime_t *new)
{
if (time(&new->currtime) == -1) {
- return APR_FAILURE;
+ return errno;
}
return APR_SUCCESS;
}
-ap_status_t ap_explode_time(ap_context_t *context, struct atime_t *time,
ap_timetype_e type)
+ap_status_t ap_explode_time(struct atime_t *time, ap_timetype_e type)
{
switch (type) {
case APR_LOCALTIME: {
@@ -93,7 +96,7 @@
return APR_SUCCESS;
}
-ap_status_t ap_implode_time(ap_context_t *context, struct atime_t *time)
+ap_status_t ap_implode_time(struct atime_t *time)
{
int year;
time_t days;
@@ -103,8 +106,7 @@
year = time->explodedtime->tm_year;
if (year < 70 || ((sizeof(time_t) <= 4) && (year >= 138))) {
- /* errno = EBAD_DATE; */
- return APR_FAILURE;
+ return APR_EBADDATE;
}
/* shift new year to 1st March in order to make leap year calc easy */
@@ -123,10 +125,8 @@
time->explodedtime->tm_min) * 60 + time->explodedtime->tm_sec;
if (days < 0) {
- /* errno = EBAD_DATE; */ /* must have overflowed */
- return APR_FAILURE;
+ return APR_EBADDATE;
}
time->currtime = days; /* must be a valid time */
return APR_SUCCESS;
}
-