From 02487f3c4b539086a9402f5164923db18ee892ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sat, 7 Nov 2015 22:06:50 +0100 Subject: [PATCH] googlefs: fix parsing --- .../file_systems/googlefs/google_request.c | 4 +- .../file_systems/googlefs/google_request.h | 1 + .../file_systems/googlefs/parse_google_html.c | 40 +++++++------------ 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/add-ons/kernel/file_systems/googlefs/google_request.c b/src/add-ons/kernel/file_systems/googlefs/google_request.c index 8780aae503..8acf285cd1 100644 --- a/src/add-ons/kernel/file_systems/googlefs/google_request.c +++ b/src/add-ons/kernel/file_systems/googlefs/google_request.c @@ -35,7 +35,7 @@ #define FMT_Q "&q=%s" /* parse_google_html.c */ -extern int google_parse_results(const char *html, size_t htmlsize, struct google_result **results); +extern int google_parse_results(const char *html, size_t htmlsize, long *nextid, struct google_result **results); // move that to ksocket inlined static int kinet_aton(const char *in, struct in_addr *addr) @@ -150,7 +150,7 @@ status_t google_request_process(struct google_request *req) close(fd); } #endif /* FAKE_INPUT */ - err = count = google_parse_results(req->cnx->data, req->cnx->datalen, &req->results); + err = count = google_parse_results(req->cnx->data, req->cnx->datalen, &req->nextid, &req->results); if (err < 0) goto err_get; #ifdef DO_PUBLISH diff --git a/src/add-ons/kernel/file_systems/googlefs/google_request.h b/src/add-ons/kernel/file_systems/googlefs/google_request.h index 7352bbb7d7..6163eb633e 100644 --- a/src/add-ons/kernel/file_systems/googlefs/google_request.h +++ b/src/add-ons/kernel/file_systems/googlefs/google_request.h @@ -12,6 +12,7 @@ struct google_request { char *query_string; struct http_cnx *cnx; struct google_result *results; + long nextid; }; /* those are quite arbitrary values */ diff --git a/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c b/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c index 881fe6b8cb..3ac2349f86 100644 --- a/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c +++ b/src/add-ons/kernel/file_systems/googlefs/parse_google_html.c @@ -34,9 +34,9 @@ int dbgstep = 0; //#define G_BEGIN_URL "

" -#define G_END_URL "\" class=l>" +#define G_END_URL "\">" //#define G_BEGIN_NAME #define G_END_NAME "" #define G_BEGIN_SNIPSET /*""*/"" @@ -44,15 +44,14 @@ int dbgstep = 0; #define G_BEGIN_CACHESIM " " -int google_parse_results(const char *html, size_t htmlsize, struct google_result **results) +int google_parse_results(const char *html, size_t htmlsize, long *nextid, struct google_result **results) { struct google_result *res = NULL, *nres = NULL, *prev = NULL; char *p, *q; char *nextresult = NULL; long numres = 0; - long maxres = 0; - long startid = 0; - long lastid = 0; + long maxres = 1000; + //long startid = 0; int done = 0; int err = ENOMEM; @@ -63,8 +62,10 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result PRST; /* google now sends sometimes... */ if (strstr(html, "") != html) { - if (strstr(html, "") != html) - return EINVAL; + if (strstr(html, "") != html) { + if (strstr(html, "Google Search:"); @@ -74,26 +75,12 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result p = strstr(html, " Results "); - if (!p) return EINVAL; - PRST; - p+= strlen("> Results "); - startid = strtol(p, &p, 10); - if (!p) return EINVAL; - PRST; - p = strstr(html, " - "); - p+= strlen(" - "); - if (!p) return EINVAL; - PRST; - lastid = strtol(p, &p, 10); - if (!p) return EINVAL; - PRST; - maxres = lastid - startid + 1; - printf(DBG"getting %ld results (%ld to %ld)\n", maxres, startid, lastid); + /* p = strstr(html, "Search Results<"); if (!p) return EINVAL; PRST; + */ printf(DBG"parsing...\n"); @@ -111,7 +98,7 @@ int google_parse_results(const char *html, size_t htmlsize, struct google_result goto err0; } memset(nres, 0, sizeof(struct google_result)); - nres->id = startid + numres; //- 1; + nres->id = (*nextid)++; //- 1; PRST; /* find url */ @@ -273,13 +260,14 @@ int main(int argc, char **argv) size_t len; char *p; int err; + long nextid = 0; p = malloc(BUFSZ+8); len = read(0, p+4, BUFSZ); p[BUFSZ+4-1] = '\0'; *(uint32 *)p = 0xa5a5a5a5; *(uint32 *)(&p[BUFSZ+4]) = 0x5a5a5a5a; - err = google_parse_results(p+4, len, &results); + err = google_parse_results(p+4, len, &nextid, &results); printf("error 0x%08lx\n", err); if (err < 0) return 1;