mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 11:23:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			899 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			899 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "Python.h"
 | 
						|
#include "_time.h"
 | 
						|
 | 
						|
/* Exposed in timefuncs.h. */
 | 
						|
time_t
 | 
						|
_PyTime_DoubleToTimet(double x)
 | 
						|
{
 | 
						|
    time_t result;
 | 
						|
    double diff;
 | 
						|
 | 
						|
    result = (time_t)x;
 | 
						|
    /* How much info did we lose?  time_t may be an integral or
 | 
						|
     * floating type, and we don't know which.  If it's integral,
 | 
						|
     * we don't know whether C truncates, rounds, returns the floor,
 | 
						|
     * etc.  If we lost a second or more, the C rounding is
 | 
						|
     * unreasonable, or the input just doesn't fit in a time_t;
 | 
						|
     * call it an error regardless.  Note that the original cast to
 | 
						|
     * time_t can cause a C error too, but nothing we can do to
 | 
						|
     * work around that.
 | 
						|
     */
 | 
						|
    diff = x - (double)result;
 | 
						|
    if (diff <= -1.0 || diff >= 1.0) {
 | 
						|
        PyErr_SetString(PyExc_ValueError,
 | 
						|
                        "timestamp out of range for platform time_t");
 | 
						|
        result = (time_t)-1;
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
}
 |