diff --git a/htdocs/archive/report.c b/htdocs/archive/report.c
index 0650acbda..ba28123af 100644
--- a/htdocs/archive/report.c
+++ b/htdocs/archive/report.c
@@ -7,27 +7,55 @@
#define MAX_RECORDS 1000
+void listAll(char **data) {
+ puts("Content-type: text/html\r\n\r\n");
+ puts("
\n");
+ puts("\n");
+ for (int i = 0; i < MAX_RECORDS && data[i]; i++) {
+ const char *name = getname(data[i]);
+ printf("%s | Delete this |
\n", name);
+ }
+ puts("\n");
+ puts("");
+}
+
+void listOne(char **data, const char name[]) {
+ int index = -1;
+ for (int i = 0; i < MAX_RECORDS && data[i]; i++) {
+ if (strcmp(getname(data[i]), name)==0) {
+ index = i;
+ break;
+ }
+ }
+
+ puts("Content-type: text/plain\r\n\r\n");
+ puts((index == -1) ? "Not found" : data[index]);
+}
+
int main() {
char *data[MAX_RECORDS] = {0};
// read
if (!readdata(data, MAX_RECORDS)) {
- printf("Internal error: failed to load data");
+ puts("Content-type: text/html\r\n\r\n");
+ puts("Internal error: failed to load data");
+ return 0;
}
// sort
sortdata(data,MAX_RECORDS);
- // output
- printf("Content-type: text/html\r\n\r\n");
- printf("\n");
- printf("\n");
- for (int i = 0; i < MAX_RECORDS && data[i]; i++) {
- const char *name = getname(data[i]);
- printf("%s | Delete this |
\n", name);
+ const char *query_string = getenv("QUERY_STRING");
+ if (query_string == NULL) {
+ listAll(data);
+ } else if (strncmp(query_string, "name=", 5) == 0 && getname(query_string) != NULL) {
+ char name[32] = {0};
+ strcpy(name, getname(query_string));
+ listOne(data,name);
+ } else {
+ puts("Content-type: text/plain\r\n\r\n");
+ puts("Invalid query");
}
- printf("\n");
- printf("");
return 0;
}