From 49468d438e3461a781280d3ec2d520cba0456f3c Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 11 Feb 2013 18:31:20 +0300 Subject: [PATCH] db: move type_size to use raw SQL Instead of printing human readable text and parsing it with fill_db_type_size.pl, just print raw SQL and parse it with fill_db_sql.pl. Signed-off-by: Dan Carpenter --- smatch.h | 1 + smatch_buf_size.c | 5 ++-- smatch_db.c | 5 ++++ smatch_scripts/db/fill_db_type_size.pl | 49 ---------------------------------- 4 files changed, 9 insertions(+), 51 deletions(-) delete mode 100755 smatch_scripts/db/fill_db_type_size.pl diff --git a/smatch.h b/smatch.h index d26102db..705bab8b 100644 --- a/smatch.h +++ b/smatch.h @@ -503,6 +503,7 @@ void sql_insert_return_states(int return_id, const char *return_ranges, void sql_insert_function_ptr(const char *fn, const char *struct_name); void sql_insert_return_values(const char *return_values); void sql_insert_call_implies(int type, int param, int value); +void sql_insert_type_size(const char *member, int size); void sql_exec(int (*callback)(void*, int, char**, char**), const char *sql); void open_smatch_db(void); diff --git a/smatch_buf_size.c b/smatch_buf_size.c index cab2de20..1a3657a5 100644 --- a/smatch_buf_size.c +++ b/smatch_buf_size.c @@ -496,9 +496,10 @@ static void info_record_alloction(struct expression *buffer, struct expression * if (!name) return; if (get_implied_value(size, &sval)) - sm_msg("info: '%s' allocated_buf_size %s", name, sval_to_str(sval)); + sql_insert_type_size(name, sval.value); else - sm_msg("info: '%s' allocated_buf_size -1", name); + sql_insert_type_size(name, -1); + free_string(name); } diff --git a/smatch_db.c b/smatch_db.c index 6564909b..5deaecbb 100644 --- a/smatch_db.c +++ b/smatch_db.c @@ -105,6 +105,11 @@ void sql_insert_call_implies(int type, int param, int value) get_function(), fn_static(), type, param, value); } +void sql_insert_type_size(const char *member, int size) +{ + sql_insert(type_size, "'%s', '%s', %d", get_filename(), member, size); +} + void add_definition_db_callback(void (*callback)(const char *name, struct symbol *sym, char *key, char *value), int type) { struct def_callback *def_callback = __alloc_def_callback(0); diff --git a/smatch_scripts/db/fill_db_type_size.pl b/smatch_scripts/db/fill_db_type_size.pl deleted file mode 100755 index b80fe99e..00000000 --- a/smatch_scripts/db/fill_db_type_size.pl +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use DBI; - -my $warns = shift; - -if (!defined($warns)) { - print "usage: $0 \n"; - exit(1); -} - -my $db = DBI->connect("dbi:SQLite:smatch_db.sqlite", "", "", {AutoCommit => 0}); -$db->do("PRAGMA synchronous = OFF"); -$db->do("PRAGMA cache_size = 800000"); -$db->do("PRAGMA journal_mode = OFF"); - -$db->do("delete from type_size;"); - -my ($file_and_line, $file, $dummy, $struct_bit, $member, $size); - -open(WARNS, "<$warns"); -while () { - if (!($_ =~ / allocated_buf_size /)) { - next; - } - - # lib/prio_heap.c:12 heap_init() info: '(struct ptr_heap)->ptrs' allocated_buf_size 4096 - - s/\n//; - s/'//g; - - if ($_ =~ /\(struct /) { - ($file_and_line, $dummy, $dummy, $struct_bit, $member, $dummy, $size) = split(/ /, $_); - $member = "(struct $member"; - } else { - ($file_and_line, $dummy, $dummy, $member, $dummy, $size) = split(/ /, $_); - } - ($file, $dummy) = split(/:/, $file_and_line); - - if (!defined($size)) { - next; - } - - $db->do("insert into type_size values ('$file', '$member', '$size')\n"); -} - -$db->commit(); -$db->disconnect(); -- 2.11.4.GIT