From 2e72f1bf52fa95307c842274aabf5d8f817a48a3 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 8 Oct 2026 01:52:16 -0300 Subject: [PATCH] fixed a couple minor things and fixed the [zone] only mode because i'm dumb --- timetolocal.c | 65 +++++++++++++++++++++++++++++++------------------- timetolocal.o | Bin 14712 -> 14944 bytes 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/timetolocal.c b/timetolocal.c index f2e9c1a..0b96bf8 100644 --- a/timetolocal.c +++ b/timetolocal.c @@ -18,24 +18,28 @@ int findintable(char *what){ return -1; } -davidtime strtimetoint(char *whattimeisit) { - davidtime timehoursandminutes = {0, 0}; +/*parses H or H:M (24hs) +returns 0 on success, -1 if it's not a valid time*/ +int strtimetoint(const char *whattimeisit, davidtime *out) { + if (whattimeisit == NULL || out == NULL) return -1; - if (whattimeisit == NULL)return timehoursandminutes; + char *end; + long hour = strtol(whattimeisit, &end, 10); + if (end == whattimeisit) return -1; - char buf[16]; - strncpy(buf, whattimeisit, sizeof(buf) - 1); - buf[sizeof(buf) - 1] = '\0'; + long minutes = 0; + if (*end == ':') { + const char *mstart = end + 1; + minutes = strtol(mstart, &end, 10); + if (end == mstart) return -1; + } + if (*end != '\0') return -1; - char *token = strtok(buf, ":"); - if (token == NULL) return timehoursandminutes; - timehoursandminutes.hour = atoi(token); + if (hour < 0 || hour > 23 || minutes < 0 || minutes > 59) return -1; - token = strtok(NULL, ":"); - if (token == NULL) return timehoursandminutes; - timehoursandminutes.minutes = atoi(token); - - return timehoursandminutes; + out->hour = (int)hour; + out->minutes = (int)minutes; + return 0; } char* gethhmm(char* buffer, size_t max_size) { @@ -49,12 +53,15 @@ char* gethhmm(char* buffer, size_t max_size) { return buffer; } -int convert(char *timey, char *zone){ +/*tozone = 0 time is in zone, print it as local time +tozone = 1 time is local time, print it in zone +returns 0 ok -1 zone not found and -2 if invalid time*/ +int convert(char *timey, char *zone, int tozone){ time_t rawtime = time(NULL); - struct tm *ptm = gmtime(&rawtime); - - ptm->tm_isdst = -1; - time_t gmt = mktime(ptm); + struct tm utc = *gmtime(&rawtime); //gmtime uses a static buffer so it just copies + + utc.tm_isdst = -1; + time_t gmt = mktime(&utc); int offset = difftime(rawtime, gmt) / 60; //this sould take even daylight savings too, i stole it from stack overflow i've been trying to not use llms to code shit like this @@ -62,8 +69,10 @@ int convert(char *timey, char *zone){ int zntime = findintable(zone); if(zntime == -1)return -1; - davidtime eugh = strtimetoint(timey); - int total = eugh.hour * 60 + eugh.minutes - zntime + offset; //ok this is better yeah + davidtime eugh; + if(strtimetoint(timey, &eugh) == -1) return -2; + int mins = eugh.hour * 60 + eugh.minutes; + int total = tozone ? mins - offset + zntime : mins - zntime + offset; //ok this is better yeah int day = 0; while (total < 0){ @@ -84,7 +93,7 @@ int main (int argc, char **argv){ if((argc <= 1) || (argc > 3)){ printf("%s: usage: %s [TIME (24hs)] [ZONE]\ne.g: %s 7:15 est\n\nalso get relative times like %s [ZONE]\ne.g: %s est\n", argv[0], argv[0], argv[0], argv[0], argv[0]); - exit(0); + exit(1); } char timestr[16]; @@ -94,15 +103,21 @@ int main (int argc, char **argv){ printf("timezones don't have numbers in them\n"); return 1; } - if (convert(timestr, argv[1]) == -1) { + if (convert(timestr, argv[1], 1) == -1) { printf("%s: time zone not found, did you write it correctly?\n", argv[0]); return 1; } return 0; } - if(convert(argv [1], argv[2]) == -1){ + int res = convert(argv[1], argv[2], 0); + if (res == -1) { printf("%s: time zone not found, did you write it correctly?\n", argv[0]); return 1; - }else return 0; + } + if (res == -2) { + printf("%s: invalid time, use 24hs format like 7:15\n", argv[0]); + return 1; + } + return 0; } diff --git a/timetolocal.o b/timetolocal.o index b0a3007f3afa30e094712487f97755ae3106cda7..df6e3b00f38e84c1d8389e9eea41b5b7c6b24c12 100644 GIT binary patch literal 14944 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 M|7n{pXHoxu0PZtd{Qv*} literal 14712 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 XCm1lODvoP4{RN5txHhtUK>hy#rr-@#