@@ -598,7 +598,7 @@ pub fn getopts(args: &[String], optgrps: &[OptGroup]) -> Result {
598
598
let mut i_arg = None ;
599
599
if cur. as_bytes ( ) [ 1 ] == b'-' {
600
600
let tail = & cur[ 2 ..curlen] ;
601
- let tail_eq: Vec < & str > = tail. split ( '=' ) . collect ( ) ;
601
+ let tail_eq: Vec < & str > = tail. splitn ( 2 , '=' ) . collect ( ) ;
602
602
if tail_eq. len ( ) <= 1 {
603
603
names = vec ! [ Long ( tail. to_owned( ) ) ] ;
604
604
} else {
@@ -1626,4 +1626,18 @@ Options:
1626
1626
debug ! ( "generated: <<{}>>" , generated_usage) ;
1627
1627
assert_eq ! ( generated_usage, expected) ;
1628
1628
}
1629
+
1630
+ #[ test]
1631
+ fn test_args_with_equals ( ) {
1632
+ let args = vec ! ( "--one" . to_string( ) , "A=B" . to_string( ) ,
1633
+ "--two=C=D" . to_string( ) ) ;
1634
+ let opts = vec ! [ optopt( "o" , "one" , "One" , "INFO" ) ,
1635
+ optopt( "t" , "two" , "Two" , "INFO" ) ] ;
1636
+ let matches = & match getopts ( & args, & opts) {
1637
+ result:: Result :: Ok ( m) => m,
1638
+ result:: Result :: Err ( e) => panic ! ( "{}" , e)
1639
+ } ;
1640
+ assert_eq ! ( matches. opts_str( & [ "o" . to_string( ) ] ) . unwrap( ) , "A=B" ) ;
1641
+ assert_eq ! ( matches. opts_str( & [ "t" . to_string( ) ] ) . unwrap( ) , "C=D" ) ;
1642
+ }
1629
1643
}
0 commit comments