#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "../tplcp/strct.h" #include "cgi.h" int num_process(MYSQL* sql) { MYSQL_RES *result; MYSQL_ROW row; int num = 0; if (!mysql_query(sql, "SELECT COUNT(*) FROM process")) { result = mysql_use_result(sql); row = mysql_fetch_row(result); if (row) num = atoi(row[0]); mysql_free_result(result); return num; } else { fputs("MySQL ERROR\n", stderr); fputs(mysql_error(sql), stderr); fputs("\n", stderr); exit(1); } } void get_process(tpl_data tpl) { MYSQL* sql = bdd_connect(); MYSQL_RES *result; MYSQL_ROW row; char* tab; int num; char update[300]; num = num_process(sql); if (num) { tab = malloc(num * 300); num = 0; if (!mysql_query(sql, "SELECT process, start, url FROM process LEFT JOIN page ON page = pid")) { result = mysql_store_result(sql); while (row = mysql_fetch_row(result)) { if (getpgid(atoi(row[0])) == (pid_t)-1) { sprintf(update, "DELETE FROM process WHERE process = '%s'", row[0]); mysql_query(sql, update); } else { sprintf(tab + num, "<tr><td>%s</td><td>%s</td><td><a href=\"kill.cgi?%s\">Term</a></td></tr>\n", row[0], row[2], row[0]); while (tab[num] != 0) num++; } } mysql_free_result(result); tpl_updt(tpl, "content", tab); } else { fputs(mysql_error(sql), stderr); exit(0); } } } char* display_process(tpl_data data, size_t *length); void main() { tpl_data data = new_tpl(); size_t length = 0; char* page; get_process(data); puts("Content-Type: text/html; charset=UTF-8"); page = display_process(data, &length); printf("Content-Length: %u\n\n", length); puts(page); }