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:
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");
}