// public domain, no warranty. #include #include #include #define BUFSIZE 4096 static char Buf_i[BUFSIZE], Buf_o[BUFSIZE]; static char Description[] = ""; static char LocalTimeHeader[] = "[CDATA["; static char GlobalTimeHeader[] = "
("; static void convert_description(void) { int n, pos, remain; char *utime, *ltime, *p; ltime = strstr(Buf_i, LocalTimeHeader); utime = strstr(Buf_i, GlobalTimeHeader); if (utime == NULL || ltime == NULL) { goto no_convert; } p = strchr(utime, ')'); if (p == NULL) { goto no_convert; } *utime = '\0'; /* terminate character for local time string */ *p = '\0'; /* terminate character for global time string */ ltime += sizeof(LocalTimeHeader) - 1; utime += sizeof(GlobalTimeHeader) - 1; while (utime != p) { switch (*p) { case '/': *p = '-'; break; case ' ': *p = 'T'; break; default: /* do nothing */ break; } p--; } remain = sizeof(Buf_o); pos = 0; n = snprintf(Buf_o + pos, remain, ""); remain -= n; pos += n; n = snprintf(Buf_o + pos, remain, "%s", ltime); remain -= n; pos += n; n = snprintf(Buf_o + pos, remain, "\n"); remain -= n; pos += n; n = snprintf(Buf_o + pos, remain, ""); remain -= n; pos += n; n = snprintf(Buf_o + pos, remain, "%s", utime); remain -= n; pos += n; n = snprintf(Buf_o + pos, remain, ".000Z\n"); remain -= n; pos += n; return; no_convert: strcpy(Buf_o, Buf_i); return; } int main(int argc, char *argv[]) { FILE *fp; int result; /* usage */ if (argc < 2) { printf("usage: %s [filename]\n", argv[0]); result = EXIT_FAILURE; goto fin0; } /* open file */ fp = fopen(argv[1], "r"); if (fp == NULL) { printf("%s: file open error\n", argv[1]); result = EXIT_FAILURE; goto fin0; } /* read file/process */ while (fgets(Buf_i, sizeof(Buf_i), fp) != NULL) { if (strncmp(Buf_i, Description, sizeof(Description) - 1)) { printf("%s", Buf_i); } else { convert_description(); printf("%s", Buf_o); } } fin1: fclose(fp); fin0: return result; }