depre

Afficher la date et l'heure hexadécimale
git clone git://git.asteride.xyz/depre.git
Journaux | Fichiers | Références | LISEZ-MOI | LICENCE

commit 827198ba49428f8f59a7980f3817d548476aa53c
parent 5e0ca13aa84ce76aa96fb69a4ed91af158726cac
Auteur: ldp <ldp@asteride.xyz>
Date:   Tue,  9 Dec 2025 17:45:00 -0500

[chm] Paramétriser le programme CGI

Diffstat:
Mcommun.c | 2--
Mdepre_cgi.c | 35++++++++++++++++++++++++++++++++---
2 fichiers modifiés, 32 insertions(+), 5 suppressions(-)

diff --git a/commun.c b/commun.c @@ -1,8 +1,6 @@ #include <assert.h> #include <time.h> -#include <stdio.h> - #include "commun.h" /* nombre de secondes dans une journée */ diff --git a/depre_cgi.c b/depre_cgi.c @@ -5,6 +5,8 @@ */ #include <stdio.h> +#include <stdlib.h> +#include <string.h> #include <time.h> #include "commun.h" @@ -13,16 +15,43 @@ int main(void) { unsigned jours, barres; - char *signe; + char *p, *signe, *requete; + time_t zero, secondes; + int zerov, secondesv; - printf("Content-type: text/plain\n\n"); + zerov = secondesv = 0; - if (depre(ZERO_DEF, time(NULL), &jours, &barres) < 0) + requete = getenv("QUERY_STRING"); + + /* parcourir la requête à la recherche des paramètres « secondes » et « + * zero » */ + for (p = strtok(requete, "&"); p; p = strtok(NULL, "&")) { + if (strncmp("secondes=", p, 9) == 0) { + if (ccvt(p + 9, &secondes) < 0) + goto err_requete; + secondesv = 1; + } else if (strncmp("zero=", p, 5) == 0) { + if (ccvt(p + 5, &zero) < 0) + goto err_requete; + zerov = 1; + } + } + + if (!secondesv) + secondes = time(NULL); + if (!zerov) + zero = ZERO_DEF; + + if (depre(zero, secondes, &jours, &barres) < 0) signe = "-"; else signe = ""; + printf("Content-type: text/plain; charset=utf-8\n\n"); printf("%s%x.%x\n", signe, jours, barres); return 0; + +err_requete: + printf("Status: 400 Bad request\n\n"); }