File tree 1 file changed +33
-1
lines changed 1 file changed +33
-1
lines changed Original file line number Diff line number Diff line change @@ -738,7 +738,7 @@ pub fn set_exit_status(code: int) {
738
738
* Returns a list of the command line arguments.
739
739
*/
740
740
#[ cfg( target_os = "macos" ) ]
741
- pub fn args ( ) -> ~[ ~str ] {
741
+ fn real_args ( ) -> ~[ ~str ] {
742
742
unsafe {
743
743
let ( argc, argv) = ( * _NSGetArgc ( ) as uint , * _NSGetArgv ( ) ) ;
744
744
let mut args = ~[ ] ;
@@ -749,6 +749,38 @@ pub fn args() -> ~[~str] {
749
749
}
750
750
}
751
751
752
+ #[ cfg( target_os = "linux" ) ]
753
+ fn real_args ( ) -> ~[ ~str ] {
754
+ fail // TODO
755
+ }
756
+
757
+ #[ cfg( windows) ]
758
+ fn real_args ( ) -> ~[ ~str ] {
759
+ fail // TODO
760
+ }
761
+
762
+ struct OverriddenArgs {
763
+ val : ~[ ~str ]
764
+ }
765
+
766
+ fn overridden_arg_key ( +v : @OverriddenArgs ) { }
767
+
768
+ pub fn args ( ) -> ~[ ~str ] {
769
+ unsafe {
770
+ match task:: local_data:: local_data_get ( overridden_arg_key) {
771
+ None => real_args ( ) ,
772
+ Some ( args) => copy args. val
773
+ }
774
+ }
775
+ }
776
+
777
+ pub fn set_args ( +new_args : ~[ ~str ] ) {
778
+ unsafe {
779
+ let overridden_args = @OverriddenArgs { val : copy new_args } ;
780
+ task:: local_data:: local_data_set ( overridden_arg_key, overridden_args) ;
781
+ }
782
+ }
783
+
752
784
#[ cfg( target_os = "macos" ) ]
753
785
extern {
754
786
// These functions are in crt_externs.h.
You can’t perform that action at this time.
0 commit comments