From 338b91f5d9f391a29f43568872e4406438ff2af8 Mon Sep 17 00:00:00 2001 From: dinesh Date: Tue, 5 Aug 2008 22:38:09 +0530 Subject: [PATCH] changes to infotojson for storing dependencies from get_deps() --- tools/_infotojson/Makefile | 2 +- tools/_infotojson/infotojson.c | 49 +++++++++++++++++++--------------- tools/_infotojson/infotojson.h | 4 ++- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/tools/_infotojson/Makefile b/tools/_infotojson/Makefile index 8812e9b9..cc195ef3 100644 --- a/tools/_infotojson/Makefile +++ b/tools/_infotojson/Makefile @@ -1,2 +1,2 @@ -tools/_infotojson/infotojson: tools/_infotojson/infotojson.o tools/_infotojson/sqlite3_database.o tools/_infotojson/utils.o ccan/string/string.o ccan/talloc/talloc.o +tools/_infotojson/infotojson: tools/depends.o tools/_infotojson/infotojson.o tools/_infotojson/sqlite3_database.o tools/_infotojson/utils.o ccan/string/string.o ccan/noerr/noerr.o ccan/talloc/talloc.o $(CC) $(LDFLAGS) -o $@ $^ -lsqlite3 diff --git a/tools/_infotojson/infotojson.c b/tools/_infotojson/infotojson.c index 460cb7fe..f1493cba 100644 --- a/tools/_infotojson/infotojson.c +++ b/tools/_infotojson/infotojson.c @@ -2,7 +2,7 @@ #include "infotojson.h" /*creating json structure for storing to file/db*/ -static struct json *createjson(char **infofile, char *author) +static struct json *createjson(char **infofile, const char *author, const char *directory) { struct json *jsonobj; unsigned int modulename; @@ -12,12 +12,11 @@ static struct json *createjson(char **infofile, char *author) exit(1); } - //jsonobj = (struct json *)palloc(sizeof(struct json)); jsonobj = talloc(NULL, struct json); if (!jsonobj) errx(1, "talloc error"); - jsonobj->author = author; + jsonobj->author = talloc_strdup(jsonobj, author); /* First line should be module name and short description */ modulename = strchr(infofile[0], '-') - infofile[0]; @@ -28,7 +27,7 @@ static struct json *createjson(char **infofile, char *author) jsonobj->title = infofile[0]; jsonobj->desc = &infofile[1]; - + jsonobj->depends = get_deps(jsonobj, directory); return jsonobj; } @@ -41,7 +40,6 @@ static char **extractinfo(char **file) while (file[num_lines++]); infofile = talloc_array(NULL, char *, num_lines); - //(char **) palloc(size * sizeof(char *)); for (j = 0; j < num_lines - 1; j++) { if (streq(file[j], "/**")) { @@ -73,6 +71,13 @@ static int storejsontofile(const struct json *jsonobj, const char *file) fprintf(fp,"\"Module\":\"%s\",\n",jsonobj->module); fprintf(fp,"\"Title\":\"%s\",\n",jsonobj->title); fprintf(fp,"\"Author\":\"%s\",\n",jsonobj->author); + + fprintf(fp,"\"Dependencies\":[\n"); + for (j = 0; jsonobj->depends[j]; j++) + fprintf(fp,"{\n\"depends\":\"%s\"\n},\n",jsonobj->depends[j]); + fprintf(fp,"]\n"); + + fprintf(fp,"\"Description\":[\n"); for (j = 0; jsonobj->desc[j]; j++) fprintf(fp,"{\n\"str\":\"%s\"\n},\n",jsonobj->desc[j]); @@ -84,7 +89,7 @@ static int storejsontofile(const struct json *jsonobj, const char *file) /*storing json structure to db*/ static int storejsontodb(const struct json *jsonobj, const char *db) { - char *cmd, *query, *desc; + char *cmd, *query, *desc, *depends; sqlite3 *handle; struct db_query *q; @@ -92,17 +97,20 @@ static int storejsontodb(const struct json *jsonobj, const char *db) query = talloc_asprintf(NULL, "SELECT module from search where module=\"%s\";", jsonobj->module); q = db_query(handle, query); - desc = strjoin(NULL,jsonobj->desc,"\n"); + desc = strjoin(NULL, jsonobj->desc,"\n"); strreplace(desc, '\'', ' '); + + depends = strjoin(NULL, jsonobj->depends,"\n"); if (!q->num_rows) - cmd = talloc_asprintf(NULL, "INSERT INTO search VALUES(\"%s\",\"%s\",\"%s\",'%s\');", - jsonobj->module, jsonobj->author, jsonobj->title, desc); + cmd = talloc_asprintf(NULL, "INSERT INTO search VALUES(\"%s\",\"%s\",\"%s\", \'%s\', \'%s\', 0);", + jsonobj->module, jsonobj->author, jsonobj->title, depends, desc); else - cmd = talloc_asprintf(NULL, "UPDATE search set author=\"%s\", title=\"%s\", desc='%s\' where module=\"%s\";", - jsonobj->author, jsonobj->title, desc, jsonobj->module); + cmd = talloc_asprintf(NULL, "UPDATE search set author=\"%s\", title=\"%s\", desc=\'%s\' depends=\'%s\' where module=\"%s\";", + jsonobj->author, jsonobj->title, desc, depends, jsonobj->module); db_command(handle, cmd); db_close(handle); + talloc_free(depends); talloc_free(query); talloc_free(desc); talloc_free(cmd); @@ -117,14 +125,13 @@ int main(int argc, char *argv[]) struct json *jsonobj; talloc_enable_leak_report(); - if (argc < 4) { - errx(1, "usage: infotojson infofile jsonfile author [sqlitedb]\n"); - return 1; - } + if (argc < 5) + errx(1, "usage: infotojson dir_of_module info_filename target_json_file author [sqlitedb]\n" + "Convert _info.c file to json file and optionally store to database"); - file = grab_file(NULL, argv[1]); + file = grab_file(NULL, argv[2]); if (!file) - err(1, "Reading file %s", argv[1]); + err(1, "Reading file %s", argv[2]); lines = strsplit(NULL, file, "\n", NULL); @@ -132,13 +139,13 @@ int main(int argc, char *argv[]) infofile = extractinfo(lines); //create json obj - jsonobj = createjson(infofile, argv[3]); + jsonobj = createjson(infofile, argv[4], argv[1]); //store to file - storejsontofile(jsonobj, argv[2]); + storejsontofile(jsonobj, argv[3]); - if (argv[4] != NULL) - storejsontodb(jsonobj, argv[4]); + if (argv[5] != NULL) + storejsontodb(jsonobj, argv[5]); talloc_free(file); talloc_free(jsonobj); diff --git a/tools/_infotojson/infotojson.h b/tools/_infotojson/infotojson.h index 632debb3..7b979240 100644 --- a/tools/_infotojson/infotojson.h +++ b/tools/_infotojson/infotojson.h @@ -15,12 +15,14 @@ #include "ccan/talloc/talloc.h" #include "ccan/string/string.h" #include "utils.h" +#include "tools/tools.h" struct json { char *module; char *title; char *author; + char **depends; char **desc; }; @@ -31,7 +33,7 @@ static int storejsontofile(const struct json *jsonobj, const char *jsonfile); static int storejsontodb(const struct json *jsonobj, const char *db); /*create json structure*/ -static struct json *createjson(char **infofile, char *author); +static struct json *createjson(char **infofile, const char *author, const char *directory); /*Extract info from file*/ static char **extractinfo(char **file); -- 2.39.2