Correctness of calculations with struct timespec
I can see nothing wrong, but I think it is not optimal.  My compiler warns me
about floating point conversions of those '1E9' constants.  If I rewrite your
timeAdd as follows, the code is easier to read and the generated code is
significantly smaller:

#define BILLION 1000000000
Time timeAdd(Time t1, Time t2)
{
    long sec = t2.tv_sec + t1.tv_sec;
    long nsec = t2.tv_nsec + t1.tv_nsec;
    if (nsec &gt;= BILLION) {
        nsec -= BILLION;
        sec++;
    }
    return (Time){ .tv_sec = sec, .tv_nsec = nsec };
}


The same goes for the other functions, I think.