Hi Dmitry, let me comment on your suggestions: 663 it might be better to use str*r*chr -> a TZ variable could look like TZ="MET-1METDST,M3.5.0/02:00:00,M10.5.0/03:00:00". So there could be multiple instances of the character ',' and I'm only interested in the first part of TZ, e.g. in "MET-1METDST" in this example case. So why should I want to use strrchr?
666 memcpy(tz_buf, tz, tz_len+1); 667 is not necessary -> well, in the case of a TZ variable like above, tz_len would be 11. If I now copy 12 characters, I don't copy a trailing 0 but the ',' character that strchr found. So I have to memcpy exactly tz_len characters and set the trailing 0 myself. As for the P4 CR - I can do it, when I'm editor eventually :-) Can I consider this change as reviewed then? Thanks Christoph -----Original Message----- From: Dmitry Samersoff [mailto:dmitry.samers...@oracle.com] Sent: Mittwoch, 9. September 2015 09:12 To: Langer, Christoph <christoph.lan...@sap.com> Cc: jdk9-...@openjdk.java.net; i18n-dev@openjdk.java.net; Roger Riggs <roger.ri...@oracle.com> Subject: Re: Fix for small leak in TimeZone_md.c Christoph, Looks good for me. 663 it might be better to use str*r*chr 666 memcpy(tz_buf, tz, tz_len+1); 667 is not necessary > - The part following line 323 for Solaris32 can probably be removed > but I don't want to be the guy that does this OK. Could you file a P4 CR to get it removed? -Dmitry On 2015-09-08 17:06, Langer, Christoph wrote: > Hi Dmitry, > > thanks for your review. > > - I followed your suggestions to replace #ifdef with #if defined() at all > places > - I changed the usage of readdir_r to readdir64_r, as it is done in > UnixFileSystem_md.c as well. So we can remove the define from line 129 in the > original TimeZone_md.c > - The part following line 323 for Solaris32 can probably be removed but I > don't want to be the guy that does this > - 664 and 666 - I changed the construct a bit and I'm using strchr and memcpy > now :-) > - 678: changed to use strcpy as suggested > > Here is the new webrev: > http://cr.openjdk.java.net/~simonis/webrevs/2015/8134505.v1/ > > Best regards, > Christoph > > -----Original Message----- > From: Dmitry Samersoff [mailto:dmitry.samers...@oracle.com] > Sent: Samstag, 5. September 2015 19:47 > To: Langer, Christoph <christoph.lan...@sap.com>; Roger Riggs > <roger.ri...@oracle.com> > Cc: jdk9-...@openjdk.java.net; i18n-dev@openjdk.java.net > Subject: Re: Fix for small leak in TimeZone_md.c > > Lander, > > Changes looks good, few nits below. Please fill free to ignore comments > that is out of scope of your work. > > > 53 I would prefer don't mix #if defined and #ifdef styles. > Could you please use #if defined(_AIX) > > #if defined(_AIX) need not to be inside #else block, please move > it below #endif > > > 128 Do you know the platform that fall to #else here? > I guess we can remove this define. > > 323 JDK 9 doesn't support Solaris 32bit so this code could be removed. > > 664 It's better to use memcpy here and copy string with terminating \0 > in one line, as you already know the length. > > 666: It might be easier to use strrchr here (not really important). > > 678: It's better to use plain strcpy (or ever sprintf) here because you > checked length above. > > 779: Could you change #ifdef __linux__ to #if defined(__linux__) to keep > one style. > > -Dmitry > > > On 2015-09-03 16:39, Langer, Christoph wrote: >> Here is the updated webrev: >> http://cr.openjdk.java.net/~simonis/webrevs/2015/8134505/ >> >> -----Original Message----- >> From: Langer, Christoph >> Sent: Donnerstag, 3. September 2015 12:25 >> To: 'Roger Riggs' <roger.ri...@oracle.com>; jdk9-...@openjdk.java.net >> Cc: 'i18n-dev@openjdk.java.net' <i18n-dev@openjdk.java.net> >> Subject: RE: Fix for small leak in TimeZone_md.c >> >> Hi Roger, >> >> thanks for your comments. >> >> I agree with you and I will remove the platform specifics around line 770. >> >> As for the suggestions about line 804 and beyond, it would perhaps be nicer >> to have mutually exclusive sections. However, then I would have to add the >> common, "not _AIX and not __solaris__", code also to the "__solaris__" part >> for the case that tz does not equal "localtime", because then the common >> handling would apply as well. So, to avoid code duplication I'd prefer to >> leave it as it is. >> >> Best regards >> Christoph >> >> >> -----Original Message----- >> From: jdk9-dev [mailto:jdk9-dev-boun...@openjdk.java.net] On Behalf Of Roger >> Riggs >> Sent: Dienstag, 1. September 2015 23:46 >> To: jdk9-...@openjdk.java.net >> Subject: Re: Fix for small leak in TimeZone_md.c >> >> Hi, >> >> Some comments: >> >> - Line 770: the platform specific conditional compilation can be >> removed, if *tz is zero, its not a real tz anyway. >> >> - Line 804: " } else" having the "else" inside the conditional >> compilation makes the code more fragile. >> Perhaps just return javatz and not have to figure out whether those >> other conditions apply. >> >> - It might be clearer if the AIX, Solaris, and linux tail of the code >> was mutually exclusive. >> >> i.e. >> >> #if defined(_AIX) >> /* On AIX do the platform to Java mapping. */ >> javatz = mapPlatformToJavaTimezone(java_home_dir, tz); >> if (freetz != NULL) { >> free((void *) freetz); >> } >> #elif defined(__solaris__) >> /* Solaris might use localtime, so handle it here. */ >> if (strcmp(tz, "localtime") == 0) { >> javatz = getSolarisDefaultZoneID(); >> if (freetz != NULL) { >> free((void *) freetz); >> } >> } >> #else /* otherwise, not _AIX and not __solaris__ */ >> if (freetz == NULL) { >> /* strdup if we are still working on getenv result. */ >> javatz = strdup(tz); >> } else if (freetz != tz) { >> /* strdup and free the old buffer, if we moved the pointer. */ >> javatz = strdup(tz); >> free((void *) freetz); >> } else { >> /* we are good if we already work on a freshly allocated >> buffer. */ >> javatz = tz; >> } >> #endif >> >> $.02, Roger >> >> On 8/26/2015 5:34 PM, Langer, Christoph wrote: >>> Hi Andrew, >>> >>> today I have posted the following RFR in i18n-dev: >>> >>> when working on TimeZone_md.c lately, I found it worthwhile to do some >>> cleanup on it. Please review my changes. >>> Bug: https://bugs.openjdk.java.net/browse/JDK-8134505 >>> Webrev: >>> http://cr.openjdk.java.net/~goetz/webrevs/8134505-timeZone/webrev.01/ >>> >>> I basically did the following things: >>> - clean up some typos and comment errors >>> - added #include "TimeZone_md.h" >>> - split up the platform specific define sections into an #ifdef <platform1> >>> #elif <platform2> #elif … #endif construct >>> - moved some AIX coding from the #ifdef block at the bottom of the file >>> into the first AIX specific block >>> - AIX function “mapPlatformToJavaTimezone”: use a dynamic malloced buffer >>> instead of a fixed length buffer >>> - refactor function “findJavaTZ_md” to make it more straightforward and to >>> avoid unnecessary mallocs and don’t forget necessary frees >>> >>> I’m also wondering if the “if (tz == NULL || *tz == '\0') {“ of line 770 >>> could be used for all platforms instead of Solaris and AIX only. The other >>> platforms will only do a check if TZ is NULL but not if it is an empty >>> string. >>> >>> I did not follow the suggestion to split up "findJavaTZ_md" in platform >>> versions, though. >>> >>> I'd be grateful for your feedback. >>> >>> Thanks >>> Christoph >> > > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.