X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=libjava%2Fjava%2Fio%2FnatFileDescriptorWin32.cc;fp=libjava%2Fjava%2Fio%2FnatFileDescriptorWin32.cc;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=8c659a4993677fbe87e87f4a04bde9634f1f08bf;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libjava/java/io/natFileDescriptorWin32.cc b/libjava/java/io/natFileDescriptorWin32.cc deleted file mode 100644 index 8c659a49..00000000 --- a/libjava/java/io/natFileDescriptorWin32.cc +++ /dev/null @@ -1,261 +0,0 @@ -// natFileDescriptorWin32.cc - Native part of FileDescriptor class. - -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -// FIXME: In order to support interrupting of IO operations, we -// need to change to use the windows asynchronous IO functions - -#include - -#include -#include - -#include -#undef STRICT - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void -java::io::FileDescriptor::init(void) -{ - in = new java::io::FileDescriptor((jint)(GetStdHandle (STD_INPUT_HANDLE))); - out = new java::io::FileDescriptor((jint)(GetStdHandle (STD_OUTPUT_HANDLE))); - err = new java::io::FileDescriptor((jint)(GetStdHandle (STD_ERROR_HANDLE))); -} - -static char * -winerr (void) -{ - static LPVOID last = NULL; - LPVOID old = NULL; - - if (last) - old = last; - - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &last, - 0, - NULL); - - if (old) - LocalFree (old); - - return (char *)last; -} - -jboolean -java::io::FileDescriptor::valid (void) { - BY_HANDLE_FILE_INFORMATION info; - return GetFileInformationByHandle ((HANDLE)fd, &info) != 0; -} - -void -java::io::FileDescriptor::sync (void) { - if (! FlushFileBuffers ((HANDLE)fd)) - throw new SyncFailedException (JvNewStringLatin1 (winerr ())); -} - -jint -java::io::FileDescriptor::open (jstring path, jint jflags) { - - HANDLE handle = NULL; - DWORD access = 0; - DWORD create = OPEN_EXISTING; - char buf[MAX_PATH] = ""; - - jsize total = JvGetStringUTFRegion(path, 0, path->length(), buf); - buf[total] = '\0'; - - JvAssert((jflags & READ) || (jflags & WRITE)); - - if ((jflags & READ) && (jflags & WRITE)) - { - access = GENERIC_READ | GENERIC_WRITE; - if (jflags & APPEND) - create = OPEN_ALWAYS; - else - create = CREATE_ALWAYS; - } - else if(jflags & READ) - access = GENERIC_READ; - else - { - access = GENERIC_WRITE; - if (jflags & APPEND) - create = OPEN_ALWAYS; - else - create = CREATE_ALWAYS; - } - - handle = CreateFile(buf, access, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, create, 0, NULL); - - if (handle == INVALID_HANDLE_VALUE) - { - char msg[MAX_PATH + 1000]; - sprintf (msg, "%s: %s", buf, winerr ()); - throw new FileNotFoundException (JvNewStringLatin1 (msg)); - } - - return (jint)handle; -} - -void -java::io::FileDescriptor::write (jint b) -{ - DWORD bytesWritten; - jbyte buf = (jbyte)b; - - if (WriteFile ((HANDLE)fd, &buf, 1, &bytesWritten, NULL)) - { - if (java::lang::Thread::interrupted()) - { - InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted")); - iioe->bytesTransferred = bytesWritten; - throw iioe; - } - if (bytesWritten != 1) - throw new IOException (JvNewStringLatin1 (winerr ())); - } - else - throw new IOException (JvNewStringLatin1 (winerr ())); - // FIXME: loop until bytesWritten == 1 -} - -void -java::io::FileDescriptor::write(jbyteArray b, jint offset, jint len) -{ - if (! b) - throw new java::lang::NullPointerException; - if(offset < 0 || len < 0 || offset + len > JvGetArrayLength (b)) - throw new java::lang::ArrayIndexOutOfBoundsException; - - jbyte *buf = elements (b) + offset; - DWORD bytesWritten; - if (WriteFile ((HANDLE)fd, buf, len, &bytesWritten, NULL)) - { - if (java::lang::Thread::interrupted()) - { - InterruptedIOException *iioe = new InterruptedIOException (JvNewStringLatin1 ("write interrupted")); - iioe->bytesTransferred = bytesWritten; - throw iioe; - } - } - else - throw new IOException (JvNewStringLatin1 (winerr ())); - // FIXME: loop until bytesWritten == len -} - -void -java::io::FileDescriptor::close (void) -{ - HANDLE save = (HANDLE)fd; - fd = (jint)INVALID_HANDLE_VALUE; - if (! CloseHandle (save)) - throw new IOException (JvNewStringLatin1 (winerr ())); -} - -jint -java::io::FileDescriptor::seek (jlong pos, jint whence, jboolean eof_trunc) -{ - JvAssert (whence == SET || whence == CUR); - - jlong len = length(); - jlong here = getFilePointer(); - - if (eof_trunc - && ((whence == SET && pos > len) || (whence == CUR && here + pos > len))) - { - whence = SET; - pos = len; - } - - LONG high = pos >> 32; - DWORD low = SetFilePointer ((HANDLE)fd, (DWORD)(0xffffffff & pos), &high, whence == SET ? FILE_BEGIN : FILE_CURRENT); - if ((low == 0xffffffff) && (GetLastError () != NO_ERROR)) - throw new IOException (JvNewStringLatin1 (winerr ())); - return low; -} - -jlong -java::io::FileDescriptor::getFilePointer(void) -{ - LONG high = 0; - DWORD low = SetFilePointer ((HANDLE)fd, 0, &high, FILE_CURRENT); - if ((low == 0xffffffff) && (GetLastError() != NO_ERROR)) - throw new IOException (JvNewStringLatin1 (winerr ())); - return (((jlong)high) << 32L) | (jlong)low; -} - -jlong -java::io::FileDescriptor::length(void) -{ - DWORD high; - DWORD low; - - low = GetFileSize ((HANDLE)fd, &high); - // FIXME: Error checking - return (((jlong)high) << 32L) | (jlong)low; -} - -jint -java::io::FileDescriptor::read(void) -{ - CHAR buf; - DWORD read; - - if (! ReadFile ((HANDLE)fd, &buf, 1, &read, NULL)) - throw new IOException (JvNewStringLatin1 (winerr ())); - if (! read) - return -1; - else - return (jint)(buf & 0xff); -} - -jint -java::io::FileDescriptor::read(jbyteArray buffer, jint offset, jint count) -{ - if (! buffer) - throw new java::lang::NullPointerException; - - jsize bsize = JvGetArrayLength (buffer); - if (offset < 0 || count < 0 || offset + count > bsize) - throw new java::lang::ArrayIndexOutOfBoundsException; - - jbyte *bytes = elements (buffer) + offset; - - DWORD read; - if (! ReadFile((HANDLE)fd, bytes, count, &read, NULL)) - throw new IOException (JvNewStringLatin1 (winerr ())); - - if (read == 0) return -1; - return (jint)read; -} - -jint -java::io::FileDescriptor::available(void) -{ - // FIXME: - return length() - getFilePointer(); -}