db: move type_size to use raw SQL
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 11 Feb 2013 15:31:20 +0000 (11 18:31 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Thu, 14 Feb 2013 12:03:13 +0000 (14 15:03 +0300)
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 <dan.carpenter@oracle.com>
smatch.h
smatch_buf_size.c
smatch_db.c
smatch_scripts/db/fill_db_type_size.pl [deleted file]

index d26102d..705bab8 100644 (file)
--- 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);
index cab2de2..1a3657a 100644 (file)
@@ -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);
 }
 
index 6564909..5deaecb 100644 (file)
@@ -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 (executable)
index b80fe99..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/perl -w
-
-use strict;
-use DBI;
-
-my $warns = shift;
-
-if (!defined($warns)) {
-    print "usage:  $0 <warns.txt>\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 (<WARNS>) {
-    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();