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