xref: /petsc/src/sys/time/fdate.c (revision 8cc058d9cd56c1ccb3be12a47760ddfc446aaffc)
1e5c89e4eSSatish Balay 
2c6db04a5SJed Brown #include <petscsys.h>
3e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
4e5c89e4eSSatish Balay #include <sys/time.h>
5e5c89e4eSSatish Balay #endif
6e5c89e4eSSatish Balay #include <time.h>
7e5c89e4eSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
8*8cc058d9SJed Brown PETSC_EXTERN int gettimeofday(struct timeval*,struct timezone*);
9e5c89e4eSSatish Balay #endif
10e5c89e4eSSatish Balay 
11e5c89e4eSSatish Balay /*
12e5c89e4eSSatish Balay   This function is called once during the initialize stage.
13e5c89e4eSSatish Balay   It stashes the timestamp, and uses it when needed. This is so that
14e5c89e4eSSatish Balay   error handlers may report the date without generating possible
15e5c89e4eSSatish Balay   additional system errors during the call to get the date.
16e5c89e4eSSatish Balay 
17e5c89e4eSSatish Balay */
18e5c89e4eSSatish Balay #undef __FUNCT__
19e5c89e4eSSatish Balay #define __FUNCT__ "PetscGetDate"
20e5c89e4eSSatish Balay /*@C
21e5c89e4eSSatish Balay     PetscGetDate - Gets the current date.
22e5c89e4eSSatish Balay 
23e5c89e4eSSatish Balay    Not collective
24e5c89e4eSSatish Balay 
25e5c89e4eSSatish Balay   Input Parameter:
26e5c89e4eSSatish Balay .  len - length of string to hold date
27e5c89e4eSSatish Balay 
28e5c89e4eSSatish Balay   Output Parameter:
29e5c89e4eSSatish Balay .  date - the date
30e5c89e4eSSatish Balay 
31e5c89e4eSSatish Balay   Level: beginner
32e5c89e4eSSatish Balay 
33e5c89e4eSSatish Balay     This function DOES make a system call and thus SHOULD NOT be called
34e5c89e4eSSatish Balay     from an error handler.
35e5c89e4eSSatish Balay 
36e5c89e4eSSatish Balay @*/
377087cfbeSBarry Smith PetscErrorCode  PetscGetDate(char date[],size_t len)
38e5c89e4eSSatish Balay {
390298fd71SBarry Smith   char           *str=NULL;
40e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
41e5c89e4eSSatish Balay   time_t         aclock;
42e5c89e4eSSatish Balay #else
43e5c89e4eSSatish Balay   struct timeval tp;
44e5c89e4eSSatish Balay #endif
45e5c89e4eSSatish Balay   PetscErrorCode ierr;
46e5c89e4eSSatish Balay 
47e5c89e4eSSatish Balay   PetscFunctionBegin;
48e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
49e5c89e4eSSatish Balay   time(&aclock);
50e5c89e4eSSatish Balay   ierr = PetscStrncpy(date,asctime(localtime(&aclock)),len);CHKERRQ(ierr);
51e5c89e4eSSatish Balay #else
52e5c89e4eSSatish Balay   gettimeofday(&tp,(struct timezone*)0);
53e5c89e4eSSatish Balay   ierr = PetscStrncpy(date,asctime(localtime((time_t*)&tp.tv_sec)),len);CHKERRQ(ierr);
54e5c89e4eSSatish Balay #endif
55e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
56e5c89e4eSSatish Balay   ierr = PetscStrstr(date,"\n",&str);CHKERRQ(ierr);
57e5c89e4eSSatish Balay   if (str) str[0] = 0;
58e5c89e4eSSatish Balay   PetscFunctionReturn(0);
59e5c89e4eSSatish Balay }
60e5c89e4eSSatish Balay 
61