392 // Return true if "v" is less than "other", where "other" may be "undefined". 393 static bool version_less_than(JDK_Version v, JDK_Version other) { 394 assert(!v.is_undefined(), "must be defined"); 395 if (!other.is_undefined() && v.compare(other) >= 0) { 396 return false; 397 } else { 398 return true; 399 } 400 } 401 402 static bool lookup_special_flag(const char *flag_name, SpecialFlag& flag) { 403 for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { 404 if ((strcmp(special_jvm_flags[i].name, flag_name) == 0)) { 405 flag = special_jvm_flags[i]; 406 return true; 407 } 408 } 409 return false; 410 } 411 412 // Returns 1 if the flag is special and jdk version is in the range specified. 413 // In this case the 'version' buffer is filled in with the version number when 414 // the flag became special. 415 // Returns -1 if the flag is the wrong kind of special - expired or (check_deprecated & obsolete). 416 // Returns 0 if the flag is not special. 417 // "flag_name" is a flag name stripped of '+', '-', and '='. 418 static int is_special_flag(bool check_deprecated, const char *flag_name, JDK_Version* version) { 419 assert(version != NULL, "Must provide a version buffer"); 420 SpecialFlag flag; 421 if (lookup_special_flag(flag_name, flag)) { 422 if (check_deprecated && !flag.deprecated_in.is_undefined()) { 423 if (version_less_than(JDK_Version::current(), flag.obsolete_in) && 424 version_less_than(JDK_Version::current(), flag.expired_in)) { 425 *version = flag.deprecated_in; 426 return 1; 427 } else { 428 return -1; 429 } 430 } else if (!check_deprecated && !flag.obsolete_in.is_undefined()) { 431 if (version_less_than(JDK_Version::current(), flag.expired_in)) { 432 *version = flag.obsolete_in; 433 return 1; 434 } else { 435 return -1; 436 } 437 } 438 } 439 return 0; 440 } 441 442 bool Arguments::is_obsolete_flag(const char *flag_name, JDK_Version* version) { 443 return (is_special_flag(false, flag_name, version) == 1); 444 } 445 446 int Arguments::is_deprecated_flag(const char *flag_name, JDK_Version* version) { 447 return is_special_flag(true, flag_name, version); 448 } 449 450 const char* Arguments::real_flag_name(const char *flag_name) { 451 for (size_t i = 0; aliased_jvm_flags[i].alias_name != NULL; i++) { 452 const AliasedFlag& flag_status = aliased_jvm_flags[i]; 453 if (strcmp(flag_status.alias_name, flag_name) == 0) { 454 return flag_status.real_name; 455 } 456 } 457 return flag_name; 458 } 459 460 #ifndef PRODUCT 461 static bool lookup_special_flag(const char *flag_name, size_t skip_index) { 462 for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { 463 if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) { 464 return true; 465 } 466 } 467 return false; | 392 // Return true if "v" is less than "other", where "other" may be "undefined". 393 static bool version_less_than(JDK_Version v, JDK_Version other) { 394 assert(!v.is_undefined(), "must be defined"); 395 if (!other.is_undefined() && v.compare(other) >= 0) { 396 return false; 397 } else { 398 return true; 399 } 400 } 401 402 static bool lookup_special_flag(const char *flag_name, SpecialFlag& flag) { 403 for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { 404 if ((strcmp(special_jvm_flags[i].name, flag_name) == 0)) { 405 flag = special_jvm_flags[i]; 406 return true; 407 } 408 } 409 return false; 410 } 411 412 bool Arguments::is_obsolete_flag(const char *flag_name, JDK_Version* version) { 413 assert(version != NULL, "Must provide a version buffer"); 414 SpecialFlag flag; 415 if (lookup_special_flag(flag_name, flag)) { 416 if (!flag.obsolete_in.is_undefined()) { 417 if (version_less_than(JDK_Version::current(), flag.expired_in)) { 418 *version = flag.obsolete_in; 419 return true; 420 } 421 } 422 } 423 return false; 424 } 425 426 int Arguments::is_deprecated_flag(const char *flag_name, JDK_Version* version) { 427 assert(version != NULL, "Must provide a version buffer"); 428 SpecialFlag flag; 429 if (lookup_special_flag(flag_name, flag)) { 430 if (!flag.deprecated_in.is_undefined()) { 431 if (version_less_than(JDK_Version::current(), flag.obsolete_in) && 432 version_less_than(JDK_Version::current(), flag.expired_in)) { 433 *version = flag.deprecated_in; 434 return 1; 435 } else { 436 return -1; 437 } 438 } 439 } 440 return 0; 441 } 442 443 const char* Arguments::real_flag_name(const char *flag_name) { 444 for (size_t i = 0; aliased_jvm_flags[i].alias_name != NULL; i++) { 445 const AliasedFlag& flag_status = aliased_jvm_flags[i]; 446 if (strcmp(flag_status.alias_name, flag_name) == 0) { 447 return flag_status.real_name; 448 } 449 } 450 return flag_name; 451 } 452 453 #ifndef PRODUCT 454 static bool lookup_special_flag(const char *flag_name, size_t skip_index) { 455 for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { 456 if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) { 457 return true; 458 } 459 } 460 return false; |