]> granicus.if.org Git - postgresql/commitdiff
Currently, contrib/oid2name doesn't bother to free() the memory that it
authorBruce Momjian <bruce@momjian.us>
Tue, 5 Mar 2002 05:54:07 +0000 (05:54 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 5 Mar 2002 05:54:07 +0000 (05:54 +0000)
malloc()'s. This isn't too serious (because oid2name is a short-lived
utility, so the memory will soon be returned to the OS on process
termination), but I still think it's poor style.

This patch changes oid2name so that it allocates memory on the stack
where possible and free()s the remaining heap-allocated memory. The
patch also fixes a typo a comment and adds 'const' qualifiers to a few
'char *' function parameters.

Neil Conway

contrib/oid2name/oid2name.c

index ccf3fceb2b601c00eaac5a074db7428bda310e2e..696239bdb2464c2509a85a55769807c7112caaf9 100644 (file)
@@ -40,12 +40,12 @@ struct options
 
 /* function prototypes */
 void           get_opts(int, char **, struct options *);
-PGconn    *sql_conn(char *, struct options *);
+PGconn    *sql_conn(const char *, struct options *);
 void           sql_exec_error(int);
-int                    sql_exec(PGconn *, char *, int);
+int                    sql_exec(PGconn *, const char *, int);
 void           sql_exec_dumpdb(PGconn *);
 void           sql_exec_dumptable(PGconn *, int);
-void           sql_exec_searchtable(PGconn *, char *);
+void           sql_exec_searchtable(PGconn *, const char *);
 void           sql_exec_searchoid(PGconn *, int);
 
 /* fuction to parse command line options and check for some usage errors. */
@@ -143,7 +143,6 @@ get_opts(int argc, char **argv, struct options * my_opts)
 
                                /* display system tables */
                        case 'x':
-
                                my_opts->systables = 1;
                                break;
 
@@ -170,7 +169,7 @@ Usage: pg_oid2name [-d database [-x] ] [-t table | -o oid] \n\
 
 /* establish connection with database. */
 PGconn *
-sql_conn(char *dbName, struct options * my_opts)
+sql_conn(const char *dbName, struct options * my_opts)
 {
        char       *pghost,
                           *pgport;
@@ -183,11 +182,9 @@ sql_conn(char *dbName, struct options * my_opts)
 
        pghost = NULL;
        pgport = NULL;
-
        pgoptions = NULL;                       /* special options to start up the backend
                                                                 * server */
        pgtty = NULL;                           /* debugging tty for the backend server */
-
        pguser = NULL;
        pgpass = NULL;
 
@@ -225,12 +222,20 @@ sql_conn(char *dbName, struct options * my_opts)
                fprintf(stderr, "Connection to database '%s' failed.\n", dbName);
                fprintf(stderr, "%s", PQerrorMessage(conn));
 
-
                PQfinish(conn);
                exit(1);
-
        }
 
+       /* free data structures: not strictly necessary */
+       if (pghost != NULL)
+               free(pghost);
+       if (pgport != NULL)
+               free(pgport);
+       if (pguser != NULL)
+               free(pguser);
+       if (pgpass != NULL)
+               free(pgpass);
+
        /* return the conn if good */
        return conn;
 }
@@ -266,7 +271,7 @@ sql_exec_error(int error_number)
 
 /* actual code to make call to the database and print the output data */
 int
-sql_exec(PGconn *conn, char *todo, int match)
+sql_exec(PGconn *conn, const char *todo, int match)
 {
        PGresult   *res;
 
@@ -316,13 +321,11 @@ sql_exec(PGconn *conn, char *todo, int match)
        return 0;
 }
 
-/* dump all databases know by the system table */
+/* dump all databases known by the system table */
 void
 sql_exec_dumpdb(PGconn *conn)
 {
-       char       *todo;
-
-       todo = (char *) malloc(1024);
+       char            todo[1024];
 
        /* get the oid and database name from the system pg_database table */
        sprintf(todo, "select oid,datname from pg_database");
@@ -335,9 +338,7 @@ sql_exec_dumpdb(PGconn *conn)
 void
 sql_exec_dumptable(PGconn *conn, int systables)
 {
-       char       *todo;
-
-       todo = (char *) malloc(1024);
+       char            todo[1024];
 
        /* don't exclude the systables if this is set */
        if (systables == 1)
@@ -351,12 +352,10 @@ sql_exec_dumptable(PGconn *conn, int systables)
 /* display the oid for a given tablename for whatever db we are connected
    to. do we want to allow %bar% in the search?  Not now. */
 void
-sql_exec_searchtable(PGconn *conn, char *tablename)
+sql_exec_searchtable(PGconn *conn, const char *tablename)
 {
        int                     returnvalue;
-       char       *todo;
-
-       todo = (char *) malloc(1024);
+       char            todo[1024];
 
        /* get the oid and tablename where the name matches tablename */
        sprintf(todo, "select relfilenode,relname from pg_class where relname = '%s'", tablename);
@@ -376,9 +375,7 @@ void
 sql_exec_searchoid(PGconn *conn, int oid)
 {
        int                     returnvalue;
-       char       *todo;
-
-       todo = (char *) malloc(1024);
+       char            todo[1024];
 
        sprintf(todo, "select relfilenode,relname from pg_class where oid = %i", oid);