summaryrefslogtreecommitdiff
path: root/src/VBox/Main/src-all/ExtPackUtil.cpp
diff options
context:
space:
mode:
authorMichael Meskes <meskes@debian.org>2011-11-15 12:34:57 +0100
committerMichael Meskes <meskes@debian.org>2011-11-15 12:34:57 +0100
commit9822fe88ca8cc3ef4c3c35e28e6b795f4fc96a53 (patch)
tree05f00fc29a0037b188d0767b1ef828ee557f7bca /src/VBox/Main/src-all/ExtPackUtil.cpp
parent1cf00a61132b69bc7e27254fdd74bf105d2da28c (diff)
downloadvirtualbox-9822fe88ca8cc3ef4c3c35e28e6b795f4fc96a53.tar.gz
Imported Upstream version 4.1.6-dfsgupstream/4.1.6-dfsg
Diffstat (limited to 'src/VBox/Main/src-all/ExtPackUtil.cpp')
-rw-r--r--src/VBox/Main/src-all/ExtPackUtil.cpp40
1 files changed, 32 insertions, 8 deletions
diff --git a/src/VBox/Main/src-all/ExtPackUtil.cpp b/src/VBox/Main/src-all/ExtPackUtil.cpp
index 86728a2fd..bcdc91aec 100644
--- a/src/VBox/Main/src-all/ExtPackUtil.cpp
+++ b/src/VBox/Main/src-all/ExtPackUtil.cpp
@@ -4,7 +4,7 @@
*/
/*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -69,6 +69,7 @@ static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
a_pExtPackDesc->strName.setNull();
a_pExtPackDesc->strDescription.setNull();
a_pExtPackDesc->strVersion.setNull();
+ a_pExtPackDesc->strEdition.setNull();
a_pExtPackDesc->uRevision = 0;
a_pExtPackDesc->strMainModule.setNull();
a_pExtPackDesc->strVrdeModule.setNull();
@@ -145,6 +146,12 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK
if (!pVersionElm->getAttributeValue("revision", uRevision))
uRevision = 0;
+ const char *pszEdition;
+ if (!pVersionElm->getAttributeValue("edition", pszEdition))
+ pszEdition = "";
+ if (!VBoxExtPackIsValidEditionString(pszEdition))
+ return &(new RTCString("Invalid edition string: "))->append(pszEdition);
+
const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
if (!pMainModuleElm)
return new RTCString("The 'MainModule' element is missing");
@@ -193,6 +200,7 @@ static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACK
a_pExtPackDesc->strName = pszName;
a_pExtPackDesc->strDescription = pszDesc;
a_pExtPackDesc->strVersion = pszVersion;
+ a_pExtPackDesc->strEdition = pszEdition;
a_pExtPackDesc->uRevision = uRevision;
a_pExtPackDesc->strMainModule = pszMainModule;
a_pExtPackDesc->strVrdeModule = pszVrdeModule;
@@ -349,6 +357,7 @@ void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
a_pExtPackDesc->strName.setNull();
a_pExtPackDesc->strDescription.setNull();
a_pExtPackDesc->strVersion.setNull();
+ a_pExtPackDesc->strEdition.setNull();
a_pExtPackDesc->uRevision = 0;
a_pExtPackDesc->strMainModule.setNull();
a_pExtPackDesc->strVrdeModule.setNull();
@@ -572,6 +581,8 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion)
/* upper case string + numbers indicating the build type */
if (*pszVersion == '-' || *pszVersion == '_')
{
+ /** @todo Should probably restrict this to known build types (alpha,
+ * beta, rc, ++). */
do
pszVersion++;
while ( RT_C_IS_DIGIT(*pszVersion)
@@ -580,17 +591,30 @@ bool VBoxExtPackIsValidVersionString(const char *pszVersion)
|| *pszVersion == '_');
}
- /* revision or nothing */
- if (*pszVersion != '\0')
+ return *pszVersion == '\0';
+}
+
+/**
+ * Validates the extension pack edition string.
+ *
+ * @returns true if valid, false if not.
+ * @param pszEdition The edition string to validate.
+ */
+bool VBoxExtPackIsValidEditionString(const char *pszEdition)
+{
+ if (*pszEdition)
{
- if (*pszVersion != 'r')
+ if (!RT_C_IS_UPPER(*pszEdition))
return false;
+
do
- pszVersion++;
- while (RT_C_IS_DIGIT(*pszVersion));
+ pszEdition++;
+ while ( RT_C_IS_UPPER(*pszEdition)
+ || RT_C_IS_DIGIT(*pszEdition)
+ || *pszEdition == '-'
+ || *pszEdition == '_');
}
-
- return *pszVersion == '\0';
+ return *pszEdition == '\0';
}
/**