Skip to content
Snippets Groups Projects
Commit 8ffc06d8 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel:
Browse files

Simplify string building.

parent 48e7b957
No related branches found
No related tags found
1 merge request!5Intentional change
......@@ -1481,64 +1481,52 @@ getTotalSecondsTimeDelta(struct _timedelta* td, struct _datetime* base_dt)
char *
timedeltaToString(struct _timedelta* td, char* toStr)
{
if ((td != NULL )&& (toStr != NULL) ){
if ((td != NULL )&& (toStr != NULL) && (td->sign == '+' || td->sign == '-')){
memset(toStr,'\0',MAX_TIMEDELTA_STR_LEN);
int pos = 0;
if (td->sign == '-')
sprintf(toStr,"%cP",td->sign);
else if (td->sign == '+')
strcpy (toStr,"P");
else
return NULL; /* ERROR: TD sign not set. Should never happen. */
toStr[pos++] = '-';
toStr[pos++] = 'P';
if (td->second > 59)
{
/* generate string with seconds only */
toStr[pos++] = 'T';
sprintf(toStr+pos,"%d.%03dS",td->second, td->ms);
return toStr;
}
if (td->year != 0)
sprintf(&(toStr[strlen(toStr)]),"%" PRIi64 "Y",td->year);
pos += sprintf(toStr+pos,"%" PRIi64 "Y",td->year);
if (td->month != 0)
sprintf(&(toStr[strlen(toStr)]),"%02dM",td->month);
pos += sprintf(toStr+pos,"%02dM",td->month);
if (td->day != 0)
sprintf(&(toStr[strlen(toStr)]),"%02dD",td->day);
pos += sprintf(toStr+pos,"%02dD",td->day);
sprintf(&(toStr[strlen(toStr)]),"T");
toStr[pos++] = 'T';
if (td->hour != 0)
sprintf(&(toStr[strlen(toStr)]),"%02dH",td->hour);
pos += sprintf(toStr+pos,"%02dH",td->hour);
if (td->minute != 0)
sprintf(&(toStr[strlen(toStr)]),"%02dM",td->minute);
pos += sprintf(toStr+pos,"%02dM",td->minute);
if ((td->second != 0) || (td->ms != 0))
{
if (td->second > 59)
{
/* reset and generate string with seconds only */
memset(toStr,'\0',MAX_TIMEDELTA_STR_LEN);
if (td->sign == '-')
sprintf(toStr,"%cPT",td->sign);
else if (td->sign == '+')
strcpy (toStr,"PT");
else
return NULL; /*ERROR: TD sign not set. Should never happen. */
sprintf(&(toStr[strlen(toStr)]),"%d.%03dS",td->second, td->ms);
}
else
{
sprintf(&(toStr[strlen(toStr)]),"%02d.%03dS",td->second,td->ms);
}
pos += sprintf(toStr+pos,"%02d.%03dS",td->second,td->ms);
}
//Discard T if all time values are 0.
if(toStr[strlen(toStr)-1] == 'T')
toStr[strlen(toStr)-1] = '\0';
if(toStr[pos-1] == 'T')
toStr[--pos] = '\0';
//Return PT00.000S if all delta values are 0.
if(toStr[strlen(toStr)-1] == 'P')
strcat(toStr,"T00.000S");
if(toStr[pos-1] == 'P')
strcpy(toStr+pos,"T00.000S");
return toStr;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment