Index: c/file.c |
diff --git a/c/file.c b/c/file.c |
deleted file mode 100644 |
index 05c8747d597eadff38aa1de5b608299a508cd99c..0000000000000000000000000000000000000000 |
--- a/c/file.c |
+++ /dev/null |
@@ -1,601 +0,0 @@ |
-/* Licensed to the Apache Software Foundation (ASF) under one or more |
- * contributor license agreements. See the NOTICE file distributed with |
- * this work for additional information regarding copyright ownership. |
- * The ASF licenses this file to You under the Apache License, Version 2.0 |
- * (the "License"); you may not use this file except in compliance with |
- * the License. You may obtain a copy of the License at |
- * |
- * http://www.apache.org/licenses/LICENSE-2.0 |
- * |
- * Unless required by applicable law or agreed to in writing, software |
- * distributed under the License is distributed on an "AS IS" BASIS, |
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
- * See the License for the specific language governing permissions and |
- * limitations under the License. |
- */ |
- |
-/* |
- * |
- * @author Mladen Turk |
- * @version $Id: file.c 1442587 2013-02-05 13:49:48Z rjung $ |
- */ |
- |
-#include "tcn.h" |
-#include "apr_file_io.h" |
- |
- |
-TCN_IMPLEMENT_CALL(jint, File, close)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_close(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, eof)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_eof(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, flush)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_flush(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, unlock)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_unlock(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, flagsGet)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_flags_get(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, lock)(TCN_STDARGS, jlong file, jint flags) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_lock(f, (int)flags); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, trunc)(TCN_STDARGS, jlong file, jlong off) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_trunc(f, (apr_off_t)off); |
-} |
- |
-TCN_IMPLEMENT_CALL(jlong, File, open)(TCN_STDARGS, jstring fname, |
- jint flag, jint perm, |
- jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- apr_file_t *f = NULL; |
- TCN_ALLOC_CSTRING(fname); |
- |
- UNREFERENCED(o); |
- TCN_THROW_IF_ERR(apr_file_open(&f, J2S(fname), (apr_int32_t)flag, |
- (apr_fileperms_t)perm, p), f); |
- |
-cleanup: |
- TCN_FREE_CSTRING(fname); |
- return P2J(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jlong, File, mktemp)(TCN_STDARGS, jstring templ, |
- jint flags, |
- jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- apr_file_t *f = NULL; |
- char *ctempl = tcn_strdup(e, templ); |
- |
- UNREFERENCED(o); |
- if (!ctempl) { |
- TCN_THROW_OS_ERROR(e); |
- return 0; |
- } |
- TCN_THROW_IF_ERR(apr_file_mktemp(&f, ctempl, |
- (apr_int32_t)flags, p), f); |
- |
-cleanup: |
- free(ctempl); |
- return P2J(f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, remove)(TCN_STDARGS, jstring path, jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(path); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_remove(J2S(path), p); |
- TCN_FREE_CSTRING(path); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, rename)(TCN_STDARGS, jstring from, |
- jstring to, jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(from); |
- TCN_ALLOC_CSTRING(to); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_rename(J2S(from), J2S(to), p); |
- TCN_FREE_CSTRING(from); |
- TCN_FREE_CSTRING(to); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, copy)(TCN_STDARGS, jstring from, |
- jstring to, jint perms, jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(from); |
- TCN_ALLOC_CSTRING(to); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_copy(J2S(from), J2S(to), (apr_fileperms_t)perms, p); |
- TCN_FREE_CSTRING(from); |
- TCN_FREE_CSTRING(to); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, append)(TCN_STDARGS, jstring from, |
- jstring to, jint perms, jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(from); |
- TCN_ALLOC_CSTRING(to); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_append(J2S(from), J2S(to), (apr_fileperms_t)perms, p); |
- TCN_FREE_CSTRING(from); |
- TCN_FREE_CSTRING(to); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jstring, File, nameGet)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- jstring name = NULL; |
- const char *fname; |
- |
- UNREFERENCED(o); |
- if (apr_file_name_get(&fname, f) == APR_SUCCESS) |
- name = AJP_TO_JSTRING(fname); |
- |
- return name; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, permsSet)(TCN_STDARGS, jstring file, jint perms) |
-{ |
- TCN_ALLOC_CSTRING(file); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_perms_set(J2S(file), (apr_fileperms_t)perms); |
- TCN_FREE_CSTRING(file); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, attrsSet)(TCN_STDARGS, jstring file, jint attrs, |
- jint mask, jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(file); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_attrs_set(J2S(file), (apr_fileattrs_t)attrs, |
- (apr_fileattrs_t)mask, p); |
- TCN_FREE_CSTRING(file); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, mtimeSet)(TCN_STDARGS, jstring file, jlong mtime, |
- jlong pool) |
-{ |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- TCN_ALLOC_CSTRING(file); |
- apr_status_t rv; |
- |
- UNREFERENCED(o); |
- rv = apr_file_mtime_set(J2S(file), J2T(mtime), p); |
- TCN_FREE_CSTRING(file); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jlong, File, seek)(TCN_STDARGS, jlong file, |
- jint where, jlong offset) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_off_t pos = (apr_off_t)offset; |
- apr_seek_where_t w; |
- UNREFERENCED(o); |
- switch (where) { |
- case 1: |
- w = APR_CUR; |
- break; |
- case 2: |
- w = APR_END; |
- break; |
- default: |
- w = APR_SET; |
- break; |
- } |
- TCN_THROW_IF_ERR(apr_file_seek(f, w, &pos), pos); |
- |
-cleanup: |
- return (jlong)pos; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, putc)(TCN_STDARGS, jbyte c, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_putc((char)c, f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, getc)(TCN_STDARGS, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- char ch; |
- |
- UNREFERENCED_STDARGS; |
- TCN_THROW_IF_ERR(apr_file_getc(&ch, f), ch); |
- |
-cleanup: |
- return (jint)ch; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, ungetc)(TCN_STDARGS, jbyte c, jlong file) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_ungetc((char)c, f); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, puts)(TCN_STDARGS, jbyteArray str, jlong file) |
-{ |
- apr_status_t rv = APR_EINVAL; |
- apr_file_t *f = J2P(file, apr_file_t *); |
- jbyte *bytes = (*e)->GetPrimitiveArrayCritical(e, str, NULL); |
- |
- UNREFERENCED(o); |
- if (bytes) { |
- rv = apr_file_puts((const char *)bytes, f); |
- (*e)->ReleasePrimitiveArrayCritical(e, str, bytes, JNI_ABORT); |
- } |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, write)(TCN_STDARGS, jlong file, |
- jbyteArray buf, jint offset, jint towrite) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)towrite; |
- jbyte *bytes = (*e)->GetPrimitiveArrayCritical(e, buf, NULL); |
- apr_status_t ss; |
- |
- UNREFERENCED(o); |
- if (towrite < 0) |
- towrite = (*e)->GetArrayLength(e, buf); |
- ss = apr_file_write(f, bytes + offset, &nbytes); |
- |
- (*e)->ReleasePrimitiveArrayCritical(e, buf, bytes, JNI_ABORT); |
- if (ss == APR_SUCCESS) |
- return (jint)nbytes; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, writeb)(TCN_STDARGS, jlong file, |
- jobject buf, jint offset, jint towrite) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)towrite; |
- char *bytes = (char *)(*e)->GetDirectBufferAddress(e, buf); |
- apr_status_t ss = APR_EINVAL; |
- |
- UNREFERENCED(o); |
- if (bytes) |
- ss = apr_file_write(f, bytes + offset, &nbytes); |
- |
- if (ss == APR_SUCCESS) |
- return (jint)nbytes; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, writeFull)(TCN_STDARGS, jlong file, |
- jbyteArray buf, jint offset, jint towrite) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)towrite; |
- apr_size_t written = 0; |
- apr_status_t ss; |
- jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL); |
- |
- UNREFERENCED(o); |
- if (towrite < 0) |
- towrite = (*e)->GetArrayLength(e, buf); |
- ss = apr_file_write_full(f, bytes + offset, nbytes, &written); |
- |
- (*e)->ReleaseByteArrayElements(e, buf, bytes, JNI_ABORT); |
- if (ss == APR_SUCCESS) |
- return (jint)written; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, writeFullb)(TCN_STDARGS, jlong file, |
- jobject buf, jint offset, jint towrite) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)towrite; |
- apr_size_t written = 0; |
- apr_status_t ss = APR_EINVAL; |
- char *bytes = (char *)(*e)->GetDirectBufferAddress(e, buf); |
- |
- UNREFERENCED(o); |
- if (bytes) |
- ss = apr_file_write_full(f, bytes + offset, nbytes, &written); |
- |
- if (ss == APR_SUCCESS) |
- return (jint)written; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, writev)(TCN_STDARGS, jlong file, |
- jobjectArray bufs) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- jsize nvec = (*e)->GetArrayLength(e, bufs); |
- jsize i; |
- struct iovec vec[APR_MAX_IOVEC_SIZE]; |
- jobject ba[APR_MAX_IOVEC_SIZE]; |
- apr_size_t written = 0; |
- apr_status_t ss; |
- |
- UNREFERENCED(o); |
- |
- if (nvec >= APR_MAX_IOVEC_SIZE) { |
- /* TODO: Throw something here */ |
- return 0; |
- } |
- for (i = 0; i < nvec; i++) { |
- ba[i] = (*e)->GetObjectArrayElement(e, bufs, i); |
- vec[i].iov_len = (*e)->GetArrayLength(e, ba[i]); |
- vec[i].iov_base = (void *)((*e)->GetByteArrayElements(e, ba[i], NULL)); |
- } |
- |
- ss = apr_file_writev(f, vec, nvec, &written); |
- |
- for (i = 0; i < nvec; i++) { |
- (*e)->ReleaseByteArrayElements(e, ba[i], (jbyte *)vec[i].iov_base, JNI_ABORT); |
- } |
- if (ss == APR_SUCCESS) |
- return (jint)written; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, writevFull)(TCN_STDARGS, jlong file, |
- jobjectArray bufs) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- jsize nvec = (*e)->GetArrayLength(e, bufs); |
- jsize i; |
- struct iovec vec[APR_MAX_IOVEC_SIZE]; |
- jobject ba[APR_MAX_IOVEC_SIZE]; |
- apr_size_t written = 0; |
- apr_status_t ss; |
- |
- UNREFERENCED(o); |
- |
- if (nvec >= APR_MAX_IOVEC_SIZE) { |
- /* TODO: Throw something here */ |
- return 0; |
- } |
- for (i = 0; i < nvec; i++) { |
- ba[i] = (*e)->GetObjectArrayElement(e, bufs, i); |
- vec[i].iov_len = (*e)->GetArrayLength(e, ba[i]); |
- vec[i].iov_base = (void *)((*e)->GetByteArrayElements(e, ba[i], NULL)); |
- } |
-#if (APR_VERSION_MAJOR >= 1) && (APR_VERSION_MINOR >= 1) |
- ss = apr_file_writev_full(f, vec, nvec, &written); |
-#else |
- ss = apr_file_writev(f, vec, nvec, &written); |
-#endif |
- |
- for (i = 0; i < nvec; i++) { |
- (*e)->ReleaseByteArrayElements(e, ba[i], (jbyte *)vec[i].iov_base, |
- JNI_ABORT); |
- } |
- if (ss == APR_SUCCESS) |
- return (jint)written; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, read)(TCN_STDARGS, jlong file, |
- jbyteArray buf, jint offset, |
- jint toread) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)toread; |
- jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL); |
- apr_status_t ss; |
- |
- UNREFERENCED(o); |
- ss = apr_file_read(f, bytes + offset, &nbytes); |
- |
- (*e)->ReleaseByteArrayElements(e, buf, bytes, |
- ss == APR_SUCCESS ? 0 : JNI_ABORT); |
- if (ss == APR_SUCCESS) |
- return (jint)nbytes; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, readb)(TCN_STDARGS, jlong file, |
- jobject buf, jint offset, |
- jint toread) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)toread; |
- char *bytes = (char *)(*e)->GetDirectBufferAddress(e, buf); |
- apr_status_t ss = APR_EINVAL; |
- |
- UNREFERENCED(o); |
- if (bytes) |
- ss = apr_file_read(f, bytes + offset, &nbytes); |
- |
- if (ss == APR_SUCCESS) |
- return (jint)nbytes; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, readFull)(TCN_STDARGS, jlong file, |
- jbyteArray buf, jint offset, |
- jint toread) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)toread; |
- apr_size_t nread = 0; |
- apr_status_t ss; |
- jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL); |
- |
- UNREFERENCED(o); |
- ss = apr_file_read_full(f, bytes + offset, nbytes, &nread); |
- |
- (*e)->ReleaseByteArrayElements(e, buf, bytes, |
- ss == APR_SUCCESS ? 0 : JNI_ABORT); |
- if (ss == APR_SUCCESS) |
- return (jint)nread; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, readFullb)(TCN_STDARGS, jlong file, |
- jobject buf, jint offset, |
- jint toread) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_size_t nbytes = (apr_size_t)toread; |
- apr_size_t nread = 0; |
- char *bytes = (char *)(*e)->GetDirectBufferAddress(e, buf); |
- apr_status_t ss = APR_EINVAL; |
- |
- UNREFERENCED(o); |
- if (bytes) |
- ss = apr_file_read_full(f, bytes + offset, nbytes, &nread); |
- |
- if (ss == APR_SUCCESS) |
- return (jint)nread; |
- else |
- return -(jint)ss; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, gets)(TCN_STDARGS, jbyteArray buf, jint offset, |
- jlong file) |
-{ |
- apr_status_t rv; |
- apr_file_t *f = J2P(file, apr_file_t *); |
- jsize nbytes = (*e)->GetArrayLength(e, buf); |
- jbyte *bytes = (*e)->GetByteArrayElements(e, buf, NULL); |
- |
- UNREFERENCED(o); |
- rv = apr_file_gets((char*)(bytes + offset),nbytes - offset, f); |
- (*e)->ReleaseByteArrayElements(e, buf, bytes, |
- rv == APR_SUCCESS ? 0 : JNI_ABORT); |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, pipeCreate)(TCN_STDARGS, jlongArray io, jlong pool) |
-{ |
- apr_status_t rv; |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- jsize npipes = (*e)->GetArrayLength(e, io); |
- jlong *pipes = (*e)->GetLongArrayElements(e, io, NULL); |
- apr_file_t *in; |
- apr_file_t *out; |
- |
- UNREFERENCED(o); |
- if (npipes < 2) { |
- (*e)->ReleaseLongArrayElements(e, io, pipes, JNI_ABORT); |
- return APR_EINVAL; |
- } |
- |
- rv = apr_file_pipe_create(&in, &out, p); |
- if (rv == APR_SUCCESS) { |
- pipes[0] = P2J(in); |
- pipes[1] = P2J(out); |
- (*e)->ReleaseLongArrayElements(e, io, pipes, 0); |
- } |
- else |
- (*e)->ReleaseLongArrayElements(e, io, pipes, JNI_ABORT); |
- |
- return (jint)rv; |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, pipeTimeoutSet)(TCN_STDARGS, jlong pipe, |
- jlong timeout) |
-{ |
- apr_file_t *f = J2P(pipe, apr_file_t *); |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_pipe_timeout_set(f, J2T(timeout)); |
-} |
- |
-TCN_IMPLEMENT_CALL(jlong, File, pipeTimeoutGet)(TCN_STDARGS, jlong pipe) |
-{ |
- apr_file_t *f = J2P(pipe, apr_file_t *); |
- apr_interval_time_t timeout; |
- |
- UNREFERENCED(o); |
- TCN_THROW_IF_ERR(apr_file_pipe_timeout_get(f, &timeout), timeout); |
- |
-cleanup: |
- return (jlong)timeout; |
-} |
- |
-TCN_IMPLEMENT_CALL(jlong, File, dup)(TCN_STDARGS, jlong newf, jlong file, |
- jlong pool) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- apr_file_t *d = J2P(newf, apr_file_t *); |
- |
- UNREFERENCED(o); |
- TCN_THROW_IF_ERR(apr_file_dup(&d, f, p), d); |
- |
-cleanup: |
- return P2J(d); |
-} |
- |
-TCN_IMPLEMENT_CALL(jint, File, dup2)(TCN_STDARGS, jlong newf, jlong file, |
- jlong pool) |
-{ |
- apr_file_t *f = J2P(file, apr_file_t *); |
- apr_pool_t *p = J2P(pool, apr_pool_t *); |
- apr_file_t *d = J2P(newf, apr_file_t *); |
- |
- UNREFERENCED_STDARGS; |
- return (jint)apr_file_dup2(d, f, p); |
-} |