xref: /petsc/src/sys/time/fdate.c (revision 811af0c4b09a35de4306c442f88bd09fdc09897d)
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)
88cc058d9SJed Brown PETSC_EXTERN int gettimeofday(struct timeval *, struct timezone *);
9e5c89e4eSSatish Balay #endif
10e5c89e4eSSatish Balay 
11e5c89e4eSSatish Balay /*@C
12e5c89e4eSSatish Balay     PetscGetDate - Gets the current date.
13e5c89e4eSSatish Balay 
14e5c89e4eSSatish Balay    Not collective
15e5c89e4eSSatish Balay 
16e5c89e4eSSatish Balay   Input Parameter:
17e5c89e4eSSatish Balay .  len - length of string to hold date
18e5c89e4eSSatish Balay 
19e5c89e4eSSatish Balay   Output Parameter:
20e5c89e4eSSatish Balay .  date - the date
21e5c89e4eSSatish Balay 
22e5c89e4eSSatish Balay   Level: beginner
23e5c89e4eSSatish Balay 
24*811af0c4SBarry Smith   Note:
25*811af0c4SBarry Smith   This function makes a system call and thus SHOULD NOT be called from an error handler.
26*811af0c4SBarry Smith 
27*811af0c4SBarry Smith   Developer Note:
28*811af0c4SBarry Smith   This function is called once during `PetscInitialize()`.
29*811af0c4SBarry Smith   It stashes the timestamp, and uses it when needed. This is so that
30*811af0c4SBarry Smith   error handlers may report the date without generating possible
31*811af0c4SBarry Smith   additional system errors during the call to get the date.
32e5c89e4eSSatish Balay 
33e5c89e4eSSatish Balay @*/
349371c9d4SSatish Balay PetscErrorCode PetscGetDate(char date[], size_t len) {
350298fd71SBarry Smith   char *str = NULL;
36e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
37e5c89e4eSSatish Balay   time_t aclock;
38e5c89e4eSSatish Balay #else
39e5c89e4eSSatish Balay   struct timeval tp;
40e5c89e4eSSatish Balay #endif
41e5c89e4eSSatish Balay 
42e5c89e4eSSatish Balay   PetscFunctionBegin;
43e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
44e5c89e4eSSatish Balay   time(&aclock);
459566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len));
46e5c89e4eSSatish Balay #else
47e5c89e4eSSatish Balay   gettimeofday(&tp, (struct timezone *)0);
489566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len));
49e5c89e4eSSatish Balay #endif
50e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
519566063dSJacob Faibussowitsch   PetscCall(PetscStrstr(date, "\n", &str));
52e5c89e4eSSatish Balay   if (str) str[0] = 0;
53e5c89e4eSSatish Balay   PetscFunctionReturn(0);
54e5c89e4eSSatish Balay }
55