771 if (args == NULL || count == 0) { 772 return NULL; 773 } 774 size_t length = strlen(args[0]) + 1; // add 1 for the null terminator 775 for (int i = 1; i < count; i++) { 776 length += strlen(args[i]) + 1; // add 1 for a space 777 } 778 char* s = NEW_RESOURCE_ARRAY(char, length); 779 strcpy(s, args[0]); 780 for (int j = 1; j < count; j++) { 781 strcat(s, " "); 782 strcat(s, args[j]); 783 } 784 return (const char*) s; 785 } 786 787 void Arguments::print_on(outputStream* st) { 788 st->print_cr("VM Arguments:"); 789 if (num_jvm_flags() > 0) { 790 st->print("jvm_flags: "); print_jvm_flags_on(st); 791 } 792 if (num_jvm_args() > 0) { 793 st->print("jvm_args: "); print_jvm_args_on(st); 794 } 795 st->print_cr("java_command: %s", java_command() ? java_command() : "<unknown>"); 796 if (_java_class_path != NULL) { 797 char* path = _java_class_path->value(); 798 st->print_cr("java_class_path (initial): %s", strlen(path) == 0 ? "<not set>" : path ); 799 } 800 st->print_cr("Launcher Type: %s", _sun_java_launcher); 801 } 802 803 void Arguments::print_jvm_flags_on(outputStream* st) { 804 if (_num_jvm_flags > 0) { 805 for (int i=0; i < _num_jvm_flags; i++) { 806 st->print("%s ", _jvm_flags_array[i]); 807 } 808 st->cr(); 809 } 810 } 811 812 void Arguments::print_jvm_args_on(outputStream* st) { 813 if (_num_jvm_args > 0) { 814 for (int i=0; i < _num_jvm_args; i++) { 815 st->print("%s ", _jvm_args_array[i]); 816 } 817 st->cr(); 818 } 819 } 820 821 bool Arguments::process_argument(const char* arg, 822 jboolean ignore_unrecognized, Flag::Flags origin) { 823 824 JDK_Version since = JDK_Version(); 825 826 if (parse_argument(arg, origin) || ignore_unrecognized) { 827 return true; 828 } 829 830 // Determine if the flag has '+', '-', or '=' characters. 831 bool has_plus_minus = (*arg == '+' || *arg == '-'); 832 const char* const argname = has_plus_minus ? arg + 1 : arg; 833 834 size_t arg_len; 835 const char* equal_sign = strchr(argname, '='); 836 if (equal_sign == NULL) { 837 arg_len = strlen(argname); | 771 if (args == NULL || count == 0) { 772 return NULL; 773 } 774 size_t length = strlen(args[0]) + 1; // add 1 for the null terminator 775 for (int i = 1; i < count; i++) { 776 length += strlen(args[i]) + 1; // add 1 for a space 777 } 778 char* s = NEW_RESOURCE_ARRAY(char, length); 779 strcpy(s, args[0]); 780 for (int j = 1; j < count; j++) { 781 strcat(s, " "); 782 strcat(s, args[j]); 783 } 784 return (const char*) s; 785 } 786 787 void Arguments::print_on(outputStream* st) { 788 st->print_cr("VM Arguments:"); 789 if (num_jvm_flags() > 0) { 790 st->print("jvm_flags: "); print_jvm_flags_on(st); 791 st->cr(); 792 } 793 if (num_jvm_args() > 0) { 794 st->print("jvm_args: "); print_jvm_args_on(st); 795 st->cr(); 796 } 797 st->print_cr("java_command: %s", java_command() ? java_command() : "<unknown>"); 798 if (_java_class_path != NULL) { 799 char* path = _java_class_path->value(); 800 st->print_cr("java_class_path (initial): %s", strlen(path) == 0 ? "<not set>" : path ); 801 } 802 st->print_cr("Launcher Type: %s", _sun_java_launcher); 803 } 804 805 void Arguments::print_summary_on(outputStream* st) { 806 // Print the command line. Environment variables that are helpful for 807 // reproducing the problem are written later in the hs_err file. 808 // flags are from setting file 809 if (num_jvm_flags() > 0) { 810 st->print_raw("Settings File: "); 811 print_jvm_flags_on(st); 812 st->cr(); 813 } 814 // args are the command line and environment variable arguments. 815 st->print_raw("Command Line: "); 816 if (num_jvm_args() > 0) { 817 print_jvm_args_on(st); 818 } 819 // this is the classfile and any arguments to the java program 820 if (java_command() != NULL) { 821 st->print("%s", java_command()); 822 } 823 st->cr(); 824 } 825 826 void Arguments::print_jvm_flags_on(outputStream* st) { 827 if (_num_jvm_flags > 0) { 828 for (int i=0; i < _num_jvm_flags; i++) { 829 st->print("%s ", _jvm_flags_array[i]); 830 } 831 } 832 } 833 834 void Arguments::print_jvm_args_on(outputStream* st) { 835 if (_num_jvm_args > 0) { 836 for (int i=0; i < _num_jvm_args; i++) { 837 st->print("%s ", _jvm_args_array[i]); 838 } 839 } 840 } 841 842 bool Arguments::process_argument(const char* arg, 843 jboolean ignore_unrecognized, Flag::Flags origin) { 844 845 JDK_Version since = JDK_Version(); 846 847 if (parse_argument(arg, origin) || ignore_unrecognized) { 848 return true; 849 } 850 851 // Determine if the flag has '+', '-', or '=' characters. 852 bool has_plus_minus = (*arg == '+' || *arg == '-'); 853 const char* const argname = has_plus_minus ? arg + 1 : arg; 854 855 size_t arg_len; 856 const char* equal_sign = strchr(argname, '='); 857 if (equal_sign == NULL) { 858 arg_len = strlen(argname); |