qmi-codegen: handle variable-sized string length prefix fields

Most string lengths are UINT8, but some (WDS Get Current Settings
PCSCF Domain Name List, for example) are UINT16.
diff --git a/build-aux/qmi-codegen/VariableString.py b/build-aux/qmi-codegen/VariableString.py
index 02f827b..5be84e2 100644
--- a/build-aux/qmi-codegen/VariableString.py
+++ b/build-aux/qmi-codegen/VariableString.py
@@ -42,7 +42,7 @@
             self.is_fixed_size = True
             # Fixed-size strings
             self.needs_dispose = False
-            self.length_prefix = False
+            self.length_prefix_size = 0
             self.fixed_size = dictionary['fixed-size']
             self.max_size = ''
         else:
@@ -51,7 +51,15 @@
             self.needs_dispose = True
             # Strings which are given as the full value of a TLV will NOT have a
             # length prefix
-            self.length_prefix = False if 'type' in dictionary and dictionary['type'] == 'TLV' else True
+            if 'type' in dictionary and dictionary['type'] == 'TLV':
+                self.length_prefix_size = 0
+            elif 'length-prefix-size' in dictionary:
+                self.length_prefix_size = dictionary['length-prefix-size']
+                if self.length_prefix_size not in ['8', '16']:
+                    raise ValueError('Invalid length prefix size %s: not 8 or 16' % self.length_prefix_size)
+            else:
+                # Default to UINT8
+                self.length_prefix_size = 8
             self.fixed_size = ''
             self.max_size = dictionary['max-size'] if 'max-size' in dictionary else ''
 
@@ -76,14 +84,14 @@
                 '${lp}    &${variable_name}[0]);\n'
                 '${lp}${variable_name}[${fixed_size}] = \'\\0\';\n')
         else:
-            translations['length_prefix'] = 'TRUE' if self.length_prefix else 'FALSE'
+            translations['length_prefix_size'] = self.length_prefix_size
             translations['max_size'] = self.max_size if self.max_size != '' else '0'
             template = (
                 '${lp}/* Read the string variable from the buffer */\n'
                 '${lp}qmi_utils_read_string_from_buffer (\n'
                 '${lp}    &${buffer_name},\n'
                 '${lp}    &${buffer_len},\n'
-                '${lp}    ${length_prefix},\n'
+                '${lp}    ${length_prefix_size},\n'
                 '${lp}    ${max_size},\n'
                 '${lp}    &(${variable_name}));\n')
 
@@ -109,13 +117,13 @@
                 '${lp}    ${fixed_size},\n'
                 '${lp}    ${variable_name});\n')
         else:
-            translations['length_prefix'] = 'TRUE' if self.length_prefix else 'FALSE'
+            translations['length_prefix_size'] = self.length_prefix_size
             template = (
                 '${lp}/* Write the string variable to the buffer */\n'
                 '${lp}qmi_utils_write_string_to_buffer (\n'
                 '${lp}    &${buffer_name},\n'
                 '${lp}    &${buffer_len},\n'
-                '${lp}    ${length_prefix},\n'
+                '${lp}    ${length_prefix_size},\n'
                 '${lp}    ${variable_name});\n')
 
         f.write(string.Template(template).substitute(translations))
@@ -149,7 +157,7 @@
                 '${lp}    g_string_append_printf (${printable}, "%s", tmp);\n'
                 '${lp}}\n')
         else:
-            translations['length_prefix'] = 'TRUE' if self.length_prefix else 'FALSE'
+            translations['length_prefix_size'] = self.length_prefix_size
             translations['max_size'] = self.max_size if self.max_size != '' else '0'
             template = (
                 '\n'
@@ -160,7 +168,7 @@
                 '${lp}    qmi_utils_read_string_from_buffer (\n'
                 '${lp}        &${buffer_name},\n'
                 '${lp}        &${buffer_len},\n'
-                '${lp}        ${length_prefix},\n'
+                '${lp}        ${length_prefix_size},\n'
                 '${lp}        ${max_size},\n'
                 '${lp}        &tmp);\n'
                 '\n'