diff options
Diffstat (limited to 'src')
98 files changed, 930 insertions, 437 deletions
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp index eee5912b8..63cf123e0 100644 --- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp +++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp @@ -176,25 +176,26 @@ VBGLR3DECL(int) VbglR3GuestCtrlExecGetHostCmdExec(uint32_t u32ClientId, uint char *pszPassword, uint32_t cbPassword, uint32_t *pcMsTimeLimit) { - AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); - AssertPtrReturn(pszCmd, VERR_INVALID_PARAMETER); - AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); - AssertPtrReturn(pszArgs, VERR_INVALID_PARAMETER); - AssertPtrReturn(pcArgs, VERR_INVALID_PARAMETER); - AssertPtrReturn(pszEnv, VERR_INVALID_PARAMETER); - AssertPtrReturn(pcbEnv, VERR_INVALID_PARAMETER); - AssertPtrReturn(pcEnvVars, VERR_INVALID_PARAMETER); - AssertPtrReturn(pszUser, VERR_INVALID_PARAMETER); - AssertPtrReturn(pszPassword, VERR_INVALID_PARAMETER); - AssertPtrReturn(pcMsTimeLimit, VERR_INVALID_PARAMETER); + AssertReturn(cParms == 11, VERR_INVALID_PARAMETER); + + AssertPtrReturn(puContext, VERR_INVALID_POINTER); + AssertPtrReturn(pszCmd, VERR_INVALID_POINTER); + AssertPtrReturn(puFlags, VERR_INVALID_POINTER); + AssertPtrReturn(pszArgs, VERR_INVALID_POINTER); + AssertPtrReturn(pcArgs, VERR_INVALID_POINTER); + AssertPtrReturn(pszEnv, VERR_INVALID_POINTER); + AssertPtrReturn(pcbEnv, VERR_INVALID_POINTER); + AssertPtrReturn(pcEnvVars, VERR_INVALID_POINTER); + AssertPtrReturn(pszUser, VERR_INVALID_POINTER); + AssertPtrReturn(pszPassword, VERR_INVALID_POINTER); + AssertPtrReturn(pcMsTimeLimit, VERR_INVALID_POINTER); VBoxGuestCtrlHGCMMsgExecCmd Msg; Msg.hdr.result = VERR_WRONG_ORDER; Msg.hdr.u32ClientID = u32ClientId; Msg.hdr.u32Function = GUEST_GET_HOST_MSG; - Msg.hdr.cParms = cParms; /** @todo r=bird: This isn't safe/right. The parameter count of this HGCM call - * is fixed from our point of view. */ + Msg.hdr.cParms = 11; VbglHGCMParmUInt32Set(&Msg.context, 0); VbglHGCMParmPtrSet(&Msg.cmd, pszCmd, cbCmd); @@ -244,17 +245,19 @@ VBGLR3DECL(int) VbglR3GuestCtrlExecGetHostCmdOutput(uint32_t u32ClientId, ui uint32_t *puContext, uint32_t *puPID, uint32_t *puHandle, uint32_t *puFlags) { - AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); - AssertPtrReturn(puPID, VERR_INVALID_PARAMETER); - AssertPtrReturn(puHandle, VERR_INVALID_PARAMETER); - AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); + AssertReturn(cParms == 4, VERR_INVALID_PARAMETER); + + AssertPtrReturn(puContext, VERR_INVALID_POINTER); + AssertPtrReturn(puPID, VERR_INVALID_POINTER); + AssertPtrReturn(puHandle, VERR_INVALID_POINTER); + AssertPtrReturn(puFlags, VERR_INVALID_POINTER); VBoxGuestCtrlHGCMMsgExecOut Msg; Msg.hdr.result = VERR_WRONG_ORDER; Msg.hdr.u32ClientID = u32ClientId; Msg.hdr.u32Function = GUEST_GET_HOST_MSG; - Msg.hdr.cParms = cParms; + Msg.hdr.cParms = 4; VbglHGCMParmUInt32Set(&Msg.context, 0); VbglHGCMParmUInt32Set(&Msg.pid, 0); @@ -298,18 +301,20 @@ VBGLR3DECL(int) VbglR3GuestCtrlExecGetHostCmdInput(uint32_t u32ClientId, uin void *pvData, uint32_t cbData, uint32_t *pcbSize) { - AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); - AssertPtrReturn(puPID, VERR_INVALID_PARAMETER); - AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); - AssertPtrReturn(pvData, VERR_INVALID_PARAMETER); - AssertPtrReturn(pcbSize, VERR_INVALID_PARAMETER); + AssertReturn(cParms == 5, VERR_INVALID_PARAMETER); + + AssertPtrReturn(puContext, VERR_INVALID_POINTER); + AssertPtrReturn(puPID, VERR_INVALID_POINTER); + AssertPtrReturn(puFlags, VERR_INVALID_POINTER); + AssertPtrReturn(pvData, VERR_INVALID_POINTER); + AssertPtrReturn(pcbSize, VERR_INVALID_POINTER); VBoxGuestCtrlHGCMMsgExecIn Msg; Msg.hdr.result = VERR_WRONG_ORDER; Msg.hdr.u32ClientID = u32ClientId; Msg.hdr.u32Function = GUEST_GET_HOST_MSG; - Msg.hdr.cParms = cParms; + Msg.hdr.cParms = 5; VbglHGCMParmUInt32Set(&Msg.context, 0); VbglHGCMParmUInt32Set(&Msg.pid, 0); @@ -448,3 +453,4 @@ VBGLR3DECL(int) VbglR3GuestCtrlExecReportStatusIn(uint32_t u32ClientId, } return rc; } + diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp index 5c8f62979..a5b04e77a 100644 --- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp +++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp @@ -306,6 +306,11 @@ static int VBoxServiceControlHandleCmdStartProc(uint32_t uClientID, uint32_t cPa VBOXSERVICECTRLPROCESS proc; RT_ZERO(proc); + /* Initialize maximum environment block size -- needed as input + * parameter to retrieve the stuff from the host. On output this then + * will contain the actual block size. */ + proc.cbEnv = sizeof(proc.szEnv); + rc = VbglR3GuestCtrlExecGetHostCmdExec(uClientID, cParms, &uContextID, @@ -324,11 +329,17 @@ static int VBoxServiceControlHandleCmdStartProc(uint32_t uClientID, uint32_t cPa &proc.uTimeLimitMS); if (RT_SUCCESS(rc)) { - VBoxServiceVerbose(3, "Request to start process szCmd=%s, uFlags=0x%x, szArgs=%s, szEnv=%s, szUser=%s, uTimeout=%u\n", + VBoxServiceVerbose(3, "Request to start process szCmd=%s, uFlags=0x%x, szArgs=%s, szEnv=%s, szUser=%s, szPassword=%s, uTimeout=%u\n", proc.szCmd, proc.uFlags, proc.uNumArgs ? proc.szArgs : "<None>", proc.uNumEnvVars ? proc.szEnv : "<None>", - proc.szUser, proc.uTimeLimitMS); + proc.szUser, +#ifdef DEBUG + proc.szPassword, +#else + "XXX", /* Never show passwords in release mode. */ +#endif + proc.uTimeLimitMS); rc = VBoxServiceControlReapThreads(); if (RT_FAILURE(rc)) diff --git a/src/VBox/Additions/solaris/Installer/postinstall.sh b/src/VBox/Additions/solaris/Installer/postinstall.sh index f9095b6a8..574fdfc36 100755 --- a/src/VBox/Additions/solaris/Installer/postinstall.sh +++ b/src/VBox/Additions/solaris/Installer/postinstall.sh @@ -64,6 +64,8 @@ uncompress_files() uncompress_file "$1" "vboxvideo_drv_18.so" uncompress_file "$1" "vboxvideo_drv_19.so" uncompress_file "$1" "vboxvideo_drv_110.so" + uncompress_file "$1" "vboxvideo_drv_111.so" + uncompress_file "$1" "vboxvideo_drv_112.so" uncompress_file "$1" "vboxvideo_drv_70.so" uncompress_file "$1" "vboxvideo_drv_71.so" @@ -76,6 +78,8 @@ uncompress_files() uncompress_file "$1" "vboxmouse_drv_18.so" uncompress_file "$1" "vboxmouse_drv_19.so" uncompress_file "$1" "vboxmouse_drv_110.so" + uncompress_file "$1" "vboxmouse_drv_111.so" + uncompress_file "$1" "vboxmouse_drv_112.so" uncompress_file "$1" "vboxmouse_drv_70.so" uncompress_file "$1" "vboxmouse_drv_71.so" } @@ -188,6 +192,14 @@ if test ! -z "$xorgbin"; then vboxmouse_src="vboxmouse_drv_110.so" vboxvideo_src="vboxvideo_drv_110.so" ;; + 1.11.*) + vboxmouse_src="vboxmouse_drv_111.so" + vboxvideo_src="vboxvideo_drv_111.so" + ;; + 1.12.*) + vboxmouse_src="vboxmouse_drv_112.so" + vboxvideo_src="vboxvideo_drv_112.so" + ;; 7.1.* | *7.2.* ) vboxmouse_src="vboxmouse_drv_71.so" vboxvideo_src="vboxvideo_drv_71.so" diff --git a/src/VBox/Additions/solaris/Makefile.kmk b/src/VBox/Additions/solaris/Makefile.kmk index 99a6ae25c..0646da3c0 100644 --- a/src/VBox/Additions/solaris/Makefile.kmk +++ b/src/VBox/Additions/solaris/Makefile.kmk @@ -185,6 +185,8 @@ SOLARIS_ADD_XORG_DRIVERS = \ vboxmouse_drv_18.so \ vboxmouse_drv_19.so \ vboxmouse_drv_110.so \ + vboxmouse_drv_111.so \ + vboxmouse_drv_112.so \ vboxmouse_drv_70.so \ vboxmouse_drv_71.so \ vboxvideo_drv_13.so \ @@ -195,6 +197,8 @@ SOLARIS_ADD_XORG_DRIVERS = \ vboxvideo_drv_18.so \ vboxvideo_drv_19.so \ vboxvideo_drv_110.so \ + vboxvideo_drv_111.so \ + vboxvideo_drv_112.so \ vboxvideo_drv_70.so \ vboxvideo_drv_71.so diff --git a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk index 74f579045..c8a865183 100644 --- a/src/VBox/Additions/x11/vboxmouse/Makefile.kmk +++ b/src/VBox/Additions/x11/vboxmouse/Makefile.kmk @@ -235,6 +235,38 @@ vboxmouse_drv_110_INCS := \ vboxmouse_drv_110_SOURCES = \ vboxmouse_15.c +DLLS += vboxmouse_drv_111 +vboxmouse_drv_111_TEMPLATE = VBOXGUESTR3XORGMOD +vboxmouse_drv_111_DEFS := $(vboxmouse_drv_70_DEFS) NO_ANSIC +## @todo replace $(VBOX_PATH_X11_ROOT)/xorg-server-1.6.0-local +vboxmouse_drv_111_INCS := \ + $(VBOX_PATH_X11_ROOT)/inputproto-1.9.99.902 \ + $(VBOX_PATH_X11_ROOT)/libpciaccess-0.10.8 \ + $(VBOX_PATH_X11_ROOT)/pixman-0.16.0 \ + $(VBOX_PATH_X11_ROOT)/xextproto-7.1.1 \ + $(VBOX_PATH_X11_ROOT)/xorg-server-1.11.0 \ + $(VBOX_PATH_X11_ROOT)/xorg-server-1.6.0-local \ + $(VBOX_PATH_X11_ROOT)/xproto-7.0.18 \ + $(PATH_SUB_CURRENT) +vboxmouse_drv_111_SOURCES = \ + vboxmouse_15.c + +DLLS += vboxmouse_drv_112 +vboxmouse_drv_112_TEMPLATE = VBOXGUESTR3XORGMOD +vboxmouse_drv_112_DEFS := $(vboxmouse_drv_70_DEFS) NO_ANSIC +## @todo replace $(VBOX_PATH_X11_ROOT)/xorg-server-1.6.0-local +vboxmouse_drv_112_INCS := \ + $(VBOX_PATH_X11_ROOT)/inputproto-1.9.99.902 \ + $(VBOX_PATH_X11_ROOT)/libpciaccess-0.10.8 \ + $(VBOX_PATH_X11_ROOT)/pixman-0.16.0 \ + $(VBOX_PATH_X11_ROOT)/xextproto-7.1.1 \ + $(VBOX_PATH_X11_ROOT)/xorg-server-1.12.0 \ + $(VBOX_PATH_X11_ROOT)/xorg-server-1.6.0-local \ + $(VBOX_PATH_X11_ROOT)/xproto-7.0.18 \ + $(PATH_SUB_CURRENT) +vboxmouse_drv_112_SOURCES = \ + vboxmouse_15.c + endif # neq ($(KBUILD_TARGET),linux) # Check the undefined symbols in the X.Org modules against lists of allowed @@ -338,6 +370,22 @@ $$(vboxmouse_drv_110_0_OUTDIR)/tstvboxmouse110.run: $$(vboxmouse_drv_110_1_STAGE $(vboxmouse_drv_110_1_STAGE_TARGET) $(VBOXMOUSE_SRC_PATH)/undefined_15 $(QUIET)$(APPEND) -t "$@" "done" + TESTING += $(vboxmouse_drv_111_0_OUTDIR)/tstvboxmouse111.run + OTHERS += $(vboxmouse_drv_111_0_OUTDIR)/tstvboxmouse111.run +$$(vboxmouse_drv_111_0_OUTDIR)/tstvboxmouse111.run: $$(vboxmouse_drv_111_1_STAGE_TARGET) + $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) + $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ + $(vboxmouse_drv_111_1_STAGE_TARGET) $(VBOXMOUSE_SRC_PATH)/undefined_15 + $(QUIET)$(APPEND) -t "$@" "done" + + TESTING += $(vboxmouse_drv_112_0_OUTDIR)/tstvboxmouse112.run + OTHERS += $(vboxmouse_drv_112_0_OUTDIR)/tstvboxmouse112.run +$$(vboxmouse_drv_112_0_OUTDIR)/tstvboxmouse112.run: $$(vboxmouse_drv_112_1_STAGE_TARGET) + $(QUIET)$(call MSG_L1,Checking for unresolved symbols in $<) + $(QUIET)/bin/sh $(PATH_ROOT)/src/bldprogs/checkUndefined.sh $(KBUILD_TARGET) \ + $(vboxmouse_drv_112_1_STAGE_TARGET) $(VBOXMOUSE_SRC_PATH)/undefined_15 + $(QUIET)$(APPEND) -t "$@" "done" + endif # neq ($(KBUILD_TARGET),linux) endif # ! VBOX_ONLY_SDK diff --git a/src/VBox/Debugger/DBGCEmulateCodeView.cpp b/src/VBox/Debugger/DBGCEmulateCodeView.cpp index 6239142d6..c5d8afe48 100644 --- a/src/VBox/Debugger/DBGCEmulateCodeView.cpp +++ b/src/VBox/Debugger/DBGCEmulateCodeView.cpp @@ -311,16 +311,16 @@ const DBGCCMD g_aCmdsCodeView[] = { "dia", 0, ~0U, &g_aArgDumpIDT[0], RT_ELEMENTS(g_aArgDumpIDT), 0, dbgcCmdDumpIDT, "[int [..]]", "Dump the interrupt descriptor table (IDT) including not-present entries." }, { "dl", 0, ~0U, &g_aArgDumpDT[0], RT_ELEMENTS(g_aArgDumpDT), 0, dbgcCmdDumpDT, "[sel [..]]", "Dump the local descriptor table (LDT)." }, { "dla", 0, ~0U, &g_aArgDumpDT[0], RT_ELEMENTS(g_aArgDumpDT), 0, dbgcCmdDumpDT, "[sel [..]]", "Dump the local descriptor table (LDT) including not-present entries." }, - { "dpd", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr] [index]", "Dumps page directory entries of the default context." }, - { "dpda", 0, 1, &g_aArgDumpPDAddr[0],RT_ELEMENTS(g_aArgDumpPDAddr), 0, dbgcCmdDumpPageDir, "[addr]", "Dumps specified page directory." }, - { "dpdb", 1, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDirBoth, "[addr] [index]", "Dumps page directory entries of the guest and the hypervisor. " }, - { "dpdg", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr] [index]", "Dumps page directory entries of the guest." }, - { "dpdh", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr] [index]", "Dumps page directory entries of the hypervisor. " }, + { "dpd", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr|index]", "Dumps page directory entries of the default context." }, + { "dpda", 0, 1, &g_aArgDumpPDAddr[0],RT_ELEMENTS(g_aArgDumpPDAddr), 0, dbgcCmdDumpPageDir, "[addr]", "Dumps memory at given address as a page directory." }, + { "dpdb", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDirBoth, "[addr|index]", "Dumps page directory entries of the guest and the hypervisor. " }, + { "dpdg", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr|index]", "Dumps page directory entries of the guest." }, + { "dpdh", 0, 1, &g_aArgDumpPD[0], RT_ELEMENTS(g_aArgDumpPD), 0, dbgcCmdDumpPageDir, "[addr|index]", "Dumps page directory entries of the hypervisor. " }, { "dph", 0, 3, &g_aArgDumpPH[0], RT_ELEMENTS(g_aArgDumpPH), 0, dbgcCmdDumpPageHierarchy, "[addr [cr3 [mode]]", "Dumps the paging hierarchy at for specfied address range. Default context." }, { "dphg", 0, 3, &g_aArgDumpPH[0], RT_ELEMENTS(g_aArgDumpPH), 0, dbgcCmdDumpPageHierarchy, "[addr [cr3 [mode]]", "Dumps the paging hierarchy at for specfied address range. Guest context." }, { "dphh", 0, 3, &g_aArgDumpPH[0], RT_ELEMENTS(g_aArgDumpPH), 0, dbgcCmdDumpPageHierarchy, "[addr [cr3 [mode]]", "Dumps the paging hierarchy at for specfied address range. Hypervisor context." }, { "dpt", 1, 1, &g_aArgDumpPT[0], RT_ELEMENTS(g_aArgDumpPT), 0, dbgcCmdDumpPageTable,"<addr>", "Dumps page table entries of the default context." }, - { "dpta", 1, 1, &g_aArgDumpPTAddr[0],RT_ELEMENTS(g_aArgDumpPTAddr), 0, dbgcCmdDumpPageTable,"<addr>", "Dumps specified page table." }, + { "dpta", 1, 1, &g_aArgDumpPTAddr[0],RT_ELEMENTS(g_aArgDumpPTAddr), 0, dbgcCmdDumpPageTable,"<addr>", "Dumps memory at given address as a page table." }, { "dptb", 1, 1, &g_aArgDumpPT[0], RT_ELEMENTS(g_aArgDumpPT), 0, dbgcCmdDumpPageTableBoth,"<addr>", "Dumps page table entries of the guest and the hypervisor." }, { "dptg", 1, 1, &g_aArgDumpPT[0], RT_ELEMENTS(g_aArgDumpPT), 0, dbgcCmdDumpPageTable,"<addr>", "Dumps page table entries of the guest." }, { "dpth", 1, 1, &g_aArgDumpPT[0], RT_ELEMENTS(g_aArgDumpPT), 0, dbgcCmdDumpPageTable,"<addr>", "Dumps page table entries of the hypervisor." }, @@ -2596,16 +2596,14 @@ static DECLCALLBACK(int) dbgcCmdDumpPageDir(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, } else if (paArgs[0].enmType == DBGCVAR_TYPE_NUMBER) { + /* If it's a number (not an address), it's an index, so convert it to an address. */ Assert(pCmd->pszCmd[3] != 'a'); VarDefault = paArgs[0]; - if (VarDefault.u.u64Number <= 1024) - { - if (fPAE) - return DBGCCmdHlpPrintf(pCmdHlp, "PDE indexing is only implemented for 32-bit paging.\n"); - if (VarDefault.u.u64Number >= PAGE_SIZE / cbEntry) - return DBGCCmdHlpPrintf(pCmdHlp, "PDE index is out of range [0..%d].\n", PAGE_SIZE / cbEntry - 1); - VarDefault.u.u64Number <<= X86_PD_SHIFT; - } + if (fPAE) + return DBGCCmdHlpPrintf(pCmdHlp, "PDE indexing is only implemented for 32-bit paging.\n"); + if (VarDefault.u.u64Number >= PAGE_SIZE / cbEntry) + return DBGCCmdHlpPrintf(pCmdHlp, "PDE index is out of range [0..%d].\n", PAGE_SIZE / cbEntry - 1); + VarDefault.u.u64Number <<= X86_PD_SHIFT; VarDefault.enmType = DBGCVAR_TYPE_GC_FLAT; paArgs = &VarDefault; } @@ -2711,7 +2709,6 @@ static DECLCALLBACK(int) dbgcCmdDumpPageDir(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, VarPDEAddr.u.u64Number += iEntry * sizeof(X86PDE); } cEntriesMax = (PAGE_SIZE - iEntry) / cbEntry; - iEntry /= cbEntry; } /* adjust cEntries */ @@ -3105,7 +3102,6 @@ static DECLCALLBACK(int) dbgcCmdDumpPageTable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHl VarPTEAddr.u.u64Number += iEntry * sizeof(X86PTE); } cEntriesMax = (PAGE_SIZE - iEntry) / cbEntry; - iEntry /= cbEntry; } /* adjust cEntries */ diff --git a/src/VBox/Devices/EFI/DevEFI.cpp b/src/VBox/Devices/EFI/DevEFI.cpp index b6b57ff7e..3393488f2 100644 --- a/src/VBox/Devices/EFI/DevEFI.cpp +++ b/src/VBox/Devices/EFI/DevEFI.cpp @@ -570,6 +570,7 @@ efiFwVolFindFileByType(EFI_FFS_FILE_HEADER const *pFfsFile, uint8_t const *pbEnd if (pFfsFile->Type == FileType) { *pcbFile = FFS_SIZE(pFfsFile); + LogFunc(("Found %RTuuid of type:%d\n", &pFfsFile->Name, FileType)); return pFfsFile; } pFfsFile = (EFI_FFS_FILE_HEADER *)((uintptr_t)pFfsFile + RT_ALIGN(FFS_SIZE(pFfsFile), 8)); @@ -577,7 +578,7 @@ efiFwVolFindFileByType(EFI_FFS_FILE_HEADER const *pFfsFile, uint8_t const *pbEnd return NULL; } -static int efiFindEntryPoint(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfsFile, RTGCPHYS *pImageBase, uint8_t **ppbImage) +static int efiFindRelativeAddressOfEPAndBaseAddressOfModule(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfsFile, RTGCPHYS *pImageBase, uint8_t **ppbImage) { /* * Sections headers are lays at the beginning of block it describes, @@ -636,6 +637,8 @@ static int efiFindEntryPoint(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfs && pHdr->Nt32.FileHeader.SizeOfOptionalHeader == sizeof(pHdr->Nt64.OptionalHeader)), ("%x / %x\n", pHdr->Nt32.FileHeader.Machine, pHdr->Nt32.FileHeader.SizeOfOptionalHeader), VERR_LDR_ARCH_MISMATCH); + EFI_IMAGE_SECTION_HEADER *pSectionsHeaders = NULL; + int cSectionsHeaders = 0; if (pHdr->Nt32.FileHeader.Machine == EFI_IMAGE_FILE_MACHINE_I386) { Log2(("EFI: PE32/i386\n")); @@ -644,21 +647,38 @@ static int efiFindEntryPoint(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfs VERR_BAD_EXE_FORMAT); ImageBase = pHdr->Nt32.OptionalHeader.ImageBase; EpRVA = pHdr->Nt32.OptionalHeader.AddressOfEntryPoint; + EpRVA -= pHdr->Nt32.OptionalHeader.BaseOfCode; AssertLogRelMsgReturn(EpRVA < pHdr->Nt32.OptionalHeader.SizeOfImage, ("%#RGp / %#x\n", EpRVA, pHdr->Nt32.OptionalHeader.SizeOfImage), VERR_BAD_EXE_FORMAT); + pSectionsHeaders = (EFI_IMAGE_SECTION_HEADER *)((uint8_t *)&pHdr->Nt32.OptionalHeader + pHdr->Nt32.FileHeader.SizeOfOptionalHeader); + cSectionsHeaders = pHdr->Nt32.FileHeader.NumberOfSections; } else { - Log2(("EFI: PE+/AMD64\n")); + Log2(("EFI: PE+/AMD64 %RX16\n", pHdr->Nt32.FileHeader.Machine)); AssertLogRelMsgReturn(pHdr->Nt64.OptionalHeader.SizeOfImage < cbFfsFile, ("%#x / %#x\n", pHdr->Nt64.OptionalHeader.SizeOfImage, cbFfsFile), VERR_BAD_EXE_FORMAT); ImageBase = pHdr->Nt64.OptionalHeader.ImageBase; EpRVA = pHdr->Nt64.OptionalHeader.AddressOfEntryPoint; + EpRVA -= pHdr->Nt64.OptionalHeader.BaseOfCode; AssertLogRelMsgReturn(EpRVA < pHdr->Nt64.OptionalHeader.SizeOfImage, ("%#RGp / %#x\n", EpRVA, pHdr->Nt64.OptionalHeader.SizeOfImage), VERR_BAD_EXE_FORMAT); + pSectionsHeaders = (EFI_IMAGE_SECTION_HEADER *)((uint8_t *)&pHdr->Nt64.OptionalHeader + pHdr->Nt64.FileHeader.SizeOfOptionalHeader); + cSectionsHeaders = pHdr->Nt64.FileHeader.NumberOfSections; + } + AssertPtrReturn(pSectionsHeaders, VERR_BAD_EXE_FORMAT); + int idxSection = 0; + for (; idxSection < cSectionsHeaders; ++idxSection) + { + EFI_IMAGE_SECTION_HEADER *pSection = &pSectionsHeaders[idxSection]; + if (!RTStrCmp((const char *)&pSection->Name[0], ".text")) + { + EpRVA += pSection->PointerToRawData; + break; + } } } else if (pHdr->Te.Signature == RT_MAKE_U16('V', 'Z')) @@ -683,7 +703,7 @@ static int efiFindEntryPoint(EFI_FFS_FILE_HEADER const *pFfsFile, uint32_t cbFfs *pImageBase = ImageBase; if (ppbImage != NULL) *ppbImage = (uint8_t *)pbImage; - return ImageBase + EpRVA; + return (EpRVA); } /** @@ -727,14 +747,17 @@ static int efiParseFirmware(PDEVEFI pThis) pFfsFile = efiFwVolFindFileByType(pFfsFile, pbFwVolEnd, EFI_FV_FILETYPE_SECURITY_CORE, &cbFfsFile); AssertLogRelMsgReturn(pFfsFile, ("No SECURITY_CORE found in the firmware volume\n"), VERR_FILE_NOT_FOUND); - RTGCPHYS ImageBase; - uint8_t *pbImage; - pThis->GCEntryPoint0 = efiFindEntryPoint(pFfsFile, cbFfsFile, &ImageBase, &pbImage); - + RTGCPHYS ImageBase = NIL_RTGCPHYS; + uint8_t *pbImage = NULL; + pThis->GCEntryPoint0 = efiFindRelativeAddressOfEPAndBaseAddressOfModule(pFfsFile, cbFfsFile, &ImageBase, &pbImage); + pThis->GCEntryPoint0 += pbImage - pThis->pu8EfiRom; + Assert(pThis->pu8EfiRom <= pbImage); + Assert(pbImage < pThis->pu8EfiRom + pThis->cbEfiRom); /* * Calc the firmware load address from the image base and validate it. */ pThis->GCLoadAddress = ImageBase - (pbImage - pThis->pu8EfiRom); + pThis->GCEntryPoint0 += pThis->GCLoadAddress; AssertLogRelMsgReturn(~(pThis->GCLoadAddress & PAGE_OFFSET_MASK), ("%RGp\n", pThis->GCLoadAddress), VERR_INVALID_PARAMETER); @@ -750,7 +773,9 @@ static int efiParseFirmware(PDEVEFI pThis) pThis->GCLoadAddress, ImageBase, pThis->GCEntryPoint0)); pFfsFile = efiFwVolFindFileByType(pFfsFile, pbFwVolEnd, EFI_FV_FILETYPE_PEI_CORE, &cbFfsFile); - pThis->GCEntryPoint1 = efiFindEntryPoint(pFfsFile, cbFfsFile, NULL, NULL); + pThis->GCEntryPoint1 = efiFindRelativeAddressOfEPAndBaseAddressOfModule(pFfsFile, cbFfsFile, NULL, &pbImage); + pThis->GCEntryPoint1 += pThis->GCLoadAddress; + pThis->GCEntryPoint1 += pbImage - pThis->pu8EfiRom; LogRel(("EFI: Firmware volume loading at %RGp, PEI CORE at with EP at %RGp\n", pThis->GCLoadAddress, pThis->GCEntryPoint1)); return VINF_SUCCESS; @@ -804,8 +829,9 @@ static int efiLoadRom(PDEVEFI pThis, PCFGMNODE pCfg) cbQuart, PGMPHYS_ROM_FLAGS_SHADOWED | PGMPHYS_ROM_FLAGS_PERMANENT_BINARY, "EFI Firmware Volume"); - if (RT_FAILURE(rc)) - return rc; + AssertRCReturn(rc, rc); + rc = PDMDevHlpROMProtectShadow(pThis->pDevIns, pThis->GCLoadAddress, (uint32_t)cbQuart, PGMROMPROT_READ_RAM_WRITE_IGNORE); + AssertRCReturn(rc, rc); rc = PDMDevHlpROMRegister(pThis->pDevIns, pThis->GCLoadAddress + cbQuart, cbQuart, diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd Binary files differindex d1651bf77..50cd2669c 100644 --- a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd +++ b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd Binary files differindex 5ae0aac6e..6edd89dc0 100644 --- a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd +++ b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd diff --git a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp index f830f155d..cd60d1324 100644 --- a/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp +++ b/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp @@ -158,7 +158,8 @@ static DECLCALLBACK(void) vboxVDMACrCtlCbReleaseCmd(PVGASTATE pVGAState, PVBOXVD static int vboxVDMACrCtlPostAsync (PVGASTATE pVGAState, PVBOXVDMACMD_CHROMIUM_CTL pCmd, uint32_t cbCmd, PFNVBOXVDMACRCTL_CALLBACK pfnCompletion, void *pvCompletion) { - if (pVGAState->pDrv->pfnCrHgsmiControlProcess) + if ( pVGAState->pDrv + && pVGAState->pDrv->pfnCrHgsmiControlProcess) { PVBOXVDMACMD_CHROMIUM_CTL_PRIVATE pHdr = VBOXVDMACMD_CHROMIUM_CTL_PRIVATE_FROM_CTL(pCmd); pHdr->pfnCompletion = pfnCompletion; diff --git a/src/VBox/Devices/Network/slirp/socket.c b/src/VBox/Devices/Network/slirp/socket.c index f1bc0f13c..af54b6b66 100644 --- a/src/VBox/Devices/Network/slirp/socket.c +++ b/src/VBox/Devices/Network/slirp/socket.c @@ -1257,7 +1257,13 @@ send_icmp_to_guest(PNATState pData, char *buff, size_t len, struct socket *so, c } m = icm->im_m; - Assert(m != NULL); + if (!m) + { + LogFunc(("%R[natsock] hasn't stored it's mbuf on sent\n", icm->im_so)); + LIST_REMOVE(icm, im_list); + RTMemFree(icm); + return; + } src = addr->sin_addr.s_addr; if (type == ICMP_ECHOREPLY) diff --git a/src/VBox/Devices/PC/BIOS/rombios.c b/src/VBox/Devices/PC/BIOS/rombios.c index 1de5c5bce..e64dd7756 100644 --- a/src/VBox/Devices/PC/BIOS/rombios.c +++ b/src/VBox/Devices/PC/BIOS/rombios.c @@ -11367,6 +11367,8 @@ really_enter_pm: ret pmode_exit: + mov ax, #0x28 + mov ds, ax mov eax, cr0 and al, #0xfe mov cr0, eax diff --git a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.cpp b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.cpp index b42d1cdb4..476645119 100644 --- a/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.cpp +++ b/src/VBox/Frontends/VBoxBalloonCtrl/VBoxBalloonCtrl.cpp @@ -1429,6 +1429,15 @@ int main(int argc, char *argv[]) */ using namespace com; HRESULT hrc = com::Initialize(); +# ifdef VBOX_WITH_XPCOM + if (hrc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + return RTMsgErrorExit(RTEXITCODE_FAILURE, + "Failed to initialize COM because the global settings directory '%s' is not accessible!", szHome); + } +# endif if (FAILED(hrc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to initialize COM!"); diff --git a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp index 6ee0f54e4..97f15fb30 100644 --- a/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp +++ b/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp @@ -791,6 +791,15 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) HRESULT rc; rc = com::Initialize(); +#ifdef VBOX_WITH_XPCOM + if (rc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + RTPrintf("Failed to initialize COM because the global settings directory '%s' is not accessible!", szHome); + return 1; + } +#endif if (FAILED(rc)) { RTPrintf("VBoxHeadless: ERROR: failed to initialize COM!\n"); diff --git a/src/VBox/Frontends/VBoxManage/VBoxManage.cpp b/src/VBox/Frontends/VBoxManage/VBoxManage.cpp index c7d91f5ba..fd69ac961 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManage.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManage.cpp @@ -37,6 +37,7 @@ #include <iprt/asm.h> #include <iprt/buildconfig.h> #include <iprt/initterm.h> +#include <iprt/path.h> #include <iprt/stream.h> #include <iprt/string.h> @@ -326,6 +327,15 @@ int main(int argc, char *argv[]) */ using namespace com; HRESULT hrc = com::Initialize(); +# ifdef VBOX_WITH_XPCOM + if (hrc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + return RTMsgErrorExit(RTEXITCODE_FAILURE, + "Failed to initialize COM because the global settings directory '%s' is not accessible!", szHome); + } +# endif if (FAILED(hrc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to initialize COM!"); diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp index 4e41285b9..22be9a104 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp @@ -180,9 +180,11 @@ int handleControlVM(HandlerArg *a) else if (!strcmp(a->argv[1], "savestate")) { /* first pause so we don't trigger a live save which needs more time/resources */ + bool fPaused = false; rc = console->Pause(); if (FAILED(rc)) { + bool fError = true; if (rc == VBOX_E_INVALID_VM_STATE) { /* check if we are already paused */ @@ -195,15 +197,22 @@ int handleControlVM(HandlerArg *a) RTMsgError("Machine in invalid state %d -- %s\n", machineState, machineStateToName(machineState, false)); } + else + { + fError = false; + fPaused = true; + } } - break; + if (fError) + break; } ComPtr<IProgress> progress; CHECK_ERROR(console, SaveState(progress.asOutParam())); if (FAILED(rc)) { - console->Resume(); + if (!fPaused) + console->Resume(); break; } @@ -215,7 +224,8 @@ int handleControlVM(HandlerArg *a) RTMsgError("Failed to save machine state. Error message: %lS", info.getText().raw()); else RTMsgError("Failed to save machine state. No error message available!"); - console->Resume(); + if (!fPaused) + console->Resume(); } } else if (!strcmp(a->argv[1], "acpipowerbutton")) diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp index c95bb709f..b4362c28d 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageDisk.cpp @@ -444,7 +444,7 @@ int handleModifyHardDisk(HandlerArg *a) if (!FilenameOrUuid) FilenameOrUuid = ValueUnion.psz; else - return errorSyntax(USAGE_CREATEHD, "Invalid parameter '%s'", ValueUnion.psz); + return errorSyntax(USAGE_MODIFYHD, "Invalid parameter '%s'", ValueUnion.psz); break; default: diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp index 31b456507..e1700fb6f 100644 --- a/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp +++ b/src/VBox/Frontends/VBoxManage/VBoxManageHostonly.cpp @@ -56,12 +56,12 @@ static int handleCreate(HandlerArg *a, int iStart, int *pcProcessed) // index++; ComPtr<IHost> host; - CHECK_ERROR(a->virtualBox, COMGETTER(Host)(host.asOutParam())); + CHECK_ERROR_RET(a->virtualBox, COMGETTER(Host)(host.asOutParam()), 1); ComPtr<IHostNetworkInterface> hif; ComPtr<IProgress> progress; - CHECK_ERROR(host, CreateHostOnlyNetworkInterface (hif.asOutParam(), progress.asOutParam())); + CHECK_ERROR_RET(host, CreateHostOnlyNetworkInterface (hif.asOutParam(), progress.asOutParam()), 1); rc = showProgress(progress); *pcProcessed = index - iStart; diff --git a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp index 0568df856..17b065f07 100644 --- a/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp +++ b/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp @@ -1318,6 +1318,15 @@ DECLEXPORT(int) TrustedMain(int argc, char **argv, char **envp) } rc = com::Initialize(); +#ifdef VBOX_WITH_XPCOM + if (rc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + RTPrintf("Failed to initialize COM because the global settings directory '%s' is not accessible!\n", szHome); + return 1; + } +#endif if (FAILED(rc)) { RTPrintf("Error: COM initialization failed (rc=%Rhrc)!\n", rc); diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk index 9b6913115..76837f9dc 100644 --- a/src/VBox/Frontends/VirtualBox/Makefile.kmk +++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk @@ -265,8 +265,8 @@ if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_GUI_USE_QGL) VirtualBox_LIBS.linux += GL VirtualBox_LIBS.freebsd += GL endif +VirtualBox_LIBS += $(PATH_STAGE_LIB)/VBoxOGLTest$(VBOX_SUFF_LIB) -VirtualBox_LIBS += $(VBoxOGLTest_1_TARGET) # Headers containing definitions of classes that use the Q_OBJECT macro. VirtualBox_QT_MOCHDRS = \ diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ar.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ar.ts index e18bd8f1e..84c8c92b2 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ar.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ar.ts @@ -4415,7 +4415,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts index 43a942246..4f202945f 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts @@ -5548,8 +5548,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Виртуалните Добавки на VirtualBox за тази виртуална машина изглежда не Ñа доÑтъпни, а Ñподелените папки не могат да Ñе използват без Ñ‚ÑÑ…. За да използвате Ñподелени папки във виртуалната машина, молÑ, инÑталирайте Виртуалните Добавки, ако не Ñа инÑталирани, или ги преинÑталирайте, ако не работÑÑ‚ правилно, като изберете <b>ИнÑталиране на Виртуални Добавки</b> от менюто <b>Машина</b>. Ðко те Ñа инÑталирани, но машината вÑе още не е заредила напълно, Ñподелените папки ще Ñтанат доÑтъпни, когато машината зареди.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Виртуалната машина <b>%1</b> текущо е в запомнено ÑÑŠÑтоÑние.</p><p>Ðко продължите, текущото ÑÑŠÑтоÑние на изнеÑената машина ще бъде отхвърлено. Имайте предвид, че ÑъщеÑтвуващата машина не е променена.</p></numerusform> <numerusform><p>Виртуалните машини <b>%1</b> текущо Ñа в запомнено ÑÑŠÑтоÑние.</p><p>Ðко продължите, текущото ÑÑŠÑтоÑние на изнеÑените машини ще бъде отхвърлено. Имайте предвид, че ÑъщеÑтвуващите машини не Ñа променени.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts index b0d9a131f..915eb699d 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts @@ -6000,8 +6000,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Sembla que les Guest Additions del VirtualBox no estan disponibles en aquesta mà quina i les carpetes compartides no es poden fer servir sense elles. Per fer servir carpetes compartides a la mà quina virtual, instal·leu les Guest Additions si no es troben instal·lades o torneu a instal·lar-les si no estan funcionant correctament seleccionant <b>Instal·la les Guest Additions</b> al menú <b>Mà quina</b>. Si es troben instal·lades però la mà quina no s'ha iniciat completament, aleshores estaran disponibles una vegada estigui iniciada.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>La mà quina virtual <b>%1</b> es troba en un estat desat.</p><p>Si continueu, es descartarà l'estat en temps d'execució de la mà quina virtual exportada. Tingueu en compte que la mà quina existent no canviarà .</p></numerusform> <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat desat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts index 6afcff776..60311688f 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts @@ -6000,8 +6000,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Pareix que les Guest Additions del VirtualBox no estan disponibles en esta mà quina i les carpetes compartides no es poden fer servir sense elles. Per fer servir carpetes compartides a la mà quina virtual, instal·leu les Guest Additions si no es troben instal·lades o torneu a instal·lar-les si no estan funcionant correctament seleccionant <b>Instal·la les Guest Additions</b> al menú <b>Mà quina</b>. Si es troben instal·lades però la mà quina no s'ha iniciat completament, aleshores estaran disponibles una vegada estiga iniciada.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>La mà quina virtual <b>%1</b> es troba en un estat alçat.</p><p>Si continueu, es descartarà l'estat en temps d'execució de la mà quina virtual exportada. Tingueu en compte que la mà quina existent no canviarà .</p></numerusform> <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat alçat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> <numerusform><p>Les mà quines virtuals <b>%1</b> es troben en un estat alçat.</p><p>Si continueu, es descartaran els estat en temps d'execució de les mà quines virtuals exportades. Tingueu en compte que les mà quines existents no canviaran.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts index 1027e0220..0318a3f6c 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts @@ -5840,8 +5840,8 @@ p, li { white-space: pre-wrap; } <translation>NepodaÅ™ilo se odpojit disketovou mechaniku (<nobr><b>%1</b></nobr>) ze slotu zaÅ™Ãzenà <i>%2</i> poÄÃtaÄe <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Virtuálnà poÄÃtaÄ <b>%1</b> je nynà v uloženém stavu.</p><p>Pokud budete pokraÄovat v exportu virtuálnÃho poÄÃtaÄe, bude aktuálnà stav ztracen. ExistujÃcà virtuálnà poÄÃtaÄ nebude zmÄ›nÄ›n.</p></numerusform> <numerusform><p>Virtuálnà poÄÃtaÄe <b>%1</b> jsou nynà v uloženém stavu.</p><p>Pokud budete pokraÄovat v exportu virtuálnÃch poÄÃtaÄů, bude aktuálnà stav ztracen. ExistujÃcà virtuálnà poÄÃtaÄe nebudou zmÄ›nÄ›ny.</p></numerusform> <numerusform><p>Virtuálnà poÄÃtaÄe <b>%1</b> jsou nynà v uloženém stavu.</p><p>Pokud budete pokraÄovat v exportu virtuálnÃch poÄÃtaÄů, bude aktuálnà stav ztracen. ExistujÃcà virtuálnà poÄÃtaÄe nebudou zmÄ›nÄ›ny.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts index 9cc5e401c..8d4d2af26 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts @@ -5385,8 +5385,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>VirtualBox Gæstetilføjelser er vist ikke tilgængelige pÃ¥ denne virtuelle maskine og delte mapper fungerer ikke uden. For at kunne anvende delte mapper i den virtuelle maskine, skal du installere gæstetilføjelserne, hvis de ikke er installeret eller geninstallere, hvis de ikke fungerer korrekt ved at vælge <b>Installér gæstetilføjelser</b> fra menuen <b>Enheder</b>. Delte mapper vil først være tilgængelige, nÃ¥r maskinen er startet helt op.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>De virtuelle maskiner <b>%1</b> har gemte tilstande.</p><p>Hvis du fortsætter vil kørselstilstanden af de eksporterede maskiner blive kasseret. Bemærk at de nuværende maskiner ikke ændres.</p></numerusform> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts index 67d9d0715..278b77383 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts @@ -4181,13 +4181,6 @@ <source><p>You are about to add a new floppy drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual floppy disk to put in the drive or to leave it empty for now?</p></source> <translation><p>Sie sind dabei, ein neues virtuelles Diskettenlaufwerk an den Controller <b>%1</b> anzuschließen.</p><p>Möchten Sie ein existierendes Medium an das Laufwerk binden oder soll das Laufwerk jetzt kein Medium enthalten?</p></translation> </message> - <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> - <numerusform><p>Die virtuelle Maschine(n) <b>%1</b> haben momentan ihren Zustand auf der Festplatte gesichert.</p><p>Falls Sie fortfahren, wird dieser Zustand nicht mit exportiert. Der Zustand der existierenden virtuellen Maschinen wird nicht verändert.</p></numerusform> - <numerusform></numerusform> - </translation> - </message> <message> <source>Failed to update Guest Additions. The Guest Additions installation image will be mounted to provide a manual installation.</source> <translation>Die Gasterweiterungen konnten nicht aktualisiert werden. Das ISO-Abbild mit den Erweiterungen wird jetzt für eine manuelle gemountet.</translation> @@ -4420,6 +4413,18 @@ <comment>extension pack</comment> <translation></translation> </message> + <message> + <source><p>Failed to initialize COM because the VirtualBox global configuration directory <b><nobr>%1</nobr></b> is not accessible. Please check the permissions of this directory and of its parent directory.</p><p>The application will now terminate.</p></source> + <translation><p>Das COM-Subsystem konnte nicht gestartet werden, weil auf das Verzeichnis <b><nobr>%1</nobr></b> nicht zugegriffen werden kann. Bitte überprüfen Sie die Zugriffsrechte für dieses Verzeichnis und das Verzeichnis darüber.</p><p>Die Anwendung wird nun geschlossen.</p></translation> + </message> + <message numerus="yes"> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment> + <translation> + <numerusform><p>Die virtuelle Maschine <b>%1</b> hat momentan ihren Zustand auf der Festplatte gesichert.</p><p>Falls Sie fortfahren, wird dieser Zustand nicht mit exportiert. Der Zustand der existierenden virtuellen Maschine wird nicht verändert.</p></numerusform> + <numerusform><p>Die %n virtuellen Maschinen <b>%1</b> haben momentan ihren Zustand auf der Festplatte gesichert.</p><p>Falls Sie fortfahren, wird dieser Zustand nicht mit exportiert. Der Zustand der existierenden virtuellen Maschinen wird nicht verändert.</p></numerusform> + </translation> + </message> </context> <context> <name>UIMiniProcessWidgetUserManual</name> @@ -6368,10 +6373,6 @@ <translation>ICH9</translation> </message> <message> - <source>and</source> - <translation>und</translation> - </message> - <message> <source>Deny</source> <comment>NetworkAdapterPromiscModePolicyType</comment> <translation>verweigern (deny)</translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts index 5c05101d2..aea66565a 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts @@ -4186,7 +4186,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_en.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_en.ts index 9d45cdd0a..dd2fbb7a6 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_en.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_en.ts @@ -5,8 +5,8 @@ <name>UIMessageCenter</name> <message numerus="yes"> <location filename="../src/globals/UIMessageCenter.cpp" line="2345"/> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>The virtual machine <b>%1</b> is currently in a saved state.</p><p>If you continue the runtime state of the exported machine will be discarded. Note that the existing machine is not changed.</p></numerusform> <numerusform><p>The virtual machines <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machines will be discarded. Note that the existing machines are not changed.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts index b537c00b1..c27e549f4 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts @@ -5806,8 +5806,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Las «Guest Additions» de VirtualBox no parece que estén disponibles en esta máquina virtual y las carpetas compartidas no pueden ser usadas sin ellas. Para usar las carpetas compartidas dentro de la máquina virtual instale las «Guest Additions» si no están instaladas o reinstalelas si no están funcionando correctamente, seleccionando <b>Instalar «Guest Additions»</b> del menú <b>Máquina</b>. Si están instaladas pero la máquina no está todavÃa completamente iniciada entonces las carpetas compartidas estarán disponibles una vez lo esté.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>La máquina virtual <b>%1</b> está actualmente en un estado guardado.</p><p>Si continua, el estado de ejecución de la máquina exportada será descartado. Esto no afectará a las máquina existentes.</p></numerusform> <numerusform><p>Las máquinas virtuales <b>%1</b> están actualmente en un estado guardado.</p><p>Si continua, los estados de ejecución de las máquinas exportadas serán descartados. Esto no afectará a las máquinas existentes.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts index 8b13960fd..94a30a80e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts @@ -4930,7 +4930,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts index ed71a2638..93fdb0801 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts @@ -5492,7 +5492,7 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts index c4d05c396..5c0710f2c 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts @@ -4952,8 +4952,8 @@ <translation>Impossible de détacher le lecteur disquettes (<nobr><b>%1</b></nobr>) de l'emplacement <i>%2</i> de la machine <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>La machine virtuelle <b>%1</b> est actuellement dans l'état sauvegardé.</p><p>Si vous continuez l'état d'exécution de la machine sera rejeté. Aucune autre machine ne sera modifiée.</p></numerusform> <numerusform><p>Les machines virtuelles <b>%1</b> sont actuellement dans l'état sauvegardé.</p><p>Si vous continuez l'état d'exécution des machines sera rejeté. Aucune autre machine ne sera modifiée.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts index 76411fd1f..2b2ea0f15 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts @@ -5184,7 +5184,7 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts index 940074402..ee7bb6ab0 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts @@ -5786,8 +5786,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Úgy tűnik a VirtualBox Integrációs szolgáltatások nem érhetÅ‘k el a virtuális gépen, és nélküle a megosztott mappák nem használhatók. A virtuális gépen belüli megosztott mappák használatához telepÃtsd fel az Integrációs szolgáltatásokat, ha nincsenek telepÃtve, vagy ha csak nem működnek helyesen, az <b>Eszközök</b> menüben az <b>Integrációs szolgáltatások telepÃtése...</b> választásával. Ha telepÃtve vannak, de a gép nem teljesen indult még el, a megosztott mappák elérhetÅ‘k lesznek.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>A virtuális gép jelenleg mentett állapotban van: <b>%1</b>.</p><p>Ha folytatod, az exportált gép állapota elveszik. A létezÅ‘ gépek nem módosulnak.</p></numerusform> </translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts index 6e9a4a7a3..811a4da50 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts @@ -5084,7 +5084,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts index 9a0ac345e..543ae72d1 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts @@ -6125,8 +6125,8 @@ p, li { white-space: pre-wrap; } <translation>Scollegamento del dispositivo floppy (<nobr><b>%1</b></nobr>) allo slot <i>%2</i> della macchina <b>%3</b> non riuscito.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>La macchina virtuale <b>%1</b> è attualmente in uno stato salvato.</p><p>Se continui, lo stato di esecuzione della macchina esportata sarà scartato. Nota che la macchina esistente non viene modificata.</p></numerusform> <numerusform><p>Le macchine virtuali <b>%1</b> sono attualmente in uno stato salvato.</p><p>Se continui, lo stato di esecuzione delle macchine esportate sarà scartato. Nota che le macchine esistenti non sono modificate.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts index 062ff7e31..5bfa46722 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts @@ -6835,8 +6835,8 @@ p, li { white-space: pre-wrap; } </message> <message numerus="yes"> <location filename="../src/globals/UIMessageCenter.cpp" line="2345"/> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>仮想マシン<b>"%1"</b>ã¯çŠ¶æ…‹ã®ä¿å˜ä¸ã§ã™ã€‚</p><p>続行ã™ã‚‹ã¨ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ãŸä»®æƒ³ãƒžã‚·ãƒ³ã®ãƒ©ãƒ³ã‚¿ã‚¤ãƒ 状態ã¯ç ´æ£„ã•れã¾ã™ã€‚注:既å˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã¯å¤‰æ›´ã•れã¾ã›ã‚“。</p></numerusform> </translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts index 9c3e3c41b..c729b30f1 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts @@ -5207,7 +5207,7 @@ medium</comment> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts index c34669a0a..d06bd2d58 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts @@ -5634,8 +5634,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>현재 ê°€ìƒ ë¨¸ì‹ ì—서 VirtualBox 게스트 í™•ìž¥ì„ ì‚¬ìš©í• ìˆ˜ 없는 것 같으며, ê³µìœ í´ë”를 ì‚¬ìš©í•˜ë ¤ë©´ ì´ ê¸°ëŠ¥ì´ í•„ìš”í•©ë‹ˆë‹¤. ê°€ìƒ ë¨¸ì‹ ì—서 ê³µìœ í´ë”를 ì‚¬ìš©í•˜ë ¤ë©´, 게스트 í™•ìž¥ì´ ì„¤ì¹˜ë˜ì–´ 있지 않으면 ìš°ì„ ì„¤ì¹˜í•˜ì‹œê³ , ìž‘ë™í•˜ì§€ 않으면 <b>ë¨¸ì‹ </b> ë©”ë‰´ì˜ <b>게스트 확장 설치</b> í•ëª©ì„ ì„ íƒí•˜ì…”서 다시 설치하ì‹ì‹œì˜¤. 게스트 í™•ìž¥ì´ ì„¤ì¹˜ë˜ì–´ 있으나 ê°€ìƒ ë¨¸ì‹ ì´ ì‹œìž‘í•˜ëŠ” ì¤‘ì¼ ë•Œì—는 ê³µìœ í´ë” ê¸°ëŠ¥ì´ ìž‘ë™í•˜ì§€ 않습니다.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>ê°€ìƒ ë¨¸ì‹ <b>%1</b>ì˜ ì‹¤í–‰ ìƒíƒœê°€ ì €ìž¥ë˜ì–´ 있습니다.</p><p>ë¨¸ì‹ ì„ ë‚´ë³´ë‚´ë”ë¼ë„ ì €ìž¥ëœ ì‹¤í–‰ ìƒíƒœëŠ” ë‚´ë³´ë‚´ì§€ ì•Šì„ ê²ƒìž…ë‹ˆë‹¤. 기존 ë¨¸ì‹ ì˜ ì‹¤í–‰ ìƒíƒœëŠ” 변경ë˜ì§€ 않습니다.</p></numerusform> </translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts index 5317b7e2c..fe4ef6847 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts @@ -26,7 +26,7 @@ <message> <source>--</source> <comment>Language country name, in English (empty if native country name is empty)</comment> - <translation>Lithuania</translation> + <translation>Lithuanian</translation> </message> </context> <context> @@ -118,11 +118,11 @@ <name>QIHttp</name> <message> <source>Connection timed out</source> - <translation type="unfinished">Bandymui prisijungti laikas baigÄ—si</translation> + <translation>Laikas skirtas prisijungti baigÄ—si</translation> </message> <message> <source>Could not locate the file on the server (response: %1)</source> - <translation type="unfinished">Serveryje nepavyksta rasti rinkmenos (atsakas: %1)</translation> + <translation>Rasti rinkmenos serveryje nepavyksta (atsakas: %1)</translation> </message> </context> <context> @@ -263,7 +263,7 @@ </message> <message> <source>&Insert Ctrl-Alt-Backspace</source> - <translation type="unfinished">Su&rinkti Vald+Alt+Naikinti</translation> + <translation>Su&rinkti Vald+Alt+Naikinti</translation> </message> <message> <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source> @@ -271,7 +271,7 @@ </message> <message> <source>Take &Snapshot...</source> - <translation type="unfinished">&Sukurti dabartinio bÅ«vio kopijÄ…...</translation> + <translation>&Sukurti dabartinio bÅ«vio kopijÄ…...</translation> </message> <message> <source>Take a snapshot of the virtual machine</source> @@ -1229,141 +1229,141 @@ <message> <source>Name</source> <comment>details report</comment> - <translation type="unfinished">Pavadinimas</translation> + <translation>Pavadinimas</translation> </message> <message> <source>OS Type</source> <comment>details report</comment> - <translation type="unfinished">OS tipas</translation> + <translation>OS tipas</translation> </message> <message> <source>Base Memory</source> <comment>details report</comment> - <translation type="unfinished">PagrindinÄ— atmintis</translation> + <translation>PagrindinÄ— atmintis</translation> </message> <message> <source><nobr>%1 MB</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1 MB</nobr></translation> + <translation><nobr>%1 MB</nobr></translation> </message> <message> <source>Processors</source> <comment>details report</comment> - <translation type="unfinished">Procesoriai</translation> + <translation>Procesoriai</translation> </message> <message> <source><nobr>%1</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1</nobr></translation> + <translation><nobr>%1</nobr></translation> </message> <message> <source>Boot Order</source> <comment>details report</comment> - <translation type="unfinished">Paleidimo eiliÅ¡kumas</translation> + <translation>Krovimo tvarka</translation> </message> <message> <source>ACPI</source> <comment>details report</comment> - <translation type="unfinished">ACPI</translation> + <translation>ACPI</translation> </message> <message> <source>IO APIC</source> <comment>details report</comment> - <translation type="unfinished">IO APIC</translation> + <translation>IO APIC</translation> </message> <message> <source>BIOS</source> <comment>details report</comment> - <translation type="unfinished">BIOS</translation> + <translation>BIOS</translation> </message> <message> <source>VT-x/AMD-V</source> <comment>details report</comment> - <translation type="unfinished">VT-x/AMD-V</translation> + <translation>VT-x/AMD-V</translation> </message> <message> <source>PAE/NX</source> <comment>details report</comment> - <translation type="unfinished">PAE/NX</translation> + <translation>PAE/NX</translation> </message> <message> <source>Acceleration</source> <comment>details report</comment> - <translation type="unfinished">Spartinimas</translation> + <translation>Spartinimas</translation> </message> <message> <source>Video Memory</source> <comment>details report</comment> - <translation type="unfinished">Vaizdo atmintis</translation> + <translation>Vaizdo atmintis</translation> </message> <message> <source>Screens</source> <comment>details report</comment> - <translation type="unfinished">Ekranai</translation> + <translation>Ekranai</translation> </message> <message> <source>2D Video</source> <comment>details report</comment> - <translation type="unfinished">2D vaizdas</translation> + <translation>2D vaizdas</translation> </message> <message> <source>3D</source> <comment>details report</comment> - <translation type="unfinished">3D</translation> + <translation>3D</translation> </message> <message> <source>Remote Desktop Server Port</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished">Nuotolinio ekrano serverio prievadas</translation> + <translation>Nuotolinio darbastalio serverio prievadas</translation> </message> <message> <source>Remote Desktop Server</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished">Nuotolinio ekrano serveris</translation> + <translation>Nuotolinio darbastalio serveris</translation> </message> <message> <source>Disabled</source> <comment>details report (VRDE Server)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>IÅ¡jungta</translation> </message> <message> <source>(CD/DVD)</source> - <translation type="unfinished">(CD/DVD)</translation> + <translation>(CD/DVD)</translation> </message> <message> <source>Not Attached</source> <comment>details report (Storage)</comment> - <translation type="unfinished">Neprijungta</translation> + <translation>Neprijungta</translation> </message> <message> <source>Host Driver</source> <comment>details report (audio)</comment> - <translation type="unfinished">Pagr. kompiuterio tvarkyklÄ—</translation> + <translation>Pagr. kompiuterio tvarkyklÄ—</translation> </message> <message> <source>Controller</source> <comment>details report (audio)</comment> - <translation type="unfinished">Valdiklis</translation> + <translation>Valdiklis</translation> </message> <message> <source>Disabled</source> <comment>details report (audio)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>IÅ¡jungta</translation> </message> <message> <source>Bridged adapter, %1</source> <comment>details report (network)</comment> - <translation type="unfinished">Tinklų tiltas, %1</translation> + <translation>Tinklų tiltas, %1</translation> </message> <message> <source>Internal network, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">Vidinis tinklas, „%1“</translation> + <translation>Vidinis tinklas, „%1“</translation> </message> <message> <source>Host-only adapter, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">PlokÅ¡tÄ— prisijungimui tik prie pagrindinio kompiuterio, „%1“</translation> + <translation>PlokÅ¡tÄ— prisijungimui tik prie pagrindinio kompiuterio, „%1“</translation> </message> <message> <source>VDE network, '%1'</source> @@ -1373,62 +1373,62 @@ <message> <source>Adapter %1</source> <comment>details report (network)</comment> - <translation type="unfinished">%1 plokÅ¡tÄ—</translation> + <translation>%1 plokÅ¡tÄ—</translation> </message> <message> <source>Disabled</source> <comment>details report (network)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>Uždrausta</translation> </message> <message> <source>Port %1</source> <comment>details report (serial ports)</comment> - <translation type="unfinished">%1 prievadas</translation> + <translation>%1 prievadas</translation> </message> <message> <source>Disabled</source> <comment>details report (serial ports)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>Uždrausta</translation> </message> <message> <source>Port %1</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished">%1 prievadas</translation> + <translation>%1 prievadas</translation> </message> <message> <source>Disabled</source> <comment>details report (parallel ports)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>Uždrausta</translation> </message> <message> <source>Device Filters</source> <comment>details report (USB)</comment> - <translation type="unfinished">Ä®taisų filtras</translation> + <translation>Ä®taisų filtras</translation> </message> <message> <source>%1 (%2 active)</source> <comment>details report (USB)</comment> - <translation type="unfinished">%1 (%2 įgalinta)</translation> + <translation>%1 (%2 įgalinta)</translation> </message> <message> <source>Disabled</source> <comment>details report (USB)</comment> - <translation type="unfinished">Uždrausta</translation> + <translation>Uždrausta</translation> </message> <message> <source>Shared Folders</source> <comment>details report (shared folders)</comment> - <translation type="unfinished">Bendrieji aplankai</translation> + <translation>Bendrieji aplankai</translation> </message> <message> <source>None</source> <comment>details report (shared folders)</comment> - <translation type="unfinished">NÄ—ra</translation> + <translation>NÄ—ra</translation> </message> <message> <source>None</source> <comment>details report (description)</comment> - <translation type="unfinished">NÄ—ra</translation> + <translation>NÄ—ra</translation> </message> <message> <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source> @@ -1497,27 +1497,27 @@ <message> <source><nobr>%1%</nobr></source> <comment>details report</comment> - <translation type="unfinished"><nobr>%1%</nobr></translation> + <translation><nobr>%1%</nobr></translation> </message> <message> <source>Execution Cap</source> <comment>details report</comment> - <translation type="unfinished">Vykdymo riba</translation> + <translation>Vykdymo riba</translation> </message> <message> <source>Nested Paging</source> <comment>details report</comment> - <translation type="unfinished">Lizdinis puslapiavimas</translation> + <translation>Lizdinis puslapiavimas</translation> </message> <message> <source>Generic driver, '%1'</source> <comment>details report (network)</comment> - <translation type="unfinished">PagrindinÄ— tvarkyklÄ—, „%1“</translation> + <translation>PagrindinÄ— tvarkyklÄ—, „%1“</translation> </message> <message> <source>Generic driver, '%1' {&nbsp;%2&nbsp;}</source> <comment>details report (network)</comment> - <translation type="unfinished">PagrindinÄ— tvarkyklÄ—, „%1“ {&nbsp;%2&nbsp;}</translation> + <translation>PagrindinÄ— tvarkyklÄ—, „%1“ {&nbsp;%2&nbsp;}</translation> </message> </context> <context> @@ -2279,7 +2279,7 @@ <name>UIGlobalSettingsProxy</name> <message> <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source> - <translation type="unfinished"></translation> + <translation>Kai pažymÄ—ta, VirtualBox užduotims tokioms kaip sveÄio papildinių parsiuntimas ar atnaujinimų tikrinimas, naudos tarpinio serverio nustatymus.</translation> </message> <message> <source>&Enable proxy</source> @@ -2303,7 +2303,7 @@ </message> <message> <source>When checked the authentication supplied will be used with the proxy server.</source> - <translation type="unfinished"></translation> + <translation>Kai pažymÄ—ta, tarpniam serveriui bus naudojamas tapatybÄ—s patirkinimas.</translation> </message> <message> <source>&Use authentication</source> @@ -3051,7 +3051,7 @@ </message> <message> <source>you enabled 3D acceleration. However, 3D acceleration is not working on the current host setup so you will not be able to start the VM.</source> - <translation type="unfinished"></translation> + <translation>jÅ«s įjungÄ—te 3D spartinimÄ…. Nepaisant to dabartinio kompiuterio sÄ…rankoj 3D spartinimas neveikia, todÄ—l jÅ«s negalÄ—site paleisti VM.</translation> </message> </context> <context> @@ -3222,15 +3222,15 @@ </message> <message> <source>&Promiscuous Mode:</source> - <translation type="unfinished"></translation> + <translation>&MiÅ¡rus režimas:</translation> </message> <message> <source>Selects the promiscuous mode policy of the network adapter when attached to an internal network, host only network or a bridge.</source> - <translation type="unfinished"></translation> + <translation>Pasirenka miÅ¡rų tiklo plokÅ¡tÄ—s veikimo režimÄ…, kai prisijungta prie vidinio tinklo, tik pagrindiniam kompiuteriui ar tiltui.</translation> </message> <message> <source>Generic Properties:</source> - <translation type="unfinished"></translation> + <translation>Bendros savybÄ—s:</translation> </message> <message> <source>Enter any configuration settings here for the network attachment driver you will be using. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source> @@ -3816,7 +3816,7 @@ </message> <message> <source>When checked the virtual disk will not be removed when the guest system ejects it.</source> - <translation type="unfinished"></translation> + <translation>Kai pažymÄ—ta, virtualÅ«s diskai nebus iÅ¡imti kai sveÄio sitema juos iÅ¡stums.</translation> </message> <message> <source>&Live CD/DVD</source> @@ -3824,7 +3824,7 @@ </message> <message> <source>When checked the guest system will see the virtual disk as a solid state device.</source> - <translation type="unfinished"></translation> + <translation>Kai pažymÄ—ta, sveÄio sitema matys virtualų diskÄ… kaip kietos bÅ«senos įrenginį.</translation> </message> <message> <source>&Solid-state drive</source> @@ -3836,11 +3836,11 @@ </message> <message> <source>no name specified for controller at position <b>%1</b>.</source> - <translation type="unfinished"></translation> + <translation>valdikliui pozicijoje <b>%1</b> nenurodytas vardas.</translation> </message> <message> <source>controller at position <b>%1</b> uses the name that is already used by controller at position <b>%2</b>.</source> - <translation type="unfinished"></translation> + <translation>valdiklis pozicijoje <b>%1</b> naudoja vcardÄ… kuris jau naudojamas valdiklio <b>%2</b>.</translation> </message> <message> <source>no hard disk is selected for <i>%1</i>.</source> @@ -3862,7 +3862,7 @@ </message> <message> <source>&Port Count:</source> - <translation type="unfinished"></translation> + <translation>&Prievadų skaiÄius:</translation> </message> <message> <source>Selects the port count of the SATA storage controller currently selected in the Storage Tree. This must be at least one more than the highest port number you need to use.</source> @@ -4590,7 +4590,7 @@ </message> <message> <source><p>Failed to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> - <translation type="unfinished"><p>Nepavyko parsiųsti VirtualBox sveÄio papildinių CD avaizdo iÅ¡ <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> + <translation><p>Nepavyko parsiųsti VirtualBox sveÄio papildinių CD avaizdo iÅ¡ <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> </message> <message> <source><p>Are you sure you want to download the VirtualBox Guest Additions CD image from <nobr><a href="%1">%2</a></nobr> (size %3 bytes)?</p></source> @@ -4895,7 +4895,7 @@ </message> <message> <source><p>Unable to obtain the new version information due to the following error:</p><p><b>%1</b></p></source> - <translation type="unfinished"><p>Nepavyksta gauti informacijos apie naujÄ… versijÄ…, nes įvyko klaida:</p><p><b>%1</b></p></translation> + <translation><p>Nepavyksta gauti informacijos apie naujÄ… versijÄ…, nes įvyko klaida:</p><p><b>%1</b></p></translation> </message> <message> <source><p>One or more virtual hard disks, CD/DVD or floppy media are not currently accessible. As a result, you will not be able to operate virtual machines that use these media until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see what media are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source> @@ -5205,7 +5205,7 @@ </message> <message> <source><p>Failed to download the VirtualBox User Manual from <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></source> - <translation type="unfinished"><p>Nepavyko parsiųsti VirtualBox naudojo žinyno iÅ¡ <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> + <translation><p>Nepavyko parsiųsti VirtualBox naudojo žinyno iÅ¡ <nobr><a href="%1">%2</a>.</nobr></p><p>%3</p></translation> </message> <message> <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%2</a></nobr> and saved locally as <nobr><b>%3</b>.</nobr></p></source> @@ -5255,11 +5255,11 @@ </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source> - <translation type="unfinished"><p>Ketinate paÅ¡alinti virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o.</p><p>Ar norÄ—tumÄ—te kartu paÅ¡alinti iÅ¡ standžiojo disko ir susijusias rinkmenas?</p></translation> + <translation><p>Ketinate paÅ¡alinti virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o.</p><p>Ar norÄ—tumÄ—te kartu paÅ¡alinti iÅ¡ standžiojo disko ir susijusias rinkmenas?</p></translation> </message> <message> <source><p>You are about to remove the virtual machine <b>%1</b> from the machine list.</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source> - <translation type="unfinished"><p>Ketinate paÅ¡alinti virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o.</p><p>Ar norÄ—tumÄ—te kartu paÅ¡alinti iÅ¡ standžiojo disko ir susijusias rinkmenas? Tokiu atveju bus paÅ¡alintos virtualius diskus turinÄios rinkmenos, jei tik jų nenaudoja kita virtuali maÅ¡ina.</p></translation> + <translation><p>Ketinate paÅ¡alinti virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o.</p><p>Ar norÄ—tumÄ—te kartu paÅ¡alinti iÅ¡ standžiojo disko ir susijusias rinkmenas? Tokiu atveju bus paÅ¡alintos virtualius diskus turinÄios rinkmenos, jei tik jų nenaudoja kita virtuali maÅ¡ina.</p></translation> </message> <message> <source>Delete all files</source> @@ -5271,7 +5271,7 @@ </message> <message> <source>You are about to remove the inaccessible virtual machine <b>%1</b> from the machine list. Do you wish to proceed?</source> - <translation type="unfinished">Ketinate paÅ¡alinti neprieinamÄ… virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o. TÄ™sti?</translation> + <translation>Ketinate paÅ¡alinti neprieinamÄ… virtualiÄ… maÅ¡inÄ… <b>%1</b> iÅ¡ maÅ¡inų sÄ…raÅ¡o. TÄ™sti?</translation> </message> <message> <source>Remove</source> @@ -5400,14 +5400,6 @@ <comment>no hard disk attached</comment> <translation>Atgal</translation> </message> - <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation type="unfinished"> - <numerusform></numerusform> - <numerusform></numerusform> - <numerusform></numerusform> - </translation> - </message> <message> <source>Failed to update Guest Additions. The Guest Additions installation image will be mounted to provide a manual installation.</source> <translation>Nepavyko atnaujinti sveÄio papildinių. SveÄio papildinių diegimo atvaizdis bus prijungtas tam, kad įdiegtumÄ—te patys rankiniu bÅ«du.</translation> @@ -5702,7 +5694,7 @@ </message> <message> <source><p>Failed to download the <b><nobr>%1</nobr></b> from <nobr><a href="%2">%2</a>.</nobr></p><p>%3</p></source> - <translation type="unfinished"><p>Nepavyko parsiųsti <b><nobr>%1</nobr></b> iÅ¡ <nobr><a href="%2">%2</a>.</nobr></p><p>%3</p></translation> + <translation><p>Nepavyko parsiųsti <b><nobr>%1</nobr></b> iÅ¡ <nobr><a href="%2">%2</a>.</nobr></p><p>%3</p></translation> </message> <message> <source><p>You have version %1 of the <b><nobr>%2</nobr></b> installed.</p><p>You should download and install version %3 of this extension pack from Oracle!</p></source> @@ -5711,7 +5703,16 @@ <message> <source>Ok</source> <comment>extension pack</comment> - <translation type="unfinished"></translation> + <translation>Gerai</translation> + </message> + <message numerus="yes"> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment> + <translation type="unfinished"> + <numerusform></numerusform> + <numerusform></numerusform> + <numerusform></numerusform> + </translation> </message> </context> <context> @@ -5894,7 +5895,7 @@ </message> <message> <source>Please type the name of the new virtual disk file into the box below or click on the folder icon to select a different folder to create the file in.</source> - <translation type="unfinished">NorÄ—dami nurodyti rinkmenos, kurioje bus laikomi virtualaus disko duomenys, vietÄ…, spauskite <b>Pasirinkti</b> arba įveskite rinkmenos pavadinimÄ… laukelyje.</translation> + <translation>NorÄ—dami nurodyti rinkmenos, kurioje bus laikomi virtualaus disko duomenys, vietÄ…, spauskite <b>Pasirinkti</b> arba įveskite rinkmenos pavadinimÄ… laukelyje.</translation> </message> <message> <source>Select a file for the new hard disk image file</source> @@ -9588,7 +9589,7 @@ IPv6.</translation> </message> <message> <source>and</source> - <translation>ir</translation> + <translation type="obsolete">ir</translation> </message> <message> <source>Adapter %1</source> @@ -9721,43 +9722,43 @@ IPv6.</translation> <name>VBoxLogSearchPanel</name> <message> <source>Close the search panel</source> - <translation type="unfinished">Užverti paieÅ¡kos skydelį</translation> + <translation>Užverti paieÅ¡kos skydelį</translation> </message> <message> <source>Find </source> - <translation type="unfinished"></translation> + <translation>IeÅ¡koti </translation> </message> <message> <source>Enter a search string here</source> - <translation type="unfinished">Ä®veskite paieÅ¡kos reiÅ¡kinį</translation> + <translation>Ä®veskite ko ieÅ¡koti</translation> </message> <message> <source>&Previous</source> - <translation type="unfinished">&Ankstesnis</translation> + <translation>&Ankstesnis</translation> </message> <message> <source>Search for the previous occurrence of the string</source> - <translation type="unfinished">IeÅ¡koti ankstesnių paieÅ¡kos reiÅ¡kinių</translation> + <translation>IeÅ¡koti ankstesnių paieÅ¡kos atitikmenų</translation> </message> <message> <source>&Next</source> - <translation type="unfinished">&Toliau</translation> + <translation>&Toliau</translation> </message> <message> <source>Search for the next occurrence of the string</source> - <translation type="unfinished">IeÅ¡koti tolesnių paieÅ¡kos reiÅ¡kinių</translation> + <translation>IeÅ¡koti tolesnių paieÅ¡kos atitikmenų</translation> </message> <message> <source>C&ase Sensitive</source> - <translation type="unfinished">&Skirti raidžių dydį</translation> + <translation>&Skirti raidžių dydį</translation> </message> <message> <source>Perform case sensitive search (when checked)</source> - <translation type="unfinished">Skirti raidžių dydį (jei pasirinkta)</translation> + <translation>Skirti raidžių dydį (jei pasirinkta)</translation> </message> <message> <source>String not found</source> - <translation type="unfinished">Nerasta</translation> + <translation>FrazÄ— nerasta</translation> </message> </context> <context> @@ -10107,11 +10108,11 @@ IPv6.</translation> </message> <message> <source>&Settings...</source> - <translation type="unfinished">Nuo&statos...</translation> + <translation>Nuo&statos...</translation> </message> <message> <source>Configure the selected virtual machine</source> - <translation type="unfinished">KonfigÅ«ruoti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>KonfigÅ«ruoti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>&Delete</source> @@ -10143,7 +10144,7 @@ IPv6.</translation> </message> <message> <source>&Machine</source> - <translation type="unfinished">&MaÅ¡ina</translation> + <translation>&MaÅ¡ina</translation> </message> <message> <source>R&esume</source> @@ -10151,19 +10152,19 @@ IPv6.</translation> </message> <message> <source>Resume the execution of the virtual machine</source> - <translation type="unfinished">TÄ™sti pristabdytos virtualios maÅ¡inos darbÄ…</translation> + <translation>TÄ™sti pristabdytos virtualios maÅ¡inos darbÄ…</translation> </message> <message> <source>&Pause</source> - <translation type="unfinished">&Pristabdyti</translation> + <translation>&Pristabdyti</translation> </message> <message> <source>Suspend the execution of the virtual machine</source> - <translation type="unfinished">Sustabdyti virtualiÄ… maÅ¡inÄ… jos bÅ«senÄ… iÅ¡saugant diske</translation> + <translation>Sustabdyti virtualiÄ… maÅ¡inÄ… jos bÅ«senÄ… iÅ¡saugant diske</translation> </message> <message> <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></p><p>In order to create a new virtual machine, press the <b>New</b> button in the main tool bar located at the top of the window.</p><p>You can press the <b>%1</b> key to get instant help, or visit <a href=http://www.virtualbox.org>www.virtualbox.org</a> for the latest information and news.</p></source> - <translation type="unfinished"><h3>Jus sveikina VirtualBox!</h3><p>KairÄ—je lango pusÄ—je pateikiamas visų JÅ«sų virtualių maÅ¡inų sÄ…raÅ¡as. Kol kas Å¡is sÄ…raÅ¡as tuÅ¡Äias, kadangi dar nesukÅ«rÄ—te nei vienos virtualios maÅ¡inos.<img src=:/welcome.png align=right/></p><p>NorÄ—dami sukurti naujÄ… VM, spauskite mygtukÄ… <b>Nauja</b>, kuris yra pagrindinÄ—je įrankių juostoje lango virÅ¡uje.</p><p>TrumpÄ… pagalbÄ… gausite nuspaudÄ™ <b>%1</b>. NaujausiÄ… informacijÄ… rasite apsilankÄ™ svetainÄ—je<a href=http://www.virtualbox.org>www.virtualbox.org</a>.</p></translation> + <translation><h3>Jus sveikina VirtualBox!</h3><p>KairÄ—je lango pusÄ—je pateikiamas visų JÅ«sų virtualių maÅ¡inų sÄ…raÅ¡as. Kol kas Å¡is sÄ…raÅ¡as tuÅ¡Äias, kadangi dar nesukÅ«rÄ—te nei vienos virtualios maÅ¡inos.<img src=:/welcome.png align=right/></p><p>NorÄ—dami sukurti naujÄ… VM, spauskite mygtukÄ… <b>Nauja</b>, kuris yra pagrindinÄ—je įrankių juostoje lango virÅ¡uje.</p><p>TrumpÄ… pagalbÄ… gausite nuspaudÄ™ <b>%1</b>. NaujausiÄ… informacijÄ… rasite apsilankÄ™ svetainÄ—je<a href=http://www.virtualbox.org>www.virtualbox.org</a>.</p></translation> </message> <message> <source>Log</source> @@ -10185,196 +10186,196 @@ IPv6.</translation> </message> <message> <source>Select a virtual machine file</source> - <translation type="unfinished">Pasirinkite virtualios maÅ¡inos rinkmenÄ…</translation> + <translation>Pasirinkite virtualios maÅ¡inos rinkmenÄ…</translation> </message> <message> <source>Virtual machine files (%1)</source> - <translation type="unfinished">Virtualių maÅ¡inų rinkmenos (%1)</translation> + <translation>Virtualių maÅ¡inų rinkmenos (%1)</translation> </message> <message> <source>Manager</source> <comment>Note: main window title which is pretended by the product name.</comment> - <translation type="unfinished">TvarkytuvÄ—</translation> + <translation>TvarkytuvÄ—</translation> </message> <message> <source>Log</source> <comment>icon text</comment> - <translation type="unfinished">Žurnalas</translation> + <translation>Žurnalas</translation> </message> <message> <source>Show Toolbar</source> - <translation type="unfinished">Rodyti mygtukų juostÄ…</translation> + <translation>Rodyti mygtukų juostÄ…</translation> </message> <message> <source>Show Statusbar</source> - <translation type="unfinished">Rodyti bÅ«senos juostÄ…</translation> + <translation>Rodyti bÅ«senos juostÄ…</translation> </message> <message> <source>&Virtual Media Manager...</source> - <translation type="unfinished">&Virtualių laikmenų tvarkytuvÄ—...</translation> + <translation>&Virtualių laikmenų tvarkytuvÄ—...</translation> </message> <message> <source>Display the Virtual Media Manager dialog</source> - <translation type="unfinished">Atveria virtualių laikmenų tvarkytuvÄ™</translation> + <translation>Atveria virtualių laikmenų tvarkytuvÄ™</translation> </message> <message> <source>&Import Appliance...</source> - <translation type="unfinished">&Importuoti virtualiÄ… maÅ¡inÄ…...</translation> + <translation>&Importuoti virtualiÄ… maÅ¡inÄ…...</translation> </message> <message> <source>Import an appliance into VirtualBox</source> - <translation type="unfinished">Importuoja maÅ¡inÄ… į VirtualBox</translation> + <translation>Importuoja maÅ¡inÄ… į VirtualBox</translation> </message> <message> <source>&Export Appliance...</source> - <translation type="unfinished">&Eksportuoti virtualiÄ… maÅ¡inÄ…...</translation> + <translation>&Eksportuoti virtualiÄ… maÅ¡inÄ…...</translation> </message> <message> <source>Export one or more VirtualBox virtual machines as an appliance</source> - <translation type="unfinished">Eksportuoja vienÄ… ar kelias VirtualBox virtualias maÅ¡inas</translation> + <translation>Eksportuoja vienÄ… ar kelias VirtualBox virtualias maÅ¡inas</translation> </message> <message> <source>&Preferences...</source> <comment>global settings</comment> - <translation type="unfinished"></translation> + <translation>&Nuostatos...</translation> </message> <message> <source>Display the global settings dialog</source> - <translation type="unfinished">Keisti bendras nuostatas</translation> + <translation>Keisti bendras nuostatas</translation> </message> <message> <source>E&xit</source> - <translation type="unfinished">&Baigti</translation> + <translation>&Baigti</translation> </message> <message> <source>Close application</source> - <translation type="unfinished">Užverti VirtualBox</translation> + <translation>Užverti VirtualBox</translation> </message> <message> <source>&New...</source> - <translation type="unfinished"></translation> + <translation>&Nauja...</translation> </message> <message> <source>Create a new virtual machine</source> - <translation type="unfinished">Sukurti naujÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>Sukurti naujÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>&Add...</source> - <translation type="unfinished"></translation> + <translation>&PridÄ—ti...</translation> </message> <message> <source>Add an existing virtual machine</source> - <translation type="unfinished">PridÄ—ti esamÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>PridÄ—ti esamÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>Cl&one...</source> - <translation type="unfinished">&Klonuoti...</translation> + <translation>&Klonuoti...</translation> </message> <message> <source>Clone the selected virtual machine</source> - <translation type="unfinished">Klonuoti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>Klonuoti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>&Remove</source> - <translation type="unfinished">PaÅ¡alin&ti</translation> + <translation>PaÅ¡alin&ti</translation> </message> <message> <source>Remove the selected virtual machine</source> - <translation type="unfinished">PaÅ¡alinti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>PaÅ¡alinti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>Discard</source> - <translation type="unfinished">Atmesti</translation> + <translation>Atmesti</translation> </message> <message> <source>D&iscard Saved State</source> - <translation type="unfinished">&Nebesaugoti bÅ«senos</translation> + <translation>&Nebesaugoti bÅ«senos</translation> </message> <message> <source>Discard the saved state of the selected virtual machine</source> - <translation type="unfinished">Panaikinti iÅ¡saugotÄ… pasirinktos virtualios maÅ¡inos bÅ«vį</translation> + <translation>Panaikinti iÅ¡saugotÄ… pasirinktos virtualios maÅ¡inos bÅ«vį</translation> </message> <message> <source>Re&fresh</source> - <translation type="unfinished">&Atnaujinti</translation> + <translation>&Atnaujinti</translation> </message> <message> <source>Refresh the accessibility state of the selected virtual machine</source> - <translation type="unfinished">Atnaujinti pasirinktos virtualios maÅ¡inos pasiekiamumo bÅ«senÄ…</translation> + <translation>Atnaujinti pasirinktos virtualios maÅ¡inos pasiekiamumo bÅ«senÄ…</translation> </message> <message> <source>Show &Log...</source> - <translation type="unfinished">PeržiÅ«rÄ—ti ž&urnalus...</translation> + <translation>PeržiÅ«rÄ—ti ž&urnalus...</translation> </message> <message> <source>Show the log files of the selected virtual machine</source> - <translation type="unfinished">Rodyti pasirinktos virtualios maÅ¡inos žurnalus</translation> + <translation>Rodyti pasirinktos virtualios maÅ¡inos žurnalus</translation> </message> <message> <source>Show in Finder</source> - <translation type="unfinished">Atverti su Finder</translation> + <translation>Atverti su Finder</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Finder.</source> - <translation type="unfinished">VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su Finder.</translation> + <translation>VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su Finder.</translation> </message> <message> <source>Create Alias on Desktop</source> - <translation type="unfinished">Sukurti nuorodÄ… darbalaukyje</translation> + <translation>Sukurti nuorodÄ… darbalaukyje</translation> </message> <message> <source>Creates an Alias file to the VirtualBox Machine Definition file on your Desktop.</source> - <translation type="unfinished">Darbalaukyje sukuriama nuorodos rinkmena į VirtualBox maÅ¡inos apibrėžties rinkmenÄ….</translation> + <translation>Darbalaukyje sukuriama nuorodos rinkmena į VirtualBox maÅ¡inos apibrėžties rinkmenÄ….</translation> </message> <message> <source>Show in Explorer</source> - <translation type="unfinished">Atverti su Explorer</translation> + <translation>Atverti su Explorer</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in Explorer.</source> - <translation type="unfinished">VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su Explorer.</translation> + <translation>VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su Explorer.</translation> </message> <message> <source>Create Shortcut on Desktop</source> - <translation type="unfinished">Sukurti Å¡aukinį darbalaukyje</translation> + <translation>Sukurti nuorodÄ… darbalaukyje</translation> </message> <message> <source>Creates an Shortcut file to the VirtualBox Machine Definition file on your Desktop.</source> - <translation type="unfinished">Darbalaukyje sukuriama Å¡aukinio rinkmena į VirtualBox maÅ¡inos apibrėžties rinkmenÄ….</translation> + <translation>Darbalaukyje sukuriama nuorodos rinkmena į VirtualBox maÅ¡inos apibrėžties rinkmenÄ….</translation> </message> <message> <source>Show in File Manager</source> - <translation type="unfinished">Atverti su rinkmenų tvarkytuve</translation> + <translation>Rodyti rinkmenų tvarkytuve</translation> </message> <message> <source>Show the VirtualBox Machine Definition file in the File Manager</source> - <translation type="unfinished">VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su rinkmenų tvarkytuve</translation> + <translation>VirtualBox maÅ¡inos apibrėžties rinkmenÄ… atverti su rinkmenų tvarkytuve</translation> </message> <message> <source>&File</source> <comment>Mac OS X version</comment> - <translation type="unfinished">&Rinkmena</translation> + <translation>&Rinkmena</translation> </message> <message> <source>&File</source> <comment>Non Mac OS X version</comment> - <translation type="unfinished">&Rinkmena</translation> + <translation>&Rinkmena</translation> </message> <message> <source>S&tart</source> - <translation type="unfinished">&Paleisti</translation> + <translation>&Paleisti</translation> </message> <message> <source>Start the selected virtual machine</source> - <translation type="unfinished">Paleisti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> + <translation>Paleisti pasirinktÄ… virtualiÄ… maÅ¡inÄ…</translation> </message> <message> <source>S&how</source> - <translation type="unfinished">&Rodyti</translation> + <translation>&Rodyti</translation> </message> <message> <source>Switch to the window of the selected virtual machine</source> - <translation type="unfinished">Pereiti į pasirinktos virtualios maÅ¡inos langÄ…</translation> + <translation>Pereiti į pasirinktos virtualios maÅ¡inos langÄ…</translation> </message> </context> <context> @@ -10801,35 +10802,35 @@ konkreÄių nuostatų, matysite paaiÅ¡kinimus<i>.</translation> <name>VBoxVMLogViewer</name> <message> <source>Log Viewer</source> - <translation type="unfinished">Žurnalų peržiÅ«ra</translation> + <translation>Žurnalų peržiÅ«ra</translation> </message> <message> <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source> - <translation type="unfinished"><p>Žurnalų nÄ—ra. NorÄ—dami iÅ¡ naujo nuskaityti žurnalų aplankÄ… <nobr><b>%1</b></nobr>, spauskite <b>Atnaujinti</b>.</p></translation> + <translation><p>Žurnalų nÄ—ra. NorÄ—dami iÅ¡ naujo nuskaityti žurnalų aplankÄ… <nobr><b>%1</b></nobr>, spauskite <b>Atnaujinti</b>.</p></translation> </message> <message> <source>Save VirtualBox Log As</source> - <translation type="unfinished">VirtualBox žurnalÄ… įraÅ¡yti kaip</translation> + <translation>VirtualBox žurnalÄ… įraÅ¡yti kaip</translation> </message> <message> <source>%1 - VirtualBox Log Viewer</source> - <translation type="unfinished">%1 - VirtualBox žurnalų peržiÅ«ra</translation> + <translation>%1 - VirtualBox žurnalų peržiÅ«ra</translation> </message> <message> <source>&Find</source> - <translation type="unfinished">&IeÅ¡koti</translation> + <translation>&IeÅ¡koti</translation> </message> <message> <source>&Refresh</source> - <translation type="unfinished">&Atnaujinti</translation> + <translation>&Atnaujinti</translation> </message> <message> <source>&Save</source> - <translation type="unfinished">Ä®&raÅ¡yti</translation> + <translation>Ä®&raÅ¡yti</translation> </message> <message> <source>Close</source> - <translation type="unfinished">Užverti</translation> + <translation>Užverti</translation> </message> </context> <context> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts index 9788bbaf2..e340a19df 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts @@ -4208,9 +4208,9 @@ <translation>Het is niet gelukt diskette station <nobr><b>%1</b></nobr> los te koppelen van het slot <i>%2</i> van virtuele machine <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translatorcomment>RL - Noodzakelijke %n place marker ontbreekt, old format - Bij ticket #10400 virtualbox.org gezet, afwachten (02.04.2012)</translatorcomment> - <translation> + <translation type="unfinished"> <numerusform><p>De virtuele machine <b>%1</b> bevindt zich momenteel in opgeslagen staat.</p><p>Indien u doorgaat wordt de runtime staat van de geëxporteerde machine weggegooid. Weet dat de bestaande machine niet worden veranderd.</p></numerusform> <numerusform><p>De virtuele machines <b>%1</b> bevinden zich momenteel in opgeslagen staat.</p><p>Indien u doorgaat wordt de runtime staat van de geëxporteerde machines weggegooid. Weet dat de bestaande machines niet worden veranderd.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts index 982e8fea2..209c6ee3d 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts @@ -5943,7 +5943,7 @@ p, li { white-space: pre-wrap; } <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts index 4b8f8e17c..3a6245b2e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts @@ -5344,7 +5344,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts index 3616f04d1..facec4c96 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts @@ -6593,8 +6593,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>Os Adicionais para Convidado não estão disponÃveis nesta máquina virtual, e portanto não é possÃvel utilizar o recurso de pastas compartilhadas. Para utilizar pastas compartilhadas dentro da máquina virtual, instale os Adicionais para Convidado, ou instale-os novamente caso não estejam funcionando corretamente. Para fazer isto, selecione a opção <b>Instalar Adicionais para Convidado</b> no menu <b>Máquina</b>. Caso já esteja instalado mas a máquina esteja em processo de inicialização, aguarde até que esteja totalmente ativa e a opção de pastas compartilhadas estará disponÃvel.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>As máquinas virtuais <b>%1</b> possuem estado de execução salvo. </p><p>Se você continuar, o estado atual de execução destas máquinas será descartado. As máquinas existentes não serão afetadas.</p></numerusform> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts index bdcc7a764..c775cba8f 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts @@ -5664,7 +5664,7 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci cà <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts index 20b223d2d..8101ae1b2 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts @@ -5753,8 +5753,8 @@ p, li { white-space: pre-wrap; } <translation>Ðе удалоÑÑŒ отÑоединить привод гибких диÑков <nobr><b>%1</b></nobr> от Ñлота <i>%2</i> машины <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Ð’Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð°Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð° <b>%1</b> в данный момент находитÑÑ Ð² Ñохранённом ÑоÑтоÑнии.</p><p>ЕÑли Ð’Ñ‹ продолжите, рабочее ÑоÑтоÑние ÑкÑпортируемой машины будет Ñброшено. Учтите, что ÑущеÑтвующие машины не будут изменены.</p></numerusform> <numerusform><p>Виртуальные машины <b>%1</b> в данный момент находÑÑ‚ÑÑ Ð² Ñохранённом ÑоÑтоÑнии.</p><p>ЕÑли Ð’Ñ‹ продолжите, рабочее ÑоÑтоÑние ÑкÑпортируемых машины будет Ñброшено. Учтите, что ÑущеÑтвующие машины не будут изменены.</p></numerusform> <numerusform><p>Виртуальные машины <b>%1</b> в данный момент находÑÑ‚ÑÑ Ð² Ñохранённом ÑоÑтоÑнии.</p><p>ЕÑли Ð’Ñ‹ продолжите, рабочее ÑоÑтоÑние ÑкÑпортируемых машины будет Ñброшено. Учтите, что ÑущеÑтвующие машины не будут изменены.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts index 78e576906..d9adf2e6e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts @@ -5228,7 +5228,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> <numerusform></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts index fdc2c4f3f..7d7d9297a 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts @@ -5478,8 +5478,8 @@ p, li { white-space: pre-wrap; } <translation>ÐеуÑпешан одвој флопи уређаја (<nobr><b>%1</b></nobr>) Ñа Ñлота <i>%2</i> од машине <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Машина <b>%1</b> је у ÑтатуÑу Ñачувавања.</p><p>Ðко наÑтавите, ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð²ÐµÐ¶ÐµÐ½Ðµ мажине ће бити одбачен. ПоÑтојећа машина неће бити промењена.</p></numerusform> <numerusform><p>Машине <b>%1</b> Ñу у ÑтатуÑу Ñачувавања.</p><p>Ðко наÑтавите, ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð²ÐµÐ¶ÐµÐ½Ð¸Ñ… мажина ће бити одбачен. ПоÑтојеће машине неће бити промењене.</p></numerusform> <numerusform><p>Машине <b>%1</b> Ñу у ÑтатуÑу Ñачувавања.</p><p>Ðко наÑтавите, ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð²ÐµÐ¶ÐµÐ½Ð¸Ñ… мажина ће бити одбачен. ПоÑтојеће машине неће бити промењене.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts index e435d142f..4bed50b15 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts @@ -6479,8 +6479,8 @@ serial ports</comment> <translation>Misslyckades med att koppla frÃ¥n diskettenheten (<nobr><b>%1</b></nobr>) frÃ¥n platsen <i>%2</i> för maskinen <b>%3</b>.</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Virtuella maskinen <b>%1</b> befinner sig i ett sparat tillstÃ¥nd.</p><p>Om du fortsätter sÃ¥ kommer körtidstillstÃ¥ndet för de exporterade maskinerna att förkastas. Observera att de befintliga maskinerna inte kommer att ändras.</p></numerusform> <numerusform><p>Virtuella maskinerna <b>%1</b> befinner sig i ett sparat tillstÃ¥nd.</p><p>Om du fortsätter sÃ¥ kommer körtidstillstÃ¥ndet för de exporterade maskinerna att förkastas. Observera att de befintliga maskinerna inte kommer att ändras.</p></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts index e82b982b1..28050e09e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts @@ -5175,7 +5175,7 @@ Bu Sanal Makinenin fare iÅŸaretçinizi ve klavyenizi <b>yakalamasına</ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts index 62c9bebd3..174dc0518 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts @@ -6143,8 +6143,8 @@ p, li { white-space: pre-wrap; } <translation type="obsolete"><p>ГоÑтьові Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ VirtualBox не з'ÑвилиÑÑŒ доÑтупними на віртуальній машині, Ñ– без них неможливо викориÑтовувати Ñпільні теки. Щоб викориÑтовувати Ñ—Ñ… уÑередині віртуальної машини, будь лаÑка, вÑтановіть гоÑтьові доповненнÑ, Ñкщо вони вÑе ще не вÑтановлені, або перевÑтановіть, Ñкщо вони працюють некоректно, вибравши <b>Ð’Ñтановити гоÑтьові доповненнÑ</b> з меню <b>Машина</b>. Якщо вони вÑтановлені, але машина поки що неповніÑтю запущена, то потрібно зачекати поки вона запуÑтитьÑÑ Ð´Ð¾ кінцÑ.</p></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>Віртуальна машина <b>%1</b> у збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¸ буде відкинуто. Майте на увазі, наÑвну машину не змінено.</p></numerusform> <numerusform><p>Віртуальні машини <b>%1</b> у збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½ буде відкинуто. Майте на увазі, наÑвні машини не змінено.</p></numerusform> <numerusform><p>Віртуальні машини <b>%1</b> у збереженому Ñтані.</p><p>Якщо ви покинете цей Ñтан, то екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð°ÑˆÐ¸Ð½ буде відкинуто. Майте на увазі, наÑвні машини не змінено.</p></numerusform> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts index 67bde404a..37fc8116e 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts @@ -4186,7 +4186,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translation type="unfinished"> <numerusform></numerusform> </translation> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts index ee10e1903..591c1d1ed 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts @@ -4205,9 +4205,9 @@ <translation>从虚拟机 <b>%3</b> çš„æ’æ§½ <i>%2</i> 分离软驱 (<nobr><b>%1</b></nobr>) 失败。</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> <translatorcomment>TODO</translatorcomment> - <translation> + <translation type="unfinished"> <numerusform><p>虚拟机 <b>%1</b> 当å‰å¤„于ä¿å˜çжæ€ã€‚</p><p>如果您继ç»ï¼Œå°†æ”¾å¼ƒå·²å¯¼å‡ºè™šæ‹Ÿæœºçš„è¿è¡Œæ—¶çжæ€ã€‚注æ„,现有的虚拟机ä¸ä¼šæ›´æ”¹ã€‚</p></numerusform> </translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts index c1d61dbc3..864297e10 100644 --- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts +++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts @@ -4190,8 +4190,8 @@ <translation>從機器 <b>%3</b> çš„æ’æ§½ <i>%2</i> 分離軟碟è£ç½® (<nobr><b>%1</b></nobr>) 失敗。</translation> </message> <message numerus="yes"> - <source><p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p><p>If you continue the runtime state of the exported machine(s) will be discarded. Note that the existing machine(s) are not changed.</p></source> - <translation> + <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source> + <translation type="unfinished"> <numerusform><p>虛擬機器 <b>%1</b> ç›®å‰åœ¨å„²å˜çš„狀態。</p><p>å¦‚æžœæ‚¨ç¹¼çºŒï¼ŒåŒ¯å‡ºæ©Ÿå™¨çš„åŸ·è¡ŒéšŽæ®µç‹€æ…‹å°‡æ¨æ£„。 請注æ„ï¼Œç¾æœ‰çš„æ©Ÿå™¨æœªè®Šæ›´ã€‚</p></numerusform> </translation> </message> diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp index d824ac957..850f04365 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp @@ -579,6 +579,17 @@ void UIMessageCenter::cannotInitCOM(HRESULT rc) formatErrorInfo(COMErrorInfo(), rc)); } +void UIMessageCenter::cannotInitUserHome(const QString &strUserHome) +{ + message(0, Critical, + tr("<p>Failed to initialize COM because the VirtualBox global " + "configuration directory <b><nobr>%1</nobr></b> is not accessible. " + "Please check the permissions of this directory and of its parent " + "directory.</p>" + "<p>The application will now terminate.</p>").arg(strUserHome), + formatErrorInfo(COMErrorInfo())); +} + void UIMessageCenter::cannotCreateVirtualBox(const CVirtualBox &vbox) { message(0, Critical, @@ -2342,10 +2353,9 @@ bool UIMessageCenter::confirmExportMachinesInSaveState(const QStringList &strMac QWidget *pParent /* = NULL */) const { return messageOkCancel(pParent ? pParent : mainWindowShown(), Warning, - tr("<p>The virtual machine(s) <b>%1</b> are currently in a saved state.</p>" + tr("<p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p>" "<p>If you continue the runtime state of the exported machine(s) " - "will be discarded. Note that the existing machine(s) are not " - "changed.</p>", "", + "will be discarded. The other machine(s) will not be changed.</p>", "This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).", strMachineNames.size()).arg(VBoxGlobal::toHumanReadableList(strMachineNames)), 0 /* pcszAutoConfirmId */, tr("Continue"), tr("Cancel")); diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h index 381a043d5..bbf2e5c8f 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h +++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h @@ -178,6 +178,7 @@ public: void cannotLoadLanguage(const QString &strLangFile); void cannotInitCOM(HRESULT rc); + void cannotInitUserHome(const QString &strUserHome); void cannotCreateVirtualBox(const CVirtualBox &vbox); void cannotLoadGlobalConfig(const CVirtualBox &vbox, const QString &strError); diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp index 2c36bdef1..bfea18334 100644 --- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp +++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp @@ -3673,17 +3673,11 @@ QString VBoxGlobal::sizeRegexp() QString VBoxGlobal::toHumanReadableList(const QStringList &list) { QString strList; - if (list.size() == 1) - strList = list.at(0); - else if (list.size() > 1) + for (int i = 0; i < list.size(); ++i) { - for (int i = 0; i < list.size() - 1; ++i) - { - strList += list.at(i); - if (i < list.size() - 2) - strList += + ", "; - } - strList += " " + tr("and") + " " + list.at(list.size() - 1); + strList += list.at(i); + if (i < list.size() - 1) + strList += + " "; } return strList; } @@ -4783,7 +4777,16 @@ void VBoxGlobal::init() HRESULT rc = COMBase::InitializeCOM(true); if (FAILED (rc)) { - msgCenter().cannotInitCOM (rc); +#ifdef VBOX_WITH_XPCOM + if (rc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + msgCenter().cannotInitUserHome(QString(szHome)); + } + else +#endif + msgCenter().cannotInitCOM(rc); return; } diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp index f3422e4aa..86c54c10d 100644 --- a/src/VBox/Frontends/VirtualBox/src/main.cpp +++ b/src/VBox/Frontends/VirtualBox/src/main.cpp @@ -588,6 +588,7 @@ int main (int argc, char **argv, char **envp) switch (rc) { case VERR_VM_DRIVER_NOT_INSTALLED: + case VERR_VM_DRIVER_LOAD_ERROR: msgText += QApplication::tr ( "<b>Cannot access the kernel driver!</b><br/><br/>"); # ifdef RT_OS_LINUX diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c index f4d13b362..ab904d370 100644 --- a/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c +++ b/src/VBox/GuestHost/OpenGL/packer/pack_framebuffer.c @@ -47,7 +47,7 @@ crPackDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers) return; data_ptr = (unsigned char *) crPackAlloc(packet_length); - WRITE_DATA(0, GLenum, CR_DELETERENDERBUFFERSEXT_EXTEND_OPCODE); + WRITE_DATA(0, GLenum, CR_DELETEFRAMEBUFFERSEXT_EXTEND_OPCODE); WRITE_DATA(4, GLsizei, n); crMemcpy(data_ptr + 8, framebuffers, n* sizeof(*framebuffers)); crHugePacket(CR_EXTEND_OPCODE, data_ptr); diff --git a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c index f3576669b..116aca74f 100644 --- a/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c +++ b/src/VBox/GuestHost/OpenGL/util/vboxhgcm.c @@ -2022,7 +2022,6 @@ _crVBoxHGSMIWriteReadExact(CRConnection *conn, PCRVBOXHGSMI_CLIENT pClient, void rc = pClient->pHgsmi->pfnBufferCreate(pClient->pHgsmi, CRVBOXHGSMI_PAGE_ALIGN(cbWriteback), VBOXUHGSMI_SYNCHOBJECT_TYPE_NONE, NULL, &pClient->pHGBuffer); AssertRC(rc); - CRASSERT(RT_SUCCESS(rc)); if (RT_SUCCESS(rc)) { rc = pOldBuf->pfnDestroy(pOldBuf); diff --git a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h index ab713e46d..5c7f7a031 100644 --- a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h +++ b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h @@ -29,7 +29,7 @@ RT_C_DECLS_BEGIN /** Pointer to the globals. */ typedef struct VBOXNETADPGLOBALS *PVBOXNETADPGLOBALS; -#define VBOXNETADP_MAX_INSTANCES 8 +#define VBOXNETADP_MAX_INSTANCES 128 #define VBOXNETADP_MAX_UNITS 128 #define VBOXNETADP_NAME "vboxnet" #define VBOXNETADP_MAX_NAME_LEN 32 @@ -125,17 +125,7 @@ struct VBoxNetAdapter /** Union alignment to a pointer. */ void *pvAlign; /** Padding. */ -#if defined(RT_OS_WINDOWS) -# if defined(VBOX_NETFLT_ONDEMAND_BIND) - uint8_t abPadding[192]; -# else - uint8_t abPadding[1024]; -# endif -#elif defined(RT_OS_LINUX) uint8_t abPadding[64]; -#else - uint8_t abPadding[64]; -#endif } u; /** The interface name. */ char szName[VBOXNETADP_MAX_NAME_LEN]; diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp index 289ee5474..658b7aa7a 100644 --- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp +++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetFltRt-win.cpp @@ -1678,10 +1678,10 @@ DECLHIDDEN(VOID) vboxNetFltWinUnload(IN PDRIVER_OBJECT DriverObject) vboxNetFltWinMpDeregister(&g_VBoxNetFltGlobalsWin.Mp); + LogFlow((__FUNCTION__" <== DO (0x%x)\n", DriverObject)); + vboxNetFltWinFiniNetFltBase(); /* don't use logging or any RT after de-init */ - - LogFlow((__FUNCTION__" <== DO (0x%x)\n", DriverObject)); } RT_C_DECLS_BEGIN diff --git a/src/VBox/HostServices/SharedFolders/mappings.cpp b/src/VBox/HostServices/SharedFolders/mappings.cpp index c354c63f0..bcfd72972 100644 --- a/src/VBox/HostServices/SharedFolders/mappings.cpp +++ b/src/VBox/HostServices/SharedFolders/mappings.cpp @@ -373,8 +373,18 @@ int vbsfMappingsQueryName(PSHFLCLIENTDATA pClient, SHFLROOT root, SHFLSTRING *pS if (pFolderMapping->fValid == true) { - pString->u16Length = pFolderMapping->pMapName->u16Length; - memcpy(pString->String.ucs2, pFolderMapping->pMapName->String.ucs2, pString->u16Size); + if (pString->u16Size < pFolderMapping->pMapName->u16Size) + { + Log(("vbsfMappingsQuery: passed string too short (%d < %d bytes)!\n", + pString->u16Size, pFolderMapping->pMapName->u16Size)); + rc = VERR_INVALID_PARAMETER; + } + else + { + pString->u16Length = pFolderMapping->pMapName->u16Length; + memcpy(pString->String.ucs2, pFolderMapping->pMapName->String.ucs2, + pFolderMapping->pMapName->u16Size); + } } else rc = VERR_FILE_NOT_FOUND; diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules index 832828822..9e52ac922 100755 --- a/src/VBox/Installer/linux/rpm/rules +++ b/src/VBox/Installer/linux/rpm/rules @@ -95,15 +95,18 @@ ifneq ($(MAKECMDGOALS),clean) ifeq ($(rpmspec),) $(error failed to detect the .spec file (rpmrel=$(rpmrel))) endif + + # contrary to debian we need the verfile earlier to get the correct rpmname into the bld_flags + include $(verfile) +$(verfile): rpm/configure-stamp + . rpm/env.sh && kmk -C $(vboxroot) $(verfile) $(bld_flags) + endif -ifneq ($(wildcard $(verfile)),) -include $(verfile) ver := $(VBOX_VERSION_STRING) rpmver :=$(ver)$(if $(NOSUBVER),,$(if $(svn_revision),_$(svn_revision),)$(VERSUFFIX)$(if $(HEADLESS),_headless,)$(if $(DEBUG),_dbg,))$(if $(BLEEDING_EDGE),_$(BLEEDING_EDGE),) archdir := $(current)/rpm/VirtualBox-$(ver) rpmname := $(verpkg)-$(rpmver)_$(rpmrel) -endif # Fedora13/14 is bleeding edge, the other jails have outdated kernel headers instmod := $(if $(filter rhel4 rhel5 rhel6 ol4 ol5 ol6 centos4 centos5 centos6 sles10.1 sles11.0 fedora13 fedora14 fedora15 fedora16 fedora17,$(rpmrel)),,install_rpm) @@ -163,7 +166,7 @@ rpm/configure-stamp: cd $(vboxroot) && ./configure --odir=$(current)/rpm $(cfg_flags) touch rpm/configure-stamp -rpm/build-stamp $(verfile): rpm/configure-stamp +rpm/build-stamp: rpm/configure-stamp . rpm/env.sh && kmk -C $(vboxroot) $(bld_flags) $(if $(NOPARALLEL),-j1,) all $(if $(NODOCS),cp $(vboxroot)/prebuild/UserManual*.pdf $(builddir)/bin,) $(if $(NODOCS),cp $(vboxroot)/prebuild/VirtualBox*.chm $(builddir)/bin,) diff --git a/src/VBox/Installer/linux/vboxweb-service.sh.in b/src/VBox/Installer/linux/vboxweb-service.sh.in index 972e08dc2..a951707a0 100755 --- a/src/VBox/Installer/linux/vboxweb-service.sh.in +++ b/src/VBox/Installer/linux/vboxweb-service.sh.in @@ -34,8 +34,10 @@ NOLSB=%NOLSB% if [ -n "$INSTALL_DIR" ]; then binary="$INSTALL_DIR/vboxwebsrv" + vboxmanage="$INSTALL_DIR/VBoxManage" else binary="/usr/lib/%PACKAGE%/vboxwebsrv" + vboxmanage="/usr/lib/%PACKAGE%/VBoxManage" fi # silently exit if the package was uninstalled but not purged, @@ -307,6 +309,19 @@ start() { [ -n "$VBOXWEB_ROTATE" ] && PARAMS="$PARAMS -R $VBOXWEB_ROTATE" [ -n "$VBOXWEB_LOGSIZE" ] && PARAMS="$PARAMS -S $VBOXWEB_LOGSIZE" [ -n "$VBOXWEB_LOGINTERVAL" ] && PARAMS="$PARAMS -I $VBOXWEB_LOGINTERVAL" + # set authentication method + password hash + if [ -n "$VBOXWEB_AUTH_LIBRARY" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setproperty websrvauthlibrary \"$VBOXWEB_AUTH_LIBRARY\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice authentication library to $VBOXWEB_AUTH_LIBRARY" + fi + fi + if [ -n "$VBOXWEB_AUTH_PWHASH" ]; then + su - "$VBOXWEB_USER" -c "$vboxmanage setextradata global \"VBoxAuthSimple/users/$VBOXWEB_USER\" \"$VBOXWEB_AUTH_PWHASH\"" + if [ $? -ne 0 ]; then + fail_msg "Error $? setting webservice password hash" + fi + fi # prevent inheriting this setting to VBoxSVC unset VBOX_RELEASE_LOG_DEST start_daemon $VBOXWEB_USER $binary $PARAMS > /dev/null 2>&1 diff --git a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh index 4202e0fc4..5831c9593 100755 --- a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh +++ b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh @@ -53,6 +53,10 @@ case $VW_OPT in [ $? != 0 ] && VW_SSL_DHFILE= VW_SSL_RANDFILE=`/usr/bin/svcprop -p config/ssl_randfile $SMF_FMRI 2>/dev/null` [ $? != 0 ] && VW_SSL_RANDFILE= + VW_AUTH_LIBRARY=`/usr/bin/svcprop -p config/auth_library $SMF_FMRI 2>/dev/null` + [ $? != 0 ] && VW_AUTH_LIBRARY= + VW_AUTH_PWHASH=`/usr/bin/svcprop -p config/auth_pwhash $SMF_FMRI 2>/dev/null` + [ $? != 0 ] && VW_AUTH_PWHASH= VW_TIMEOUT=`/usr/bin/svcprop -p config/timeout $SMF_FMRI 2>/dev/null` [ $? != 0 ] && VW_TIMEOUT= VW_CHECK_INTERVAL=`/usr/bin/svcprop -p config/checkinterval $SMF_FMRI 2>/dev/null` @@ -95,6 +99,20 @@ case $VW_OPT in [ -n "$VW_SSL_RANDFILE" ] && VW_SSL_RANDFILE="--randfile $VW_SSL_RANDFILE" [ -n "$VW_LOGFILE" ] && VW_LOGFILE="--logfile $VW_LOGFILE" + # Set authentication method + password hash + if [ -n "$VW_AUTH_LIBRARY" ]; then + su - "$VW_USER" -c "/opt/VirtualBox/VBoxManage setproperty websrvauthlibrary \"$VW_AUTH_LIBRARY\"" + if [ $? != 0 ]; then + echo "Error $? setting webservice authentication library to $VW_AUTH_LIBRARY" + fi + fi + if [ -n "$VW_AUTH_PWHASH" ]; then + su - "$VW_USER" -c "/opt/VirtualBox/VBoxManage setextradata global \"VBoxAuthSimple/users/$VW_USER\" \"$VW_AUTH_PWHASH\"" + if [ $? != 0 ]; then + echo "Error $? setting webservice password hash" + fi + fi + exec su - "$VW_USER" -c "/opt/VirtualBox/vboxwebsrv --background --host \"$VW_HOST\" --port \"$VW_PORT\" $VW_SSL $VW_SSL_KEYFILE $VW_SSL_PASSWORDFILE $VW_SSL_CACERT $VW_SSL_CAPATH $VW_SSL_DHFILE $VW_SSL_RANDFILE --timeout \"$VW_TIMEOUT\" --check-interval \"$VW_CHECK_INTERVAL\" --threads \"$VW_THREADS\" --keepalive \"$VW_KEEPALIVE\" --authentication \"$VW_AUTHENTICATION\" $VW_LOGFILE --logrotate \"$VW_ROTATE\" --logsize \"$VW_LOGSIZE\" --loginterval \"$VW_LOGINTERVAL\"" VW_EXIT=$? diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk index bed7859fa..9dfc9b028 100644 --- a/src/VBox/Main/Makefile.kmk +++ b/src/VBox/Main/Makefile.kmk @@ -382,15 +382,15 @@ ifdef VBOX_WITH_NETFLT # needing it. src-server/win/NetIf-win.cpp_INCS.win += $(PATH_TOOL_$(VBOX_VCC_TOOL)_INC) VBoxSVC_LIBS.win += \ - $(WinNetConfig_1_TARGET) \ - $(VBoxDrvCfg_1_TARGET) \ + $(PATH_STAGE_LIB)/WinNetConfig$(VBOX_SUFF_LIB) \ + $(PATH_STAGE_LIB)/VBoxDrvCfg$(VBOX_SUFF_LIB) \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \ $(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib endif VBoxSVC_LDFLAGS.darwin = -framework IOKit -framework SystemConfiguration ifdef VBOX_WITH_CROGL - VBoxSVC_LIBS += $(VBoxOGLTest_1_TARGET) + VBoxSVC_LIBS += $(PATH_STAGE_LIB)/VBoxOGLTest$(VBOX_SUFF_LIB) VBoxSVC_LDFLAGS.darwin += -framework OpenGL endif @@ -573,14 +573,14 @@ VBoxC_LIBS += \ ifdef VBOX_WITH_NETFLT VBoxC_LIBS.win += \ - $(VBoxDrvCfg_1_TARGET) \ - $(WinNetConfig_1_TARGET) \ + $(PATH_STAGE_LIB)/VBoxDrvCfg$(VBOX_SUFF_LIB) \ + $(PATH_STAGE_LIB)/WinNetConfig$(VBOX_SUFF_LIB) \ $(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \ $(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib endif ifdef VBOX_WITH_CROGL - VBoxC_LIBS += $(VBoxOGLTest_1_TARGET) + VBoxC_LIBS += $(PATH_STAGE_LIB)/VBoxOGLTest$(VBOX_SUFF_LIB) VBoxC_LDFLAGS.darwin += -framework OpenGL endif diff --git a/src/VBox/Main/glue/EventQueue.cpp b/src/VBox/Main/glue/EventQueue.cpp index e812277f3..d5a09c690 100644 --- a/src/VBox/Main/glue/EventQueue.cpp +++ b/src/VBox/Main/glue/EventQueue.cpp @@ -237,16 +237,18 @@ int EventQueue::init() /* static */ int EventQueue::uninit() { - Assert(sMainQueue); - /* Must process all events to make sure that no NULL event is left - * after this point. It would need to modify the state of sMainQueue. */ + if (sMainQueue) + { + /* Must process all events to make sure that no NULL event is left + * after this point. It would need to modify the state of sMainQueue. */ #ifdef RT_OS_DARWIN /* Do not process the native runloop, the toolkit may not be ready for it. */ - sMainQueue->mEventQ->ProcessPendingEvents(); + sMainQueue->mEventQ->ProcessPendingEvents(); #else - sMainQueue->processEventQueue(0); + sMainQueue->processEventQueue(0); #endif - delete sMainQueue; - sMainQueue = NULL; + delete sMainQueue; + sMainQueue = NULL; + } return VINF_SUCCESS; } diff --git a/src/VBox/Main/glue/initterm.cpp b/src/VBox/Main/glue/initterm.cpp index 276b68b8c..6e9e1c6e1 100644 --- a/src/VBox/Main/glue/initterm.cpp +++ b/src/VBox/Main/glue/initterm.cpp @@ -342,6 +342,8 @@ HRESULT Initialize(bool fGui) char szXptiDat[RTPATH_MAX]; int vrc = GetVBoxUserHomeDirectory(szCompReg, sizeof(szCompReg)); + if (vrc == VERR_ACCESS_DENIED) + return NS_ERROR_FILE_ACCESS_DENIED; AssertRCReturn(vrc, NS_ERROR_FAILURE); strcpy(szXptiDat, szCompReg); diff --git a/src/VBox/Main/src-client/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp index 1d0fbecab..ed500f140 100644 --- a/src/VBox/Main/src-client/ConsoleImpl.cpp +++ b/src/VBox/Main/src-client/ConsoleImpl.cpp @@ -258,13 +258,17 @@ struct VMSaveTask : public VMTask { VMSaveTask(Console *aConsole, const ComPtr<IProgress> &aServerProgress, - const Utf8Str &aSavedStateFile) + const Utf8Str &aSavedStateFile, + MachineState_T aMachineStateBefore) : VMTask(aConsole, NULL /* aProgress */, aServerProgress, true /* aUsesVMPtr */), - mSavedStateFile(aSavedStateFile) + mSavedStateFile(aSavedStateFile), + mMachineStateBefore(aMachineStateBefore) {} Utf8Str mSavedStateFile; + /* The local machine state we had before. Required if something fails */ + MachineState_T mMachineStateBefore; }; // Handler for global events @@ -2696,7 +2700,8 @@ STDMETHODIMP Console::SaveState(IProgress **aProgress) /* create a task object early to ensure mpVM protection is successful */ std::auto_ptr<VMSaveTask> task(new VMSaveTask(this, pProgress, - stateFilePath)); + stateFilePath, + lastMachineState)); rc = task->rc(); /* * If we fail here it means a PowerDown() call happened on another @@ -9468,6 +9473,12 @@ DECLCALLBACK(int) Console::saveStateThread(RTTHREAD Thread, void *pvUser) } /* + * If we failed, reset the local machine state. + */ + if (FAILED(rc)) + that->setMachineStateLocally(task->mMachineStateBefore); + + /* * Finalize the requested save state procedure. In case of failure it will * reset the machine state to the state it had right before calling * mControl->BeginSavingState(). This must be the last thing because it diff --git a/src/VBox/Main/src-client/GuestCtrlImplDir.cpp b/src/VBox/Main/src-client/GuestCtrlImplDir.cpp index ff7814f07..af1113198 100644 --- a/src/VBox/Main/src-client/GuestCtrlImplDir.cpp +++ b/src/VBox/Main/src-client/GuestCtrlImplDir.cpp @@ -133,6 +133,25 @@ HRESULT Guest::directoryCreateInternal(IN_BSTR aDirectory, if (SUCCEEDED(hr)) { hr = setErrorFromProgress(pProgress); + if (SUCCEEDED(hr)) + { + VBOXGUESTCTRL_PROCESS proc; + int rc = processGetStatus(uPID, &proc, + true /* Remove when terminated */); + if (RT_SUCCESS(rc)) + { + if ( proc.mStatus != ExecuteProcessStatus_TerminatedNormally + || proc.mExitCode != 0) + { + hr = setErrorNoLog(VBOX_E_IPRT_ERROR, + tr("Could not create directory \"%s\""), Utf8Str(aDirectory).c_str()); + } + } + else + hr = setErrorNoLog(VBOX_E_IPRT_ERROR, + tr("Unable to retrieve status for creating directory \"%s\""), + Utf8Str(aDirectory).c_str()); + } pProgress.setNull(); } } diff --git a/src/VBox/Main/src-server/MediumImpl.cpp b/src/VBox/Main/src-server/MediumImpl.cpp index 4cf978810..41c239165 100644 --- a/src/VBox/Main/src-server/MediumImpl.cpp +++ b/src/VBox/Main/src-server/MediumImpl.cpp @@ -5891,7 +5891,9 @@ HRESULT Medium::setLocation(const Utf8Str &aLocation, vrc = VDGetFormat(NULL /* pVDIfsDisk */, NULL /* pVDIfsImage */, locationFull.c_str(), &backendName, &enmType); } - else if (vrc != VERR_FILE_NOT_FOUND && vrc != VERR_PATH_NOT_FOUND) + else if ( vrc != VERR_FILE_NOT_FOUND + && vrc != VERR_PATH_NOT_FOUND + && vrc != VERR_ACCESS_DENIED) { /* assume it's not a file, restore the original location */ locationFull = aLocation; @@ -5901,7 +5903,11 @@ HRESULT Medium::setLocation(const Utf8Str &aLocation, if (RT_FAILURE(vrc)) { - if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) + if (vrc == VERR_ACCESS_DENIED) + return setError(VBOX_E_FILE_ERROR, + tr("Permission problem accessing the file for the medium '%s' (%Rrc)"), + locationFull.c_str(), vrc); + else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND) return setError(VBOX_E_FILE_ERROR, tr("Could not find file for the medium '%s' (%Rrc)"), locationFull.c_str(), vrc); diff --git a/src/VBox/Main/src-server/xpcom/server.cpp b/src/VBox/Main/src-server/xpcom/server.cpp index e0d28ea5e..b6773ead5 100644 --- a/src/VBox/Main/src-server/xpcom/server.cpp +++ b/src/VBox/Main/src-server/xpcom/server.cpp @@ -890,12 +890,16 @@ int main(int argc, char **argv) if (!pszLogFile) { - char szLogFile[RTPATH_MAX]; + char szLogFile[RTPATH_MAX] = ""; vrc = com::GetVBoxUserHomeDirectory(szLogFile, sizeof(szLogFile)); + if (vrc == VERR_ACCESS_DENIED) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to open global settings directory '%s'", szLogFile); if (RT_SUCCESS(vrc)) vrc = RTPathAppend(szLogFile, sizeof(szLogFile), "VBoxSVC.log"); if (RT_SUCCESS(vrc)) pszLogFile = RTStrDup(szLogFile); + if (RT_FAILURE(vrc)) + return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to determine release log file (%Rrc)", vrc); } VBoxSVCLogRelCreate(pszLogFile, cHistory, uHistoryFileTime, uHistoryFileSize); diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp index 6a4905141..e1c368393 100644 --- a/src/VBox/Main/webservice/vboxweb.cpp +++ b/src/VBox/Main/webservice/vboxweb.cpp @@ -1229,6 +1229,15 @@ int main(int argc, char *argv[]) // initialize COM/XPCOM HRESULT hrc = com::Initialize(); +#ifdef VBOX_WITH_XPCOM + if (hrc == NS_ERROR_FILE_ACCESS_DENIED) + { + char szHome[RTPATH_MAX] = ""; + com::GetVBoxUserHomeDirectory(szHome, sizeof(szHome)); + return RTMsgErrorExit(RTEXITCODE_FAILURE, + "Failed to initialize COM because the global settings directory '%s' is not accessible!", szHome); + } +#endif if (FAILED(hrc)) return RTMsgErrorExit(RTEXITCODE_FAILURE, "failed to initialize COM! hrc=%Rhrc\n", hrc); diff --git a/src/VBox/Runtime/generic/critsect-generic.cpp b/src/VBox/Runtime/generic/critsect-generic.cpp index 9d8399105..ed2764514 100644 --- a/src/VBox/Runtime/generic/critsect-generic.cpp +++ b/src/VBox/Runtime/generic/critsect-generic.cpp @@ -454,7 +454,7 @@ RTDECL(int) RTCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects RT_EXPORT_SYMBOL(RTCritSectEnterMultiple); -RTDECL(int) RTCritSectEnterMultipleDebug(size_t cCritSects, PRTCRITSECT *papCritSects, RTUINTPTR uId, RT_SRC_POS_DECL) +RTDECL(int) RTCritSectEnterMultipleDebug(size_t cCritSects, PRTCRITSECT *papCritSects, RTHCUINTPTR uId, RT_SRC_POS_DECL) { RTLOCKVALSRCPOS SrcPos = RTLOCKVALSRCPOS_INIT_DEBUG_API(); return rtCritSectEnterMultiple(cCritSects, papCritSects, &SrcPos); diff --git a/src/VBox/Runtime/include/internal/ldrMach-O.h b/src/VBox/Runtime/include/internal/ldrMach-O.h index c75ea6c3f..e202642f3 100644 --- a/src/VBox/Runtime/include/internal/ldrMach-O.h +++ b/src/VBox/Runtime/include/internal/ldrMach-O.h @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2011 Oracle Corporation + * Copyright (C) 2011-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -247,7 +247,14 @@ typedef struct mach_header_64 #define MH_WEAK_DEFINES UINT32_C(0x00008000) #define MH_BINDS_TO_WEAK UINT32_C(0x00010000) #define MH_ALLOW_STACK_EXECUTION UINT32_C(0x00020000) -#define MH_VALID_FLAGS UINT32_C(0x0003ffff) +#define MH_ROOT_SAFE UINT32_C(0x00040000) +#define MH_SETUID_SAFE UINT32_C(0x00080000) +#define MH_NO_REEXPORTED_DYLIBS UINT32_C(0x00100000) +#define MH_PIE UINT32_C(0x00200000) +#define MH_DEAD_STRIPPABLE_DYLIB UINT32_C(0x00400000) +#define MH_HAS_TLV_DESCRIPTORS UINT32_C(0x00800000) +#define MH_NO_HEAP_EXECUTION UINT32_C(0x01000000) +#define MH_VALID_FLAGS UINT32_C(0x02ffffff) typedef struct load_command @@ -281,10 +288,27 @@ typedef struct load_command #define LC_SUB_LIBRARY UINT32_C(0x15) #define LC_TWOLEVEL_HINTS UINT32_C(0x16) #define LC_PREBIND_CKSUM UINT32_C(0x17) -#define LC_LOAD_WEAK_DYLIB ( UINT32_C(0x18) | LC_REQ_DYLD) +#define LC_LOAD_WEAK_DYLIB (UINT32_C(0x18) | LC_REQ_DYLD) #define LC_SEGMENT_64 UINT32_C(0x19) #define LC_ROUTINES_64 UINT32_C(0x1a) #define LC_UUID UINT32_C(0x1b) +#define LC_RPATH (UINT32_C(0x1c) | LC_REQ_DYLD) +#define LC_CODE_SIGNATURE UINT32_C(0x1d) +#define LC_SEGMENT_SPLIT_INFO UINT32_C(0x1e) +#define LC_REEXPORT_DYLIB (UINT32_C(0x1f) | LC_REQ_DYLD) +#define LC_LAZY_LOAD_DYLIB UINT32_C(0x20) +#define LC_ENCRYPTION_INFO UINT32_C(0x21) +#define LC_DYLD_INFO UINT32_C(0x22) +#define LC_DYLD_INFO_ONLY (UINT32_C(0x22) | LC_REQ_DYLD) +#define LC_LOAD_UPWARD_DYLIB (UINT32_C(0x23) | LC_REQ_DYLD) +#define LC_VERSION_MIN_MACOSX UINT32_C(0x24) +#define LC_VERSION_MIN_IPHONEOS UINT32_C(0x25) +#define LC_FUNCTION_STARTS UINT32_C(0x26) +#define LC_DYLD_ENVIRONMENT UINT32_C(0x27) +#define LC_MAIN (UINT32_C(0x28) | LC_REQ_DYLD) +#define LC_DATA_IN_CODE UINT32_C(0x29) +#define LC_SOURCE_VERSION UINT32_C(0x2a) +#define LC_DYLIB_CODE_SIGN_DRS UINT32_C(0x2b) typedef struct lc_str diff --git a/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp index fa65b96b2..abb27522e 100644 --- a/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp +++ b/src/VBox/Runtime/r0drv/darwin/alloc-r0drv-darwin.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -31,6 +31,7 @@ #include "the-darwin-kernel.h" #include "internal/iprt.h" #include <iprt/mem.h> +#include <iprt/memobj.h> #include <iprt/assert.h> #include <iprt/err.h> @@ -38,6 +39,29 @@ #include "r0drv/alloc-r0drv.h" +/******************************************************************************* +* Structures and Typedefs * +*******************************************************************************/ +/** + * Extended header used for headers marked with RTMEMHDR_FLAG_EXEC. + * + * This is used with allocating executable memory, for things like generated + * code and loaded modules. + */ +typedef struct RTMEMDARWINHDREX +{ + /** The associated memory object. */ + RTR0MEMOBJ hMemObj; + /** Alignment padding. */ + uint8_t abPadding[ARCH_BITS == 32 ? 12 : 8]; + /** The header we present to the generic API. */ + RTMEMHDR Hdr; +} RTMEMDARWINHDREX; +AssertCompileSize(RTMEMDARWINHDREX, 32); +/** Pointer to an extended memory header. */ +typedef RTMEMDARWINHDREX *PRTMEMDARWINHDREX; + + /** * OS specific allocation function. */ @@ -46,11 +70,30 @@ DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr) if (RT_UNLIKELY(fFlags & RTMEMHDR_FLAG_ANY_CTX)) return VERR_NOT_SUPPORTED; - PRTMEMHDR pHdr = (PRTMEMHDR)IOMalloc(cb + sizeof(*pHdr)); - if (RT_UNLIKELY(!pHdr)) + PRTMEMHDR pHdr; + if (fFlags & RTMEMHDR_FLAG_EXEC) { - printf("rtR0MemAllocEx(%#zx, %#x) failed\n", cb + sizeof(*pHdr), fFlags); - return VERR_NO_MEMORY; + RTR0MEMOBJ hMemObj; + int rc = RTR0MemObjAllocPage(&hMemObj, cb + sizeof(RTMEMDARWINHDREX), true /*fExecutable*/); + if (RT_FAILURE(rc)) + return rc; + PRTMEMDARWINHDREX pExHdr = (PRTMEMDARWINHDREX)RTR0MemObjAddress(hMemObj); + pExHdr->hMemObj = hMemObj; + pHdr = &pExHdr->Hdr; +#if 1 /*fExecutable isn't currently honored above. */ + rc = RTR0MemObjProtect(hMemObj, 0, RTR0MemObjSize(hMemObj), RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC); + AssertRC(rc); +#endif + } + else + { + + pHdr = (PRTMEMHDR)IOMalloc(cb + sizeof(*pHdr)); + if (RT_UNLIKELY(!pHdr)) + { + printf("rtR0MemAllocEx(%#zx, %#x) failed\n", cb + sizeof(*pHdr), fFlags); + return VERR_NO_MEMORY; + } } pHdr->u32Magic = RTMEMHDR_MAGIC; @@ -68,7 +111,14 @@ DECLHIDDEN(int) rtR0MemAllocEx(size_t cb, uint32_t fFlags, PRTMEMHDR *ppHdr) DECLHIDDEN(void) rtR0MemFree(PRTMEMHDR pHdr) { pHdr->u32Magic += 1; - IOFree(pHdr, pHdr->cb + sizeof(*pHdr)); + if (pHdr->fFlags & RTMEMHDR_FLAG_EXEC) + { + PRTMEMDARWINHDREX pExHdr = RT_FROM_MEMBER(pHdr, RTMEMDARWINHDREX, Hdr); + int rc = RTR0MemObjFree(pExHdr->hMemObj, false /*fFreeMappings*/); + AssertRC(rc); + } + else + IOFree(pHdr, pHdr->cb + sizeof(*pHdr)); } diff --git a/src/VBox/Runtime/r0drv/darwin/mach_kernel-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/mach_kernel-r0drv-darwin.cpp index f3f02baf1..377ea1441 100644 --- a/src/VBox/Runtime/r0drv/darwin/mach_kernel-r0drv-darwin.cpp +++ b/src/VBox/Runtime/r0drv/darwin/mach_kernel-r0drv-darwin.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2011 Oracle Corporation + * Copyright (C) 2011-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -138,6 +138,8 @@ typedef struct RTR0MACHKERNELINT uint32_t cSyms; /** The file offset of the symbol table. */ uint32_t offSyms; + /** Offset between link address and actual load address. */ + uintptr_t offLoad; /** @} */ /** @name Used during loading. @@ -352,7 +354,6 @@ static void rtR0MachKernelLoadDone(RTR0MACHKERNELINT *pThis) /** * Looks up a kernel symbol. * - * * @returns The symbol address on success, 0 on failure. * @param pThis The internal scratch data. * @param pszSymbol The symbol to resolve. Automatically prefixed @@ -373,7 +374,7 @@ static uintptr_t rtR0MachKernelLookup(RTR0MACHKERNELINT *pThis, const char *pszS const char *pszTabName= &pThis->pachStrTab[(uint32_t)pSym->n_un.n_strx]; if ( *pszTabName == '_' && strcmp(pszTabName + 1, pszSymbol) == 0) - return pSym->n_value; + return pSym->n_value + pThis->offLoad; } #else /** @todo binary search. */ @@ -517,6 +518,8 @@ static int rtR0MachKernelCheckStandardSymbols(RTR0MACHKERNELINT *pThis) KNOWN_ENTRY(vm_region), KNOWN_ENTRY(vm_map_wire), KNOWN_ENTRY(PE_kputc), + KNOWN_ENTRY(kernel_map), + KNOWN_ENTRY(kernel_pmap), }; for (unsigned i = 0; i < RT_ELEMENTS(s_aStandardCandles); i++) @@ -583,7 +586,7 @@ static int rtR0MachKernelLoadSymTab(RTR0MACHKERNELINT *pThis) RETURN_VERR_BAD_EXE_FORMAT; const char *pszSym = &pThis->pachStrTab[(uint32_t)pSym->n_un.n_strx]; #ifdef IN_RING3 - RTAssertMsg2("%05i: %02x:%08x %02x %04x %s\n", iSym, pSym->n_sect, pSym->n_value, pSym->n_type, pSym->n_desc, pszSym); + RTAssertMsg2("%05i: %02x:%08llx %02x %04x %s\n", iSym, pSym->n_sect, (uint64_t)pSym->n_value, pSym->n_type, pSym->n_desc, pszSym); #endif if (strcmp(pszSym, pszPrev) < 0) @@ -600,19 +603,19 @@ static int rtR0MachKernelLoadSymTab(RTR0MACHKERNELINT *pThis) RETURN_VERR_BAD_EXE_FORMAT; if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY)) RETURN_VERR_BAD_EXE_FORMAT; - if (pSym->n_value < pThis->apSections[pSym->n_sect - 1]->addr) + if ( pSym->n_value < pThis->apSections[pSym->n_sect - 1]->addr + && strcmp(pszSym, "__mh_execute_header")) /* in 10.8 it's no longer absolute (PIE?). */ RETURN_VERR_BAD_EXE_FORMAT; - if ( pSym->n_value - pThis->apSections[pSym->n_sect - 1]->addr - > pThis->apSections[pSym->n_sect - 1]->size) + if ( pSym->n_value - pThis->apSections[pSym->n_sect - 1]->addr + > pThis->apSections[pSym->n_sect - 1]->size + && strcmp(pszSym, "__mh_execute_header")) /* see above. */ RETURN_VERR_BAD_EXE_FORMAT; break; case MACHO_N_ABS: -#if 0 /* Spec say MACHO_NO_SECT, __mh_execute_header has 1 with 10.7/amd64 */ - if (pSym->n_sect != MACHO_NO_SECT) -#else - if (pSym->n_sect > pThis->cSections) -#endif + if ( pSym->n_sect != MACHO_NO_SECT + && ( strcmp(pszSym, "__mh_execute_header") /* n_sect=1 in 10.7/amd64 */ + || pSym->n_sect > pThis->cSections) ) RETURN_VERR_BAD_EXE_FORMAT; if (pSym->n_desc & ~(REFERENCED_DYNAMICALLY)) RETURN_VERR_BAD_EXE_FORMAT; @@ -821,6 +824,12 @@ static int rtR0MachKernelLoadCommands(RTR0MACHKERNELINT *pThis) case LC_DYSYMTAB: case LC_UNIXTHREAD: + case LC_CODE_SIGNATURE: + case LC_VERSION_MIN_MACOSX: + case LC_FUNCTION_STARTS: + case LC_MAIN: + case LC_DATA_IN_CODE: + case LC_SOURCE_VERSION: break; /* not observed */ @@ -840,6 +849,12 @@ static int rtR0MachKernelLoadCommands(RTR0MACHKERNELINT *pThis) case LC_PREPAGE: case LC_TWOLEVEL_HINTS: case LC_PREBIND_CKSUM: + case LC_SEGMENT_SPLIT_INFO: + case LC_ENCRYPTION_INFO: + RETURN_VERR_LDR_UNEXPECTED; + + /* no phones here yet */ + case LC_VERSION_MIN_IPHONEOS: RETURN_VERR_LDR_UNEXPECTED; /* dylib */ @@ -853,6 +868,14 @@ static int rtR0MachKernelLoadCommands(RTR0MACHKERNELINT *pThis) case LC_SUB_UMBRELLA: case LC_SUB_CLIENT: case LC_SUB_LIBRARY: + case LC_RPATH: + case LC_REEXPORT_DYLIB: + case LC_LAZY_LOAD_DYLIB: + case LC_DYLD_INFO: + case LC_DYLD_INFO_ONLY: + case LC_LOAD_UPWARD_DYLIB: + case LC_DYLD_ENVIRONMENT: + case LC_DYLIB_CODE_SIGN_DRS: RETURN_VERR_LDR_UNEXPECTED; default: @@ -989,7 +1012,17 @@ RTDECL(int) RTR0MachKernelOpen(const char *pszMachKernel, PRTR0MACHKERNEL phKern if (RT_SUCCESS(rc)) rc = rtR0MachKernelLoadSymTab(pThis); if (RT_SUCCESS(rc)) + { +#ifdef IN_RING0 + /* + * Determine the load displacement (10.8 kernels are PIE). + */ + uintptr_t uLinkAddr = rtR0MachKernelLookup(pThis, "kernel_map"); + if (uLinkAddr != 0) + pThis->offLoad = (uintptr_t)&kernel_map - uLinkAddr; +#endif rc = rtR0MachKernelCheckStandardSymbols(pThis); + } rtR0MachKernelLoadDone(pThis); if (RT_SUCCESS(rc)) diff --git a/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp index 2354373e1..4af795fea 100644 --- a/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp +++ b/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp @@ -66,13 +66,14 @@ typedef struct RTR0MEMOBJDARWIN /** - * HACK ALERT! + * Touch the pages to force the kernel to create or write-enable the page table + * entries. * - * Touch the pages to force the kernel to create the page - * table entries. This is necessary since the kernel gets - * upset if we take a page fault when preemption is disabled - * and/or we own a simple lock. It has no problems with us - * disabling interrupts when taking the traps, weird stuff. + * This is necessary since the kernel gets upset if we take a page fault when + * preemption is disabled and/or we own a simple lock (same thing). It has no + * problems with us disabling interrupts when taking the traps, weird stuff. + * + * (This is basically a way of invoking vm_fault on a range of pages.) * * @param pv Pointer to the first page. * @param cb The number of bytes. @@ -92,6 +93,32 @@ static void rtR0MemObjDarwinTouchPages(void *pv, size_t cb) /** + * Read (sniff) every page in the range to make sure there are some page tables + * entries backing it. + * + * This is just to be sure vm_protect didn't remove stuff without re-adding it + * if someone should try write-protect something. + * + * @param pv Pointer to the first page. + * @param cb The number of bytes. + */ +static void rtR0MemObjDarwinSniffPages(void const *pv, size_t cb) +{ + uint32_t volatile *pu32 = (uint32_t volatile *)pv; + uint32_t volatile u32Counter = 0; + for (;;) + { + u32Counter += *pu32; + + if (cb <= PAGE_SIZE) + break; + cb -= PAGE_SIZE; + pu32 += PAGE_SIZE / sizeof(uint32_t); + } +} + + +/** * Gets the virtual memory map the specified object is mapped into. * * @returns VM map handle on success, NULL if no map. @@ -425,20 +452,25 @@ static int rtR0MemObjNativeAllocWorker(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, * * The kIOMemoryKernelUserShared flag just forces the result to be page aligned. */ +#if 1 /** @todo Figure out why this is broken. Is it only on snow leopard? Seen allocating memory for the VM structure, last page corrupted or inaccessible. */ + size_t const cbFudged = cb + PAGE_SIZE; +#else + size_t const cbFudged = cb; +#endif int rc; IOBufferMemoryDescriptor *pMemDesc = IOBufferMemoryDescriptor::inTaskWithPhysicalMask(kernel_task, kIOMemoryKernelUserShared | kIODirectionInOut | (fContiguous ? kIOMemoryPhysicallyContiguous : 0), - cb, + cbFudged, PhysMask); if (pMemDesc) { IOReturn IORet = pMemDesc->prepare(kIODirectionInOut); if (IORet == kIOReturnSuccess) { - void *pv = pMemDesc->getBytesNoCopy(0, cb); + void *pv = pMemDesc->getBytesNoCopy(0, cbFudged); if (pv) { /* @@ -502,9 +534,29 @@ static int rtR0MemObjNativeAllocWorker(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, AssertMsgFailed(("enmType=%d\n", enmType)); } - pMemDarwin->pMemDesc = pMemDesc; - *ppMem = &pMemDarwin->Core; - return VINF_SUCCESS; +#if 1 /* Experimental code. */ + if (fExecutable) + { + rc = rtR0MemObjNativeProtect(&pMemDarwin->Core, 0, cb, RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC); +# ifdef RT_STRICT + /* check that the memory is actually mapped. */ + RTTHREADPREEMPTSTATE State = RTTHREADPREEMPTSTATE_INITIALIZER; + RTThreadPreemptDisable(&State); + rtR0MemObjDarwinTouchPages(pv, cb); + RTThreadPreemptRestore(&State); +# endif + } + else +#endif + rc = VINF_SUCCESS; + if (RT_SUCCESS(rc)) + { + pMemDarwin->pMemDesc = pMemDesc; + *ppMem = &pMemDarwin->Core; + return VINF_SUCCESS; + } + + rtR0MemObjDelete(&pMemDarwin->Core); } rc = VERR_NO_MEMORY; @@ -823,7 +875,7 @@ DECLHIDDEN(int) rtR0MemObjNativeMapKernel(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ /* HACK ALERT! */ rtR0MemObjDarwinTouchPages(pv, cbSub); /** @todo First, the memory should've been mapped by now, and second, it - * should have the wired attribute in the PTE (bit 9). Neither is + * should have the wired attribute in the PTE (bit 9). Neither * seems to be the case. The disabled locking code doesn't make any * difference, which is extremely odd, and breaks * rtR0MemObjNativeGetPagePhysAddr (getPhysicalSegment64 -> 64 for the @@ -932,7 +984,9 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, if (!pVmMap) return VERR_NOT_SUPPORTED; - /* Convert the protection. */ + /* + * Convert the protection. + */ vm_prot_t fMachProt; switch (fProt) { @@ -948,17 +1002,22 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, case RTMEM_PROT_READ | RTMEM_PROT_WRITE | RTMEM_PROT_EXEC: fMachProt = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; break; + case RTMEM_PROT_WRITE: + fMachProt = VM_PROT_WRITE | VM_PROT_READ; /* never write-only */ + break; case RTMEM_PROT_WRITE | RTMEM_PROT_EXEC: - fMachProt = VM_PROT_WRITE | VM_PROT_EXECUTE; + fMachProt = VM_PROT_WRITE | VM_PROT_EXECUTE | VM_PROT_READ; /* never write-only or execute-only */ break; case RTMEM_PROT_EXEC: - fMachProt = VM_PROT_EXECUTE; + fMachProt = VM_PROT_EXECUTE | VM_PROT_READ; /* never execute-only */ break; default: AssertFailedReturn(VERR_INVALID_PARAMETER); } - /* do the job. */ + /* + * Do the job. + */ vm_offset_t Start = (uintptr_t)pMem->pv + offSub; kern_return_t krc = vm_protect(pVmMap, Start, @@ -967,6 +1026,27 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, fMachProt); if (krc != KERN_SUCCESS) return RTErrConvertFromDarwinKern(krc); + + /* + * Touch the pages if they should be writable afterwards and accessible + * from code which should never fault. vm_protect() may leave pages + * temporarily write protected, possibly due to pmap no-upgrade rules? + * + * This is the same trick (or HACK ALERT if you like) as applied in + * rtR0MemObjNativeMapKernel. + */ + if ( pMem->enmType != RTR0MEMOBJTYPE_MAPPING + || pMem->u.Mapping.R0Process == NIL_RTR0PROCESS) + { + if (fProt & RTMEM_PROT_WRITE) + rtR0MemObjDarwinTouchPages((void *)Start, cbSub); + /* + * Sniff (read) read-only pages too, just to be sure. + */ + else if (fProt & (RTMEM_PROT_READ | RTMEM_PROT_EXEC)) + rtR0MemObjDarwinSniffPages((void const *)Start, cbSub); + } + return VINF_SUCCESS; } diff --git a/src/VBox/Runtime/r3/win/process-win.cpp b/src/VBox/Runtime/r3/win/process-win.cpp index a9f458684..3e365cb03 100644 --- a/src/VBox/Runtime/r3/win/process-win.cpp +++ b/src/VBox/Runtime/r3/win/process-win.cpp @@ -295,6 +295,10 @@ static int rtProcMapErrorCodes(DWORD dwError) rc = VERR_AUTHENTICATION_FAILURE; break; + case ERROR_FILE_CORRUPT: + rc = VERR_BAD_EXE_FORMAT; + break; + default: /* Could trigger a debug assertion! */ rc = RTErrConvertFromWin32(dwError); diff --git a/src/VBox/Runtime/testcase/tstErrUnique.cpp b/src/VBox/Runtime/testcase/tstErrUnique.cpp index 41386e6f2..802508d11 100644 --- a/src/VBox/Runtime/testcase/tstErrUnique.cpp +++ b/src/VBox/Runtime/testcase/tstErrUnique.cpp @@ -77,7 +77,7 @@ int main() if (g_aErrorMessages[i].iCode == g_aErrorMessages[j].iCode) { - RTPrintf("tstErrUnique: status code %d can mean '%s' or '%s'\n", g_aErrorMessages[i].iCode, g_aErrorMessages[i].pszMsgShort, g_aErrorMessages[j]); + RTPrintf("tstErrUnique: status code %d\n can mean '%s'\n or '%s'\n", g_aErrorMessages[i].iCode, g_aErrorMessages[i].pszMsgShort, g_aErrorMessages[j].pszMsgShort); cErrors++; } } diff --git a/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp b/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp index 789578023..b29181b5e 100644 --- a/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp +++ b/src/VBox/Runtime/testcase/tstRTDarwinMachKernel.cpp @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2011 Oracle Corporation + * Copyright (C) 2011-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -45,6 +45,9 @@ static void dotest(const char *pszMachKernel) "cpu_interrupt", "dtrace_register", "dtrace_suspend", + "kext_alloc", + "kext_free", + "vm_map_protect" }; for (unsigned i = 0; i < RT_ELEMENTS(s_apszSyms); i++) { diff --git a/src/VBox/Storage/testcase/vbox-img.cpp b/src/VBox/Storage/testcase/vbox-img.cpp index e34c169ef..600c1c346 100644 --- a/src/VBox/Storage/testcase/vbox-img.cpp +++ b/src/VBox/Storage/testcase/vbox-img.cpp @@ -437,6 +437,8 @@ static int convInRead(void *pvUser, void *pStorage, uint64_t uOffset, pFS->offBuffer = 0; pFS->cbBuffer = cbSumRead; + if (!cbSumRead && !pcbRead) /* Caller can't handle partial reads. */ + return VERR_EOF; } /* Read several blocks and assemble the result if necessary */ @@ -479,6 +481,8 @@ static int convInRead(void *pvUser, void *pStorage, uint64_t uOffset, pvBuffer = (uint8_t *)pvBuffer + cbThisRead; cbBuffer -= cbThisRead; cbTotalRead += cbThisRead; + if (!cbTotalRead && !pcbRead) /* Caller can't handle partial reads. */ + return VERR_EOF; } while (cbBuffer > 0); if (pcbRead) diff --git a/src/VBox/VMM/VMMAll/EMAll.cpp b/src/VBox/VMM/VMMAll/EMAll.cpp index 17651cd83..586838b2b 100644 --- a/src/VBox/VMM/VMMAll/EMAll.cpp +++ b/src/VBox/VMM/VMMAll/EMAll.cpp @@ -183,8 +183,12 @@ DECLINLINE(int) emDisCoreOne(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, RTGCUINTP { if (PAGE_ADDRESS(InstrGC) == PAGE_ADDRESS(InstrGC + sizeof(State.aOpcode) - 1)) { - if (rc == VERR_PAGE_TABLE_NOT_PRESENT) - HWACCMInvalidatePage(pVCpu, InstrGC); + /* + * If we fail to find the page via the guest's page tables we invalidate the page + * in the host TLB (pertaining to the guest in the NestedPaging case). See #6043 + */ + if (rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) + HWACCMInvalidatePage(pVCpu, InstrGC); Log(("emDisCoreOne: read failed with %d\n", rc)); return rc; @@ -272,8 +276,12 @@ VMMDECL(int) EMInterpretDisasOneEx(PVM pVM, PVMCPU pVCpu, RTGCUINTPTR GCPtrInstr { if (PAGE_ADDRESS(GCPtrInstr) == PAGE_ADDRESS(GCPtrInstr + sizeof(State.aOpcode) - 1)) { - if (rc == VERR_PAGE_TABLE_NOT_PRESENT) - HWACCMInvalidatePage(pVCpu, GCPtrInstr); + /* + * If we fail to find the page via the guest's page tables we invalidate the page + * in the host TLB (pertaining to the guest in the NestedPaging case). See #6043 + */ + if (rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) + HWACCMInvalidatePage(pVCpu, GCPtrInstr); Log(("EMInterpretDisasOneEx: read failed with %d\n", rc)); return rc; diff --git a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp index 892612d7d..153969822 100644 --- a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp +++ b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp @@ -614,7 +614,11 @@ DECLINLINE(int) iomRamRead(PVMCPU pVCpu, void *pDest, RTGCPTR GCSrc, uint32_t cb /* Note: This will fail in R0 or RC if it hits an access handler. That isn't a problem though since the operation can be restarted in REM. */ #ifdef IN_RC - return MMGCRamReadNoTrapHandler(pDest, (void *)(uintptr_t)GCSrc, cb); + int rc = MMGCRamReadNoTrapHandler(pDest, (void *)(uintptr_t)GCSrc, cb); + /* Page may be protected and not directly accessible. */ + if (rc == VERR_ACCESS_DENIED) + rc = VINF_IOM_HC_IOPORT_WRITE; + return rc; #else return PGMPhysReadGCPtr(pVCpu, pDest, GCSrc, cb); #endif @@ -1516,7 +1520,6 @@ static int iomMMIOHandler(PVM pVM, uint32_t uErrorCode, PCPUMCTXCORE pCtxCore, R PDISCPUSTATE pDis = &pVCpu->iom.s.DisState; unsigned cbOp; rc = EMInterpretDisasOne(pVM, pVCpu, pCtxCore, pDis, &cbOp); - AssertRC(rc); if (RT_FAILURE(rc)) { iomMmioReleaseRange(pVM, pRange); diff --git a/src/VBox/VMM/VMMR0/GVMMR0.cpp b/src/VBox/VMM/VMMR0/GVMMR0.cpp index 32616d79d..062be7807 100644 --- a/src/VBox/VMM/VMMR0/GVMMR0.cpp +++ b/src/VBox/VMM/VMMR0/GVMMR0.cpp @@ -816,11 +816,7 @@ GVMMR0DECL(int) GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCpus, PVM *ppV */ const uint32_t cbVM = RT_UOFFSETOF(VM, aCpus[cCpus]); const uint32_t cPages = RT_ALIGN_32(cbVM, PAGE_SIZE) >> PAGE_SHIFT; -#ifdef RT_OS_DARWIN /** @todo Figure out why this is broken. Is it only on snow leopard? */ - rc = RTR0MemObjAllocLow(&pGVM->gvmm.s.VMMemObj, (cPages + 1) << PAGE_SHIFT, false /* fExecutable */); -#else rc = RTR0MemObjAllocLow(&pGVM->gvmm.s.VMMemObj, cPages << PAGE_SHIFT, false /* fExecutable */); -#endif if (RT_SUCCESS(rc)) { PVM pVM = (PVM)RTR0MemObjAddress(pGVM->gvmm.s.VMMemObj); AssertPtr(pVM); diff --git a/src/VBox/VMM/VMMR0/HWSVMR0.cpp b/src/VBox/VMM/VMMR0/HWSVMR0.cpp index d3512f4df..3cb752977 100644 --- a/src/VBox/VMM/VMMR0/HWSVMR0.cpp +++ b/src/VBox/VMM/VMMR0/HWSVMR0.cpp @@ -1904,7 +1904,17 @@ ResumeExecution: if ((errCode & (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) == (X86_TRAP_PF_RSVD | X86_TRAP_PF_P)) { rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, enmShwPagingMode, CPUMCTX2CORE(pCtx), GCPhysFault, errCode); - if (rc == VINF_SUCCESS) + + /* + * If we succeed, resume execution. + * Or, if fail in interpreting the instruction because we couldn't get the guest physical address + * of the page containing the instruction via the guest's page tables (we would invalidate the guest page + * in the host TLB), resume execution which would cause a guest page fault to let the guest handle this + * weird case. See #6043. + */ + if ( rc == VINF_SUCCESS + || rc == VERR_PAGE_TABLE_NOT_PRESENT + || rc == VERR_PAGE_NOT_PRESENT) { Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> resume\n", GCPhysFault, (RTGCPTR)pCtx->rip)); goto ResumeExecution; @@ -1920,7 +1930,13 @@ ResumeExecution: rc = PGMR0Trap0eHandlerNestedPaging(pVM, pVCpu, enmShwPagingMode, errCode, CPUMCTX2CORE(pCtx), GCPhysFault); Log2(("PGMR0Trap0eHandlerNestedPaging %RGv returned %Rrc\n", (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); - if (rc == VINF_SUCCESS) + + /* + * Same case as PGMR0Trap0eHandlerNPMisconfig(). See comment above, #6043. + */ + if ( rc == VINF_SUCCESS + || rc == VERR_PAGE_TABLE_NOT_PRESENT + || rc == VERR_PAGE_NOT_PRESENT) { /* We've successfully synced our shadow pages, so let's just continue execution. */ Log2(("Shadow page fault at %RGv cr2=%RGp error code %x\n", (RTGCPTR)pCtx->rip, GCPhysFault, errCode)); STAM_COUNTER_INC(&pVCpu->hwaccm.s.StatExitShadowPF); diff --git a/src/VBox/VMM/VMMR0/HWVMXR0.cpp b/src/VBox/VMM/VMMR0/HWVMXR0.cpp index 014bdbfbc..e9887c679 100644 --- a/src/VBox/VMM/VMMR0/HWVMXR0.cpp +++ b/src/VBox/VMM/VMMR0/HWVMXR0.cpp @@ -1442,39 +1442,6 @@ VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx) pCtx->fsHid.Attr.n.u2Dpl = 0; pCtx->gsHid.Attr.n.u2Dpl = 0; pCtx->ssHid.Attr.n.u2Dpl = 0; - - /* The limit must correspond to the 32 bits setting. */ - if (!pCtx->csHid.Attr.n.u1DefBig) - pCtx->csHid.u32Limit &= 0xffff; - if (!pCtx->dsHid.Attr.n.u1DefBig) - pCtx->dsHid.u32Limit &= 0xffff; - if (!pCtx->esHid.Attr.n.u1DefBig) - pCtx->esHid.u32Limit &= 0xffff; - if (!pCtx->fsHid.Attr.n.u1DefBig) - pCtx->fsHid.u32Limit &= 0xffff; - if (!pCtx->gsHid.Attr.n.u1DefBig) - pCtx->gsHid.u32Limit &= 0xffff; - if (!pCtx->ssHid.Attr.n.u1DefBig) - pCtx->ssHid.u32Limit &= 0xffff; - } - else - /* Switching from protected mode to real mode. */ - if ( pVCpu->hwaccm.s.vmx.enmLastSeenGuestMode >= PGMMODE_PROTECTED - && enmGuestMode == PGMMODE_REAL) - { - /* The limit must also be set to 0xffff. */ - pCtx->csHid.u32Limit = 0xffff; - pCtx->dsHid.u32Limit = 0xffff; - pCtx->esHid.u32Limit = 0xffff; - pCtx->fsHid.u32Limit = 0xffff; - pCtx->gsHid.u32Limit = 0xffff; - pCtx->ssHid.u32Limit = 0xffff; - - Assert(pCtx->csHid.u64Base <= 0xfffff); - Assert(pCtx->dsHid.u64Base <= 0xfffff); - Assert(pCtx->esHid.u64Base <= 0xfffff); - Assert(pCtx->fsHid.u64Base <= 0xfffff); - Assert(pCtx->gsHid.u64Base <= 0xfffff); } pVCpu->hwaccm.s.vmx.enmLastSeenGuestMode = enmGuestMode; } @@ -3493,7 +3460,6 @@ ResumeExecution: /* Handle the pagefault trap for the nested shadow table. */ rc = PGMR0Trap0eHandlerNestedPaging(pVM, pVCpu, PGMMODE_EPT, errCode, CPUMCTX2CORE(pCtx), GCPhys); - Log2(("PGMR0Trap0eHandlerNestedPaging %RGv returned %Rrc\n", (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); if (rc == VINF_SUCCESS) { /* We've successfully synced our shadow pages, so let's just continue execution. */ Log2(("Shadow page fault at %RGv cr2=%RGp error code %x\n", (RTGCPTR)pCtx->rip, exitQualification , errCode)); @@ -3502,10 +3468,13 @@ ResumeExecution: TRPMResetTrap(pVCpu); goto ResumeExecution; } + /** @todo We probably should handle failure to get the instruction page + * (VERR_PAGE_NOT_PRESENT, VERR_PAGE_TABLE_NOT_PRESENT). See + * @bugref{6043}. */ #ifdef VBOX_STRICT if (rc != VINF_EM_RAW_EMULATE_INSTR) - LogFlow(("PGMTrap0eHandlerNestedPaging failed with %d\n", VBOXSTRICTRC_VAL(rc))); + LogFlow(("PGMTrap0eHandlerNestedPaging at %RGv failed with %Rrc\n", (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); #endif /* Need to go back to the recompiler to emulate the instruction. */ TRPMResetTrap(pVCpu); @@ -3545,6 +3514,9 @@ ResumeExecution: Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> resume\n", GCPhys, (RTGCPTR)pCtx->rip)); goto ResumeExecution; } + /** @todo We probably should handle failure to get the instruction page + * (VERR_PAGE_NOT_PRESENT, VERR_PAGE_TABLE_NOT_PRESENT). See + * @bugref{6043}. */ Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> %Rrc\n", GCPhys, (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc))); break; @@ -4421,7 +4393,8 @@ VMMR0DECL(int) VMXR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt) Log2(("VMXR0InvalidatePage %RGv\n", GCVirt)); - /* Only relevant if we want to use VPID. + /* Only relevant if we want to use VPID as otherwise every VMX transition + * will flush the TLBs and paging-structure caches. * In the nested paging case we still see such calls, but * can safely ignore them. (e.g. after cr3 updates) */ diff --git a/src/VBox/VMM/VMMR3/CFGM.cpp b/src/VBox/VMM/VMMR3/CFGM.cpp index bd1b7acf7..06cbdbdb2 100644 --- a/src/VBox/VMM/VMMR3/CFGM.cpp +++ b/src/VBox/VMM/VMMR3/CFGM.cpp @@ -3049,8 +3049,23 @@ static void cfgmR3Dump(PCFGMNODE pRoot, unsigned iLevel, PCDBGFINFOHLP pHlp) switch (CFGMR3GetValueType(pLeaf)) { case CFGMVALUETYPE_INTEGER: - pHlp->pfnPrintf(pHlp, " %-*s <integer> = %#018llx (%lld)\n", (int)cchMax, pLeaf->szName, pLeaf->Value.Integer.u64, pLeaf->Value.Integer.u64); + { + pHlp->pfnPrintf(pHlp, " %-*s <integer> = %#018llx (%'lld", (int)cchMax, pLeaf->szName, pLeaf->Value.Integer.u64, pLeaf->Value.Integer.u64); + if ( ( pLeaf->cchName >= 4 + && !RTStrCmp(&pLeaf->szName[pLeaf->cchName - 4], "Size")) + || ( pLeaf->cchName >= 2 + && !RTStrNCmp(pLeaf->szName, "cb", 2)) ) + { + if (pLeaf->Value.Integer.u64 > _2G) + pHlp->pfnPrintf(pHlp, ", %'lld GB", pLeaf->Value.Integer.u64 / _1G); + else if (pLeaf->Value.Integer.u64 > _2M) + pHlp->pfnPrintf(pHlp, ", %'lld MB", pLeaf->Value.Integer.u64 / _1M); + else if (pLeaf->Value.Integer.u64 > _2K) + pHlp->pfnPrintf(pHlp, ", %'lld KB", pLeaf->Value.Integer.u64 / _1K); + } + pHlp->pfnPrintf(pHlp, ")\n"); break; + } case CFGMVALUETYPE_STRING: pHlp->pfnPrintf(pHlp, " %-*s <string> = \"%s\" (cb=%zu)\n", (int)cchMax, pLeaf->szName, pLeaf->Value.String.psz, pLeaf->Value.String.cb); diff --git a/src/VBox/VMM/VMMR3/EM.cpp b/src/VBox/VMM/VMMR3/EM.cpp index 3647da149..7d14b9734 100644 --- a/src/VBox/VMM/VMMR3/EM.cpp +++ b/src/VBox/VMM/VMMR3/EM.cpp @@ -1606,6 +1606,7 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc) /* * Interrupts. */ + bool fWakeupPending = false; if ( !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY) && !VMCPU_FF_ISPENDING(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS) && (!rc || rc >= VINF_EM_RESCHEDULE_HWACC) @@ -1623,6 +1624,8 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc) rcIrq = rc2; #endif UPDATE_RC(); + /* Reschedule required: We must not miss the wakeup below! */ + fWakeupPending = true; } /** @todo really ugly; if we entered the hlt state when exiting the recompiler and an interrupt was pending, we previously got stuck in the halted state. */ else if (REMR3QueryPendingInterrupt(pVM, pVCpu) != REM_NO_PENDING_IRQ) @@ -1653,7 +1656,8 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc) /* * EMT Rendezvous (must be serviced before termination). */ - if (VM_FF_ISPENDING(pVM, VM_FF_EMT_RENDEZVOUS)) + if ( !fWakeupPending /* don't miss the wakeup from EMSTATE_HALTED! */ + && VM_FF_ISPENDING(pVM, VM_FF_EMT_RENDEZVOUS)) { rc2 = VMMR3EmtRendezvousFF(pVM, pVCpu); UPDATE_RC(); @@ -1672,7 +1676,8 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc) /* * State change request (cleared by vmR3SetStateLocked). */ - if (VM_FF_ISPENDING(pVM, VM_FF_CHECK_VM_STATE)) + if ( !fWakeupPending /* don't miss the wakeup from EMSTATE_HALTED! */ + && VM_FF_ISPENDING(pVM, VM_FF_CHECK_VM_STATE)) { VMSTATE enmState = VMR3GetState(pVM); switch (enmState) diff --git a/src/VBox/VMM/VMMR3/HWACCM.cpp b/src/VBox/VMM/VMMR3/HWACCM.cpp index 320f6b17a..f4239689e 100644 --- a/src/VBox/VMM/VMMR3/HWACCM.cpp +++ b/src/VBox/VMM/VMMR3/HWACCM.cpp @@ -2275,6 +2275,12 @@ VMMR3DECL(bool) HWACCMR3CanExecuteGuest(PVM pVM, PCPUMCTX pCtx) */ if ( ( pCtx->cs != (pCtx->csHid.u64Base >> 4) && pCtx->csHid.u64Base != 0xffff0000 /* we can deal with the BIOS code as it's also mapped into the lower region. */) + || (pCtx->csHid.u32Limit != 0xffff) + || (pCtx->dsHid.u32Limit != 0xffff) + || (pCtx->esHid.u32Limit != 0xffff) + || (pCtx->ssHid.u32Limit != 0xffff) + || (pCtx->fsHid.u32Limit != 0xffff) + || (pCtx->gsHid.u32Limit != 0xffff) || pCtx->ds != (pCtx->dsHid.u64Base >> 4) || pCtx->es != (pCtx->esHid.u64Base >> 4) || pCtx->fs != (pCtx->fsHid.u64Base >> 4) diff --git a/src/VBox/VMM/testcase/tstSSM.cpp b/src/VBox/VMM/testcase/tstSSM.cpp index 4908e4fa8..6774d4496 100644 --- a/src/VBox/VMM/testcase/tstSSM.cpp +++ b/src/VBox/VMM/testcase/tstSSM.cpp @@ -31,6 +31,7 @@ #include <VBox/err.h> #include <VBox/param.h> #include <iprt/assert.h> +#include <iprt/file.h> #include <iprt/initterm.h> #include <iprt/mem.h> #include <iprt/stream.h> @@ -436,7 +437,7 @@ DECLCALLBACK(int) Item03Save(PPDMDEVINS pDevIns, PSSMHANDLE pSSM) /* next */ cb -= PAGE_SIZE; pu8Org += PAGE_SIZE; - if (pu8Org > &gabBigMem[sizeof(gabBigMem)]) + if (pu8Org >= &gabBigMem[sizeof(gabBigMem)]) pu8Org = &gabBigMem[0]; } @@ -500,7 +501,7 @@ DECLCALLBACK(int) Item03Load(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVers /* next */ cb -= PAGE_SIZE; pu8Org += PAGE_SIZE; - if (pu8Org > &gabBigMem[sizeof(gabBigMem)]) + if (pu8Org >= &gabBigMem[sizeof(gabBigMem)]) pu8Org = &gabBigMem[0]; } @@ -900,6 +901,9 @@ int main(int argc, char **argv) return 1; } + /* delete */ + RTFileDelete(pszFilename); + RTPrintf("tstSSM: SUCCESS\n"); return 0; } diff --git a/src/VBox/VMM/testcase/tstVMM.cpp b/src/VBox/VMM/testcase/tstVMM.cpp index f745d4529..bd1671b41 100644 --- a/src/VBox/VMM/testcase/tstVMM.cpp +++ b/src/VBox/VMM/testcase/tstVMM.cpp @@ -292,6 +292,9 @@ int main(int argc, char **argv) /* * Cleanup. */ + rc = VMR3PowerOff(pVM); + if (RT_FAILURE(rc)) + RTTestFailed(hTest, "VMR3PowerOff failed: rc=%Rrc\n", rc); rc = VMR3Destroy(pVM); if (RT_FAILURE(rc)) RTTestFailed(hTest, "VMR3Destroy failed: rc=%Rrc\n", rc); diff --git a/src/VBox/VMM/testcase/tstVMMFork.cpp b/src/VBox/VMM/testcase/tstVMMFork.cpp index 04ed9167e..4e0a4d12a 100644 --- a/src/VBox/VMM/testcase/tstVMMFork.cpp +++ b/src/VBox/VMM/testcase/tstVMMFork.cpp @@ -145,16 +145,22 @@ int main(int argc, char* argv[]) /* * Cleanup. */ + rc = VMR3PowerOff(pVM); + if (!RT_SUCCESS(rc)) + { + RTPrintf(TESTCASE ": error: failed to power off vm! rc=%Rrc\n", rc); + rcErrors++; + } rc = VMR3Destroy(pVM); if (!RT_SUCCESS(rc)) { - RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%d\n", rc); + RTPrintf(TESTCASE ": error: failed to destroy vm! rc=%Rrc\n", rc); rcErrors++; } } else { - RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%d\n", rc); + RTPrintf(TESTCASE ": fatal error: failed to create vm! rc=%Rrc\n", rc); rcErrors++; } diff --git a/src/VBox/VMM/testcase/tstVMREQ.cpp b/src/VBox/VMM/testcase/tstVMREQ.cpp index 25bc65808..dec9cf796 100644 --- a/src/VBox/VMM/testcase/tstVMREQ.cpp +++ b/src/VBox/VMM/testcase/tstVMREQ.cpp @@ -283,6 +283,12 @@ int main(int argc, char **argv) /* * Cleanup. */ + rc = VMR3PowerOff(pVM); + if (!RT_SUCCESS(rc)) + { + RTPrintf(TESTCASE ": error: failed to power off vm! rc=%Rrc\n", rc); + g_cErrors++; + } rc = VMR3Destroy(pVM); if (!RT_SUCCESS(rc)) { diff --git a/src/apps/adpctl/VBoxNetAdpCtl.cpp b/src/apps/adpctl/VBoxNetAdpCtl.cpp index b2a231de8..41724a806 100644 --- a/src/apps/adpctl/VBoxNetAdpCtl.cpp +++ b/src/apps/adpctl/VBoxNetAdpCtl.cpp @@ -38,6 +38,7 @@ /** @todo These are duplicates from src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdpInternal.h */ #define VBOXNETADP_CTL_DEV_NAME "/dev/vboxnetctl" +#define VBOXNETADP_MAX_INSTANCES 128 #define VBOXNETADP_NAME "vboxnet" #define VBOXNETADP_MAX_NAME_LEN 32 #define VBOXNETADP_CTL_ADD _IOWR('v', 1, VBOXNETADPREQ) @@ -209,7 +210,7 @@ static int checkAdapterName(const char *pcszNameIn, char *pszNameOut) if ( strlen(pcszNameIn) >= VBOXNETADP_MAX_NAME_LEN || sscanf(pcszNameIn, "vboxnet%d", &iAdapterIndex) != 1 - || iAdapterIndex < 0 || iAdapterIndex > 99 ) + || iAdapterIndex < 0 || iAdapterIndex >= VBOXNETADP_MAX_INSTANCES ) { fprintf(stderr, "VBoxNetAdpCtl: Setting configuration for '%s' is not supported.\n", pcszNameIn); return ADPCTLERR_BAD_NAME; diff --git a/src/recompiler/target-i386/translate.c b/src/recompiler/target-i386/translate.c index eaec68a8f..4d00738ee 100644 --- a/src/recompiler/target-i386/translate.c +++ b/src/recompiler/target-i386/translate.c @@ -2554,17 +2554,6 @@ static inline void gen_op_movl_seg_T0_vm(int seg_reg) tcg_gen_shli_tl(cpu_T[0], cpu_T[0], 4); tcg_gen_st_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,segs[seg_reg].base)); -#ifdef VBOX - int flags = DESC_P_MASK | DESC_S_MASK | DESC_W_MASK; - if (seg_reg == R_CS) - flags |= DESC_CS_MASK; - gen_op_movl_T0_im(flags); - tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,segs[seg_reg].flags)); - - /* Set the limit to 0xffff. */ - gen_op_movl_T0_im(0xffff); - tcg_gen_st32_tl(cpu_T[0], cpu_env, offsetof(CPUX86State,segs[seg_reg].limit)); -#endif } /* move T0 to seg_reg and compute if the CPU state may change. Never |
