- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - OpenVMS
- >
- Re: Bug in strptime() function
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Forums
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-14-2009 10:30 AM
тАО08-14-2009 10:30 AM
Bug in strptime() function
Thanks,
-Boris
t.c
---
#include
#include
int main() {
struct tm tms;
if ( !strptime("20080125", "%Y%m%d", &tms) )
puts("OOPS!");
}
$ cc/ver
HP C V7.3-018 on OpenVMS IA64 V8.3
$ pipe cc t.c ; link t.obj ; run t.exe
OOPS!
$
$ uname -a
Linux ... x86_64 GNU/Linux
$ cc t.c && ./a.out
$
- Tags:
- strptime
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-14-2009 09:06 PM
тАО08-14-2009 09:06 PM
Re: Bug in strptime() function
The input string and the format string both need spaces after year, month and date values. Find below the modified program that works.
#include
#include
int main() {
struct tm tms;
if ( !strptime("2008 01 25", "%Y %m %d", &tms) )
puts("OOPS!");
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-15-2009 01:46 AM
тАО08-15-2009 01:46 AM
Re: Bug in strptime() function
sorry, but this just confirms the CRTL implementation on VMS is flawed:
nothing in the description requires white-space between the conversion items.
On linux (and other systems ?) it simply works.
If the Xopen/Posix standards tell it different, please cite; otherwise CRTL should be corrected, such a form of date is really not unusual, e.g. in tables sorted by date/time.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-15-2009 08:25 AM
тАО08-15-2009 08:25 AM
Re: Bug in strptime() function
Here's gcc 4.0.1.
$ cc x.c
f$ ./a.out
20080125
200801
200825
$ cat x.c
#include
#include
#include
int main() {
struct tm tms;
if ( !strptime("20080125", "%Y%m%d", &tms) )
puts("20080125");
if ( !strptime("200801", "%Y%m", &tms) )
puts("200801");
if ( !strptime("200825", "%Y%d", &tms) )
puts("200825");
if ( !strptime("2008", "%Y", &tms) )
puts("2008");
if ( !strptime("20080", "%Y", &tms) )
puts("20080");
if ( !strptime("0125", "%m%d", &tms) )
puts("0125");
exit( EXIT_SUCCESS );
}
Here is gcc 4.2.1...
$ cc x.c
$ ./a.out
$
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-15-2009 11:59 AM
тАО08-15-2009 11:59 AM
Re: Bug in strptime() function
http://www.opengroup.org/onlinepubs/7990989775/xsh/strptime.html
clearly states, regarding the format string, "There must be white-space or other non-alphanumeric characters between any two conversion specifications." Other C libraries clearly do not comply with this requirement.
However, there is no reason that the string being scanned should also need whitespace between fields. The CRTL does not comply with that aspect of the standard.
There is unfortunately no good alternative to writing code that works everywhere regardless of what the standard says, testing that it does so, and being prepared to rewrite the code when the standard and/or the implementations catch up with each other.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-16-2009 01:07 AM
тАО08-16-2009 01:07 AM
Re: Bug in strptime() function
The CRTL HELP then correctly represents the standard.
IMHO the standard should more clearly tell that conversion items must be separated by either a white-space or other characters, one of the two must be present; so it is clear that %Y%m%d is not a legal format.
The present wording rather suggests delimiters between conversion items are optional.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-16-2009 06:26 AM
тАО08-16-2009 06:26 AM
Re: Bug in strptime() function
That's never a fun tradeoff; you're wrong either way you go.
The ftp server has fallen into a similar hole. TCP/IP Services is technically correct, and operationally incompatible.
I'd hope for a gcc or clang compilation mode for newer OpenVMS compilers (to better work with gnv and such), but then I've encountered piles of (inherently buggy) VAX C code recently; old stuff.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-16-2009 12:26 PM
тАО08-16-2009 12:26 PM
Re: Bug in strptime() function
Huh? If it exists in the format, it must be there in the string.
I suppose one way to allow no delimiters is to fully specify (or assume) the widths.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-16-2009 10:44 PM
тАО08-16-2009 10:44 PM
Re: Bug in strptime() function
One might think so, but apparently neither VMS nor GNU has implemented it this way.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО08-16-2009 11:03 PM
тАО08-16-2009 11:03 PM
Re: Bug in strptime() function
strptime("20080125", "%4Y%2m%2d", &tms)
gives error in both VMS and GNU systems.