1c6db04a5SJed Brown #include <petscsys.h> 2e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H) 3e5c89e4eSSatish Balay #include <sys/time.h> 4e5c89e4eSSatish Balay #endif 5e5c89e4eSSatish Balay #include <time.h> 6e5c89e4eSSatish Balay 7e5c89e4eSSatish Balay /*@C 8e5c89e4eSSatish Balay PetscGetDate - Gets the current date. 9e5c89e4eSSatish Balay 1020f4b53cSBarry Smith Not Collective 11e5c89e4eSSatish Balay 12e5c89e4eSSatish Balay Input Parameter: 13e5c89e4eSSatish Balay . len - length of string to hold date 14e5c89e4eSSatish Balay 15e5c89e4eSSatish Balay Output Parameter: 16e5c89e4eSSatish Balay . date - the date 17e5c89e4eSSatish Balay 18e5c89e4eSSatish Balay Level: beginner 19e5c89e4eSSatish Balay 20811af0c4SBarry Smith Note: 21811af0c4SBarry Smith This function makes a system call and thus SHOULD NOT be called from an error handler. 22811af0c4SBarry Smith 23aec76313SJacob Faibussowitsch Developer Notes: 24811af0c4SBarry Smith This function is called once during `PetscInitialize()`. 25811af0c4SBarry Smith It stashes the timestamp, and uses it when needed. This is so that 26811af0c4SBarry Smith error handlers may report the date without generating possible 27811af0c4SBarry Smith additional system errors during the call to get the date. 28e5c89e4eSSatish Balay 2910450e9eSJacob Faibussowitsch .seealso: `PetscGetHostName()` 30e5c89e4eSSatish Balay @*/ 31d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetDate(char date[], size_t len) 32d71ae5a4SJacob Faibussowitsch { 330298fd71SBarry Smith char *str = NULL; 34e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME) 35e5c89e4eSSatish Balay time_t aclock; 36e5c89e4eSSatish Balay #else 37e5c89e4eSSatish Balay struct timeval tp; 38e5c89e4eSSatish Balay #endif 39e5c89e4eSSatish Balay 40e5c89e4eSSatish Balay PetscFunctionBegin; 41e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME) 42e5c89e4eSSatish Balay time(&aclock); 439566063dSJacob Faibussowitsch PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len)); 44e5c89e4eSSatish Balay #else 45*c8025a54SPierre Jolivet gettimeofday(&tp, NULL); 469566063dSJacob Faibussowitsch PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len)); 47e5c89e4eSSatish Balay #endif 48e5c89e4eSSatish Balay /* now strip out the new-line chars at the end of the string */ 499566063dSJacob Faibussowitsch PetscCall(PetscStrstr(date, "\n", &str)); 50e5c89e4eSSatish Balay if (str) str[0] = 0; 513ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 52e5c89e4eSSatish Balay } 53