Browse Source

[settings] Remove "uristring" setting type

Commit b5f5f73 ("[cmdline] Expand settings within each command-line
token individually") effectively rendered the "uristring" setting type
obsolete, since strings containing whitespace no longer break the
command line parser.  The concept of the "uristring" type is not well
defined, since URI escaping rules depend on which portion of a URI is
being escaped.

Remove the "uristring" type, converting it into an alias for the
"string" setting type so as to avoid breaking existing scripts.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 10 years ago
parent
commit
09b057ce84
2 changed files with 5 additions and 62 deletions
  1. 5
    49
      src/core/settings.c
  2. 0
    13
      src/tests/settings_test.c

+ 5
- 49
src/core/settings.c View File

1658
 	.format = format_string_setting,
1658
 	.format = format_string_setting,
1659
 };
1659
 };
1660
 
1660
 
1661
-/**
1662
- * Parse URI-encoded string setting value
1661
+/** A URI-encoded string setting type
1663
  *
1662
  *
1664
- * @v type		Setting type
1665
- * @v value		Formatted setting value
1666
- * @v buf		Buffer to contain raw value
1667
- * @v len		Length of buffer
1668
- * @ret len		Length of raw value, or negative error
1663
+ * This setting type is obsolete; the name ":uristring" is retained to
1664
+ * avoid breaking existing scripts.
1669
  */
1665
  */
1670
-static int parse_uristring_setting ( const struct setting_type *type __unused,
1671
-				     const char *value, void *buf, size_t len ){
1672
-	char tmp[ len + 1 /* NUL */ ];
1673
-	size_t raw_len;
1674
-
1675
-	/* Decode to temporary buffer (including NUL) */
1676
-	raw_len = uri_decode ( value, tmp, sizeof ( tmp ) );
1677
-
1678
-	/* Copy to output buffer (excluding NUL) */
1679
-	if ( len > raw_len )
1680
-		len = raw_len;
1681
-	memcpy ( buf, tmp, len );
1682
-
1683
-	return raw_len;
1684
-}
1685
-
1686
-/**
1687
- * Format URI-encoded string setting value
1688
- *
1689
- * @v type		Setting type
1690
- * @v raw		Raw setting value
1691
- * @v raw_len		Length of raw setting value
1692
- * @v buf		Buffer to contain formatted value
1693
- * @v len		Length of buffer
1694
- * @ret len		Length of formatted value, or negative error
1695
- */
1696
-static int format_uristring_setting ( const struct setting_type *type __unused,
1697
-				      const void *raw, size_t raw_len,
1698
-				      char *buf, size_t len ) {
1699
-	char tmp[ raw_len + 1 /* NUL */ ];
1700
-
1701
-	/* Copy to temporary buffer and terminate */
1702
-	memcpy ( tmp, raw, raw_len );
1703
-	tmp[raw_len] = '\0';
1704
-
1705
-	/* Encode directly into output buffer */
1706
-	return uri_encode ( tmp, buf, len, URI_FRAGMENT );
1707
-}
1708
-
1709
-/** A URI-encoded string setting type */
1710
 const struct setting_type setting_type_uristring __setting_type = {
1666
 const struct setting_type setting_type_uristring __setting_type = {
1711
 	.name = "uristring",
1667
 	.name = "uristring",
1712
-	.parse = parse_uristring_setting,
1713
-	.format = format_uristring_setting,
1668
+	.parse = parse_string_setting,
1669
+	.format = format_string_setting,
1714
 };
1670
 };
1715
 
1671
 
1716
 /**
1672
 /**

+ 0
- 13
src/tests/settings_test.c View File

162
 	.type = &setting_type_string,
162
 	.type = &setting_type_string,
163
 };
163
 };
164
 
164
 
165
-/** Test URI-encoded string setting */
166
-static struct setting test_uristring_setting = {
167
-	.name = "test_uristring",
168
-	.type = &setting_type_uristring,
169
-};
170
-
171
 /** Test IPv4 address setting type */
165
 /** Test IPv4 address setting type */
172
 static struct setting test_ipv4_setting = {
166
 static struct setting test_ipv4_setting = {
173
 	.name = "test_ipv4",
167
 	.name = "test_ipv4",
261
 	fetchf_ok ( &test_settings, &test_string_setting,
255
 	fetchf_ok ( &test_settings, &test_string_setting,
262
 		    RAW ( 'w', 'o', 'r', 'l', 'd' ), "world" );
256
 		    RAW ( 'w', 'o', 'r', 'l', 'd' ), "world" );
263
 
257
 
264
-	/* "uristring" setting type */
265
-	storef_ok ( &test_settings, &test_uristring_setting, "hello%20world",
266
-		    RAW ( 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l',
267
-			  'd' ) );
268
-	fetchf_ok ( &test_settings, &test_uristring_setting,
269
-		    RAW ( 1, 2, 3, 4, 5 ), "%01%02%03%04%05" );
270
-
271
 	/* "ipv4" setting type */
258
 	/* "ipv4" setting type */
272
 	storef_ok ( &test_settings, &test_ipv4_setting, "192.168.0.1",
259
 	storef_ok ( &test_settings, &test_ipv4_setting, "192.168.0.1",
273
 		    RAW ( 192, 168, 0, 1 ) );
260
 		    RAW ( 192, 168, 0, 1 ) );

Loading…
Cancel
Save