[virt-tools-list] [libosinfo 1/3] differenciate between expected/output script name

Fabiano Fidêncio fabiano at fidencio.org
Sun Oct 7 14:49:34 UTC 2012


We need to differenciate between the expected filename and the output
filename. While former always remains the same (as some operating
systems expect it with a particular name), the latter is dependent on
the output prefix (set by application)
---
 data/install-scripts/windows-sif.xml      |  4 +--
 data/install-scripts/windows-unattend.xml |  4 +--
 osinfo/libosinfo.syms                     |  1 +
 osinfo/osinfo_install_script.c            | 42 +++++++++++++++++++++++++++++--
 osinfo/osinfo_install_script.h            |  4 ++-
 osinfo/osinfo_loader.c                    |  2 +-
 6 files changed, 49 insertions(+), 8 deletions(-)

diff --git a/data/install-scripts/windows-sif.xml b/data/install-scripts/windows-sif.xml
index 52cca39..76f9baf 100644
--- a/data/install-scripts/windows-sif.xml
+++ b/data/install-scripts/windows-sif.xml
@@ -7,7 +7,7 @@
       <param name="reg-product-key" policy="required"/>
       <param name="user-realname" policy="required"/>
     </config>
-    <template filename="windows.sif">
+    <template filename="winnt.sif">
       <xsl:stylesheet
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         version="1.0">
@@ -70,7 +70,7 @@
       <param name="user-realname" policy="required"/>
       <param name="hostname" policy="required"/>
     </config>
-    <template filename="windows.sif">
+    <template filename="winnt.sif">
       <xsl:stylesheet
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         version="1.0">
diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml
index 0695fa6..38fd9ab 100644
--- a/data/install-scripts/windows-unattend.xml
+++ b/data/install-scripts/windows-unattend.xml
@@ -10,7 +10,7 @@
       <param name="user-realname" policy="optional"/>
       <param name="reg-product-key" policy="required"/>
     </config>
-    <template filename="windows.xml">
+    <template filename="autounattend.xml">
       <xsl:stylesheet
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         version="1.0">
@@ -175,7 +175,7 @@
     <param name="user-realname" policy="optional"/>
     <param name="hostname" policy="required"/>
    </config>
-    <template filename="windows.xml">
+    <template filename="autounattend.xml">
      <xsl:stylesheet
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       version="1.0">
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 6676588..772e89c 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -308,6 +308,7 @@ LIBOSINFO_0.2.1 {
 	osinfo_entity_get_param_value_int64;
 	osinfo_entity_get_param_value_int64_with_default;
 	osinfo_entity_set_param_int64;
+	osinfo_install_script_get_expected_filename;
 } LIBOSINFO_0.2.0;
 
 /* Symbols in next release...
diff --git a/osinfo/osinfo_install_script.c b/osinfo/osinfo_install_script.c
index bb2c2eb..8c5d200 100644
--- a/osinfo/osinfo_install_script.c
+++ b/osinfo/osinfo_install_script.c
@@ -47,6 +47,7 @@ G_DEFINE_TYPE (OsinfoInstallScript, osinfo_install_script, OSINFO_TYPE_ENTITY);
 struct _OsinfoInstallScriptPrivate
 {
     gchar *output_prefix;
+    gchar *output_filename;
     GList *config_param_list;
 };
 
@@ -147,6 +148,7 @@ osinfo_install_script_finalize (GObject *object)
 {
     OsinfoInstallScript *script = OSINFO_INSTALL_SCRIPT (object);
     g_free(script->priv->output_prefix);
+    g_free(script->priv->output_filename);
     g_list_free_full(script->priv->config_param_list, g_object_unref);
 
     /* Chain up to the parent class */
@@ -344,8 +346,18 @@ const gchar *osinfo_install_script_get_product_key_format(OsinfoInstallScript *s
 void osinfo_install_script_set_output_prefix(OsinfoInstallScript *script,
                                              const gchar *prefix)
 {
+    const char *output_filename =
+        osinfo_install_script_get_expected_filename(script);
+
     g_free(script->priv->output_prefix);
     script->priv->output_prefix = g_strdup(prefix);
+
+    /* update output_filename whenever output_prefix is changed */
+    g_free(script->priv->output_filename);
+    script->priv->output_filename = g_strjoin("-",
+                                              prefix,
+                                              output_filename,
+                                              NULL);
 }
 
 const gchar *osinfo_install_script_get_output_prefix(OsinfoInstallScript *script)
@@ -353,10 +365,36 @@ const gchar *osinfo_install_script_get_output_prefix(OsinfoInstallScript *script
     return script->priv->output_prefix;
 }
 
-const gchar *osinfo_install_script_get_output_filename(OsinfoInstallScript *script)
+/**
+ * osinfo_install_script_get_expected_filename:
+ *
+ * Some operating systems (as Windows) expect that script filename has
+ * particular name to work.
+ *
+ * Returns: (transfer none): the expected script filename
+ */
+const gchar *osinfo_install_script_get_expected_filename(OsinfoInstallScript *script)
 {
     return osinfo_entity_get_param_value(OSINFO_ENTITY(script),
-                                         OSINFO_INSTALL_SCRIPT_PROP_OUTPUT_FILENAME);
+                                         OSINFO_INSTALL_SCRIPT_PROP_EXPECTED_FILENAME);
+}
+
+/**
+ * osinfo_install_script_get_output_filename:
+ *
+ * Some operating systems are able to use any script filename, allowing the
+ * application to set the filename as desired. libosinfo provides this
+ * functionality by set the expected filename's prefix using
+ * osinfo_install_script_set_output_prefix() function.
+ *
+ * Returns: (transfer none): the output script filename
+ */
+const gchar *osinfo_install_script_get_output_filename(OsinfoInstallScript *script)
+{
+    if (script->priv->output_filename == NULL)
+        return osinfo_install_script_get_expected_filename(script);
+
+    return script->priv->output_filename;
 }
 
 struct _OsinfoInstallScriptGenerateData {
diff --git a/osinfo/osinfo_install_script.h b/osinfo/osinfo_install_script.h
index cbfc517..4af62e0 100644
--- a/osinfo/osinfo_install_script.h
+++ b/osinfo/osinfo_install_script.h
@@ -50,7 +50,7 @@ typedef struct _OsinfoInstallScriptPrivate OsinfoInstallScriptPrivate;
 #define OSINFO_INSTALL_SCRIPT_PROP_TEMPLATE_DATA      "template-data"
 #define OSINFO_INSTALL_SCRIPT_PROP_PROFILE            "profile"
 #define OSINFO_INSTALL_SCRIPT_PROP_PRODUCT_KEY_FORMAT "product-key-format"
-#define OSINFO_INSTALL_SCRIPT_PROP_OUTPUT_FILENAME    "output-filename"
+#define OSINFO_INSTALL_SCRIPT_PROP_EXPECTED_FILENAME  "expected-filename"
 #define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_REQUIRED    "required"
 #define OSINFO_INSTALL_SCRIPT_PROP_CONFIG_OPTIONAL    "optional"
 
@@ -95,6 +95,8 @@ const gchar *osinfo_install_script_get_output_prefix(OsinfoInstallScript *script
 
 const gchar *osinfo_install_script_get_output_filename(OsinfoInstallScript *script);
 
+const gchar *osinfo_install_script_get_expected_filename(OsinfoInstallScript *script);
+
 void osinfo_install_script_generate_async(OsinfoInstallScript *script,
                                           OsinfoOs *os,
                                           OsinfoInstallConfig *config,
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index ab507da..13cbe5f 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -620,7 +620,7 @@ static void osinfo_loader_install_script(OsinfoLoader *loader,
         goto error;
     if (value)
         osinfo_entity_set_param(OSINFO_ENTITY(installScript),
-                                OSINFO_INSTALL_SCRIPT_PROP_OUTPUT_FILENAME,
+                                OSINFO_INSTALL_SCRIPT_PROP_EXPECTED_FILENAME,
                                 value);
     g_free(value);
 
-- 
1.7.12.1




More information about the virt-tools-list mailing list