src/java.base/windows/native/libjava/io_util_md.c
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 574,652 ****
if (SetFilePointerEx(h, distance, &pos, op) == 0) {
return -1;
}
return long_to_jlong(pos.QuadPart);
}
-
- size_t
- getLastErrorString(char *utf8_jvmErrorMsg, size_t cbErrorMsg)
- {
- size_t n = 0;
- if (cbErrorMsg > 0) {
- BOOLEAN noError = FALSE;
- WCHAR *utf16_osErrorMsg = (WCHAR *)malloc(cbErrorMsg*sizeof(WCHAR));
- if (utf16_osErrorMsg == NULL) {
- // OOM accident
- strncpy(utf8_jvmErrorMsg, "Out of memory", cbErrorMsg);
- // truncate if too long
- utf8_jvmErrorMsg[cbErrorMsg - 1] = '\0';
- n = strlen(utf8_jvmErrorMsg);
- } else {
- DWORD errval = GetLastError();
- if (errval != 0) {
- // WIN32 error
- n = (size_t)FormatMessageW(
- FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- errval,
- 0,
- utf16_osErrorMsg,
- (DWORD)cbErrorMsg,
- NULL);
- if (n > 3) {
- // Drop final '.', CR, LF
- if (utf16_osErrorMsg[n - 1] == L'\n') --n;
- if (utf16_osErrorMsg[n - 1] == L'\r') --n;
- if (utf16_osErrorMsg[n - 1] == L'.') --n;
- utf16_osErrorMsg[n] = L'\0';
- }
- } else if (errno != 0) {
- // C runtime error that has no corresponding WIN32 error code
- const WCHAR *rtError = _wcserror(errno);
- if (rtError != NULL) {
- wcsncpy(utf16_osErrorMsg, rtError, cbErrorMsg);
- // truncate if too long
- utf16_osErrorMsg[cbErrorMsg - 1] = L'\0';
- n = wcslen(utf16_osErrorMsg);
- }
- } else
- noError = TRUE; //OS has no error to report
-
- if (!noError) {
- if (n > 0) {
- n = WideCharToMultiByte(
- CP_UTF8,
- 0,
- utf16_osErrorMsg,
- n,
- utf8_jvmErrorMsg,
- cbErrorMsg,
- NULL,
- NULL);
-
- // no way to die
- if (n > 0)
- utf8_jvmErrorMsg[min(cbErrorMsg - 1, n)] = '\0';
- }
-
- if (n <= 0) {
- strncpy(utf8_jvmErrorMsg, "Secondary error while OS message extraction", cbErrorMsg);
- // truncate if too long
- utf8_jvmErrorMsg[cbErrorMsg - 1] = '\0';
- n = strlen(utf8_jvmErrorMsg);
- }
- }
- free(utf16_osErrorMsg);
- }
- }
- return n;
- }
--- 574,578 ----