#include <stdio.h>
#include <string.h>
#include <libgen.h>
#include <limits.h>
#include <sys/param.h>
#include "parser.h"
#include "trace.h"
#include "util.h"
#include "errlog.h"
#include "db.h"
static int curr_print_type;
static struct {
char Current_Library[PATH_MAX];
char Current_File[PATH_MAX];
char Output_File[PATH_MAX];
char Current_Interface[PATH_MAX];
char Source_Directory[PATH_MAX];
char Target_Directory[PATH_MAX];
int NFiles;
int Verbosity;
char Library_List[PATH_MAX];
char Translator[MAXNAMELEN];
char Test_Type[MAXNAMELEN];
char Kludge[PATH_MAX];
int Flags;
char const *Arch;
table_t *Print_Types;
table_t *File;
table_t *Exclusions;
} Database;
void
db_set_current_library(char const *p)
{
errlog(BEGIN, "db_set_current_library() {");
(void) strncpy(Database.Current_Library, p,
sizeof (Database.Current_Library));
Database.Current_Library[sizeof (Database.Current_Library) - 1] = '\0';
errlog(END, "}");
}
char *
db_get_current_library(void)
{
errlog(BEGIN, "db_get_current_library() {"); errlog(END, "}");
return (Database.Current_Library);
}
void
db_set_current_interface(char const *p)
{
errlog(BEGIN, "db_set_current_interface() {");
(void) strncpy(Database.Current_Interface, p,
sizeof (Database.Current_Interface));
Database.Current_Interface[
sizeof (Database.Current_Interface) - 1] = '\0';
errlog(END, "}");
}
char *
db_get_current_interface(void)
{
errlog(BEGIN, "db_get_current_interface() {"); errlog(END, "}");
return (Database.Current_Interface);
}
void
db_set_source_directory(char const *p)
{
errlog(BEGIN, "db_set_source_directory() {");
(void) strncpy(Database.Source_Directory, p,
sizeof (Database.Source_Directory));
Database.Source_Directory[sizeof (Database.Source_Directory) - 1] =
'\0';
errlog(END, "}");
}
char *
db_get_source_directory(void)
{
errlog(BEGIN, "db_get_source_directory() {"); errlog(END, "}");
return (Database.Source_Directory);
}
void
db_set_target_directory(char const *p)
{
errlog(BEGIN, "db_set_target_directory() {");
(void) strncpy(Database.Target_Directory, p,
sizeof (Database.Target_Directory));
Database.Target_Directory[sizeof (Database.Target_Directory) - 1] =
'\0';
errlog(END, "}");
}
char *
db_get_target_directory(void)
{
errlog(BEGIN, "db_get_target_directory() {"); errlog(END, "}");
return (Database.Target_Directory);
}
void
db_set_current_file(char const *p)
{
(void) strncpy(Database.Current_File, p,
sizeof (Database.Current_File));
Database.Current_File[sizeof (Database.Current_File) - 1] = '\0';
}
char *
db_get_current_file(void)
{
return (Database.Current_File);
}
void
db_set_output_file(char const *p)
{
char *q;
errlog(BEGIN, "db_set_output_file() {");
if (p == NULL) {
errlog(END, "}");
return;
}
(void) strncpy(Database.Output_File, p, sizeof (Database.Output_File));
if ((q = strrchr(Database.Output_File, '.')) != NULL) {
*q = '\0';
} else {
Database.Output_File[sizeof (Database.Output_File) - 1] = '\0';
}
errlog(VERBOSE, "output file = '%s'\n", Database.Output_File);
errlog(END, "}");
}
char *
db_get_output_file(void)
{
static char buffer[MAXLINE];
char *p, *q;
errlog(BEGIN, "db_get_output_file() {");
if (*Database.Output_File != '\0') {
errlog(VERBOSE, "output file from -o = '%s'\n",
Database.Output_File);
errlog(END, "}");
return (Database.Output_File);
} else {
(void) strncpy(buffer, Database.Current_File, sizeof (buffer));
p = basename(buffer);
if ((q = strrchr(p, '.')) != NULL) {
*q = '\0';
}
errlog(VERBOSE, "output file from input = '%s'\n", p);
errlog(END, "}");
return (p);
}
}
void
db_add_print_types(char *print_type, char *c_type)
{
char buffer[MAXLINE];
errlog(BEGIN, "db_add_print_types() {");
(void) snprintf(buffer, sizeof (buffer), "%s, %s", print_type, c_type);
if (Database.Print_Types == NULL) {
Database.Print_Types = create_string_table(50);
}
if (in_string_table(Database.Print_Types, print_type) == NO) {
Database.Print_Types = add_string_table(Database.Print_Types,
&buffer[0]);
}
errlog(END, "}");
}
char *
db_get_first_print_type(void)
{
curr_print_type = 1;
return (get_string_table(Database.Print_Types, 0));
}
char *
db_get_next_print_type(void)
{
return (get_string_table(Database.Print_Types, curr_print_type++));
}
void
db_sort_print_types(void)
{
errlog(BEGIN, "db_sort_print_types() {");
sort_string_table(Database.Print_Types);
errlog(END, "}");
}
void
db_set_arch(char const *arch)
{
Database.Arch = arch;
}
char const *
db_get_arch(void)
{
return (Database.Arch);
}