Mercurial > hg > truffle
comparison src/share/vm/utilities/ostream.cpp @ 2400:29524004ce17
7022204: LogFile wildcarding should use %p instead of star
Reviewed-by: coleenp, jrose
author | never |
---|---|
date | Fri, 25 Mar 2011 18:50:10 -0700 |
parents | 5841dc1964f0 |
children | 8010c8c623ac |
comparison
equal
deleted
inserted
replaced
2399:b2949bf39900 | 2400:29524004ce17 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
422 buffer_length = strlen(log_name) + 1; | 422 buffer_length = strlen(log_name) + 1; |
423 } | 423 } |
424 | 424 |
425 const char* star = strchr(basename, '*'); | 425 const char* star = strchr(basename, '*'); |
426 int star_pos = (star == NULL) ? -1 : (star - nametail); | 426 int star_pos = (star == NULL) ? -1 : (star - nametail); |
427 int skip = 1; | |
428 if (star == NULL) { | |
429 // Try %p | |
430 star = strstr(basename, "%p"); | |
431 if (star != NULL) { | |
432 skip = 2; | |
433 } | |
434 } | |
435 star_pos = (star == NULL) ? -1 : (star - nametail); | |
427 | 436 |
428 char pid[32]; | 437 char pid[32]; |
429 if (star_pos >= 0) { | 438 if (star_pos >= 0) { |
430 jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id()); | 439 jio_snprintf(pid, sizeof(pid), "%u", os::current_process_id()); |
431 buffer_length += strlen(pid); | 440 buffer_length += strlen(pid); |
440 strcat(buf, os::file_separator()); | 449 strcat(buf, os::file_separator()); |
441 nametail = basename; // completely skip directory prefix | 450 nametail = basename; // completely skip directory prefix |
442 } | 451 } |
443 | 452 |
444 if (star_pos >= 0) { | 453 if (star_pos >= 0) { |
445 // convert foo*bar.log to foo123bar.log | 454 // convert foo*bar.log or foo%pbar.log to foo123bar.log |
446 int buf_pos = (int) strlen(buf); | 455 int buf_pos = (int) strlen(buf); |
447 strncpy(&buf[buf_pos], nametail, star_pos); | 456 strncpy(&buf[buf_pos], nametail, star_pos); |
448 strcpy(&buf[buf_pos + star_pos], pid); | 457 strcpy(&buf[buf_pos + star_pos], pid); |
449 nametail += star_pos + 1; // skip prefix and star | 458 nametail += star_pos + skip; // skip prefix and pid format |
450 } | 459 } |
451 | 460 |
452 strcat(buf, nametail); // append rest of name, or all of name | 461 strcat(buf, nametail); // append rest of name, or all of name |
453 return buf; | 462 return buf; |
454 } | 463 } |
464 jio_snprintf(warnbuf, sizeof(warnbuf), | 473 jio_snprintf(warnbuf, sizeof(warnbuf), |
465 "Warning: Cannot open log file: %s\n", try_name); | 474 "Warning: Cannot open log file: %s\n", try_name); |
466 // Note: This feature is for maintainer use only. No need for L10N. | 475 // Note: This feature is for maintainer use only. No need for L10N. |
467 jio_print(warnbuf); | 476 jio_print(warnbuf); |
468 FREE_C_HEAP_ARRAY(char, try_name); | 477 FREE_C_HEAP_ARRAY(char, try_name); |
469 try_name = make_log_name("hs_pid*.log", os::get_temp_directory()); | 478 try_name = make_log_name("hs_pid%p.log", os::get_temp_directory()); |
470 jio_snprintf(warnbuf, sizeof(warnbuf), | 479 jio_snprintf(warnbuf, sizeof(warnbuf), |
471 "Warning: Forcing option -XX:LogFile=%s\n", try_name); | 480 "Warning: Forcing option -XX:LogFile=%s\n", try_name); |
472 jio_print(warnbuf); | 481 jio_print(warnbuf); |
473 delete file; | 482 delete file; |
474 file = new(ResourceObj::C_HEAP) fileStream(try_name); | 483 file = new(ResourceObj::C_HEAP) fileStream(try_name); |