diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2014-08-27 17:14:13 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2014-08-27 17:14:13 +0200 |
commit | 727dd67821e4581e4b61b30b79ca47c5bffc8497 (patch) | |
tree | d5be61f067a42b2633ef148f416f138e7c2f7da2 /package/sash/src/date.c | |
parent | 683cf71a6ebccbd4f827ad4a6ac92dbbaf8f644d (diff) | |
parent | 008d0e157538e4a4c302dc79e6c28c9da615b527 (diff) |
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'package/sash/src/date.c')
-rw-r--r-- | package/sash/src/date.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/package/sash/src/date.c b/package/sash/src/date.c new file mode 100644 index 000000000..c7317998b --- /dev/null +++ b/package/sash/src/date.c @@ -0,0 +1,54 @@ +/* date.c bradkemp@indusriver.com */ + +#include <time.h> +#include <stdio.h> + +static const char invalid_date[] = "Invalid date %s\n"; +int do_date(int argc, char * argv[]) +{ + + time_t tm; + struct tm tm_time; + time(&tm); + memcpy(&tm_time, localtime(&tm), sizeof(tm_time)); + + if (argc > 1) { + int nr; + + nr = sscanf(argv[1], "%2d%2d%2d%2d%d", + &(tm_time.tm_mon), + &(tm_time.tm_mday), + &(tm_time.tm_hour), + &(tm_time.tm_min), &(tm_time.tm_year)); + + if (nr < 4 || nr > 5) { + fprintf(stderr, invalid_date, argv[1]); + return(0); + } + + /* correct for century - minor Y2K problem here? */ + if (tm_time.tm_year >= 1900) + tm_time.tm_year -= 1900; + /* adjust date */ + tm_time.tm_mon -= 1; + + if((tm = mktime(&tm_time)) < 0) { + fprintf(stderr, invalid_date, argv[1]); + return(0); + } + + if(stime(&tm) < 0) { + fprintf(stderr, "Unable to set date\n"); + return(0); + } + + return (0); + + } + printf("%s\n",asctime(&tm_time)); + + return(0); +} + + + |