depre_cgi.c (1216B)
1 /* depre_cgi, afficher la date et l’heure sur le web selon la représentation 2 * hexadécimale du temps dêpre 3 * par ldp <ldp@asteride.xyz> 4 * Ce programme est distribué sous la licence libre GPLv3 5 */ 6 7 #include <stdio.h> 8 #include <stdlib.h> 9 #include <string.h> 10 #include <time.h> 11 12 #include "commun.h" 13 14 int 15 main(void) 16 { 17 unsigned jours, barres; 18 char *p, *signe, *requete; 19 time_t zero, secondes; 20 int zerov, secondesv; 21 22 zerov = secondesv = 0; 23 24 requete = getenv("QUERY_STRING"); 25 26 /* parcourir la requête à la recherche des paramètres « secondes » et « 27 * zero » */ 28 for (p = strtok(requete, "&"); p; p = strtok(NULL, "&")) { 29 if (strncmp("secondes=", p, 9) == 0) { 30 if (ccvt(p + 9, &secondes) < 0) 31 goto err_requete; 32 secondesv = 1; 33 } else if (strncmp("zero=", p, 5) == 0) { 34 if (ccvt(p + 5, &zero) < 0) 35 goto err_requete; 36 zerov = 1; 37 } 38 } 39 40 if (!secondesv) 41 secondes = time(NULL); 42 if (!zerov) 43 zero = ZERO_DEF; 44 45 if (depre(zero, secondes, &jours, &barres) < 0) 46 signe = "-"; 47 else 48 signe = ""; 49 50 printf("Content-type: text/plain; charset=utf-8\n\n"); 51 printf("%s%x.%x\n", signe, jours, barres); 52 53 return 0; 54 55 err_requete: 56 printf("Status: 400 Bad request\n\n"); 57 }