103
103
#define VM_LIBRARY_PATH_ARG_OFFSET (sizeof (VM_LIBRARY_PATH_ARG_PREFIX)-1 )
104
104
#define VM_STACK_SIZE_ARG_OFFSET (sizeof (VM_STACK_SIZE_ARG_PREFIX)-1 )
105
105
106
- #define IS_VM_ARG (ARG ) (ARG.rfind(VM_ARG_PREFIX, 0 ) != std::string::npos)
107
- #define IS_VM_CP_ARG (ARG ) (ARG.rfind(VM_CP_ARG_PREFIX, 0 ) != std::string::npos)
108
- #define IS_VM_CLASSPATH_ARG (ARG ) (ARG.rfind(VM_CLASSPATH_ARG_PREFIX, 0 ) != std::string::npos)
109
- #define IS_VM_P_ARG (ARG ) (ARG.rfind(VM_P_ARG_PREFIX, 0 ) != std::string::npos)
110
- #define IS_VM_MODULE_PATH_ARG (ARG ) (ARG.rfind(VM_MODULE_PATH_ARG_PREFIX, 0 ) != std::string::npos)
111
- #define IS_VM_LIBRARY_PATH_ARG (ARG ) (ARG.rfind(VM_LIBRARY_PATH_ARG_PREFIX, 0 ) != std::string::npos)
112
- #define IS_VM_STACK_SIZE_ARG (ARG ) (ARG.rfind(VM_STACK_SIZE_ARG_PREFIX, 0 ) != std::string::npos)
106
+ #define STARTS_WITH (ARG, PREFIX ) (ARG.rfind(PREFIX, 0 ) != std::string::npos)
107
+ #define IS_VM_ARG (ARG ) STARTS_WITH(ARG, VM_ARG_PREFIX)
108
+ #define IS_VM_CP_ARG (ARG ) STARTS_WITH(ARG, VM_CP_ARG_PREFIX)
109
+ #define IS_VM_CLASSPATH_ARG (ARG ) STARTS_WITH(ARG, VM_CLASSPATH_ARG_PREFIX)
110
+ #define IS_VM_P_ARG (ARG ) STARTS_WITH(ARG, VM_P_ARG_PREFIX)
111
+ #define IS_VM_MODULE_PATH_ARG (ARG ) STARTS_WITH(ARG, VM_MODULE_PATH_ARG_PREFIX)
112
+ #define IS_VM_LIBRARY_PATH_ARG (ARG ) STARTS_WITH(ARG, VM_LIBRARY_PATH_ARG_PREFIX)
113
+ #define IS_VM_STACK_SIZE_ARG (ARG ) STARTS_WITH(ARG, VM_STACK_SIZE_ARG_PREFIX)
113
114
114
115
#define NMT_ARG_NAME " XX:NativeMemoryTracking"
115
116
#define NMT_ENV_NAME " NMT_LEVEL_"
@@ -343,15 +344,15 @@ static std::string vm_path(std::string exeDir, bool jvmMode) {
343
344
return liblangPath.str ();
344
345
}
345
346
346
- static size_t parse_size (const char * str);
347
+ static size_t parse_size (std::string_view str);
347
348
348
349
static void parse_vm_option (
349
350
std::vector<std::string> *vmArgs,
350
351
std::stringstream *cp,
351
352
std::stringstream *modulePath,
352
353
std::stringstream *libraryPath,
353
354
size_t * stack_size,
354
- std::string option) {
355
+ std::string_view option) {
355
356
if (IS_VM_CP_ARG (option)) {
356
357
*cp << CP_SEP_STR << option.substr (VM_CP_ARG_OFFSET);
357
358
} else if (IS_VM_CLASSPATH_ARG (option)) {
@@ -364,7 +365,7 @@ static void parse_vm_option(
364
365
*libraryPath << CP_SEP_STR << option.substr (VM_LIBRARY_PATH_ARG_OFFSET);
365
366
} else if (IS_VM_ARG (option)) {
366
367
if (IS_VM_STACK_SIZE_ARG (option)) {
367
- *stack_size = parse_size (option.substr (VM_STACK_SIZE_ARG_OFFSET). c_str () );
368
+ *stack_size = parse_size (option.substr (VM_STACK_SIZE_ARG_OFFSET));
368
369
}
369
370
std::stringstream opt;
370
371
opt << ' -' << option.substr (VM_ARG_OFFSET);
@@ -550,7 +551,7 @@ static void parse_vm_options(struct MainThreadArgs& parsedArgs) {
550
551
if (!relaunch) {
551
552
/* handle CLI arguments */
552
553
for (int i = 1 ; i < argc; i++) {
553
- parse_vm_option (&vmArgs, &cp, &modulePath, &libraryPath, &stack_size, std::string ( argv[i]) );
554
+ parse_vm_option (&vmArgs, &cp, &modulePath, &libraryPath, &stack_size, argv[i]);
554
555
}
555
556
556
557
/* handle optional vm args from LanguageLibraryConfig.option_vars */
@@ -595,7 +596,7 @@ static void parse_vm_options(struct MainThreadArgs& parsedArgs) {
595
596
std::cerr << " VM arguments specified: " << vmArgCount << " but argument " << i << " missing" << std::endl;
596
597
break ;
597
598
}
598
- parse_vm_option (&vmArgs, &cp, &modulePath, &libraryPath, &stack_size, std::string ( cur) );
599
+ parse_vm_option (&vmArgs, &cp, &modulePath, &libraryPath, &stack_size, cur);
599
600
/* clean up env variable */
600
601
setenv (envKey, " " );
601
602
}
@@ -1039,20 +1040,20 @@ static int jvm_main_thread(struct MainThreadArgs& parsedArgs) {
1039
1040
* Returns the parsed size in bytes or 0 if invalid.
1040
1041
* Inspired by: https://github.com/openjdk/jdk/blob/8c1b915c7ef2b3a6e65705b91f4eb464caaec4e7/src/java.base/share/native/libjli/java.c#L920-L954
1041
1042
*/
1042
- static size_t parse_size (const char * str) {
1043
- const char * s = str;
1043
+ static size_t parse_size (std::string_view str) {
1044
1044
size_t n = 0 ;
1045
- while (*s >= ' 0' && *s <= ' 9' ) {
1046
- int digit = *s - ' 0' ;
1045
+ size_t pos = 0 ;
1046
+ while (pos < str.size () && str[pos] >= ' 0' && str[pos] <= ' 9' ) {
1047
+ int digit = str[pos] - ' 0' ;
1047
1048
n = n * 10 + digit;
1048
- s ++;
1049
+ pos ++;
1049
1050
}
1050
- if (s == str || strlen (s) > 1 ) {
1051
+ if (pos == 0 || str. size () - pos != 1 ) {
1051
1052
// invalid
1052
1053
return 0 ;
1053
1054
}
1054
1055
size_t multiplier = 1 ;
1055
- switch (*s ) {
1056
+ switch (str[pos] ) {
1056
1057
case ' T' :
1057
1058
case ' t' :
1058
1059
multiplier *= 1024 ;
0 commit comments