diff --git a/Makefile b/Makefile index 42c8d21..a673684 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ LIB_OBJECTS := $(patsubst %.c, %.o, $(LIB_SOURCES)) TEST_OBJECTS := $(patsubst %.c, %.o, $(TEST_SOURCES)) ifeq ($(DEBUG), 1) - CFLAGS := -fPIC -g3 -D__DEBUG__ + CFLAGS := -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wconversion -fPIC -g3 -D__DEBUG__ else CFLAGS := -fPIC endif diff --git a/cyberiadaml.c b/cyberiadaml.c index f8ecd8f..b552fbd 100644 --- a/cyberiadaml.c +++ b/cyberiadaml.c @@ -77,10 +77,10 @@ * Utility functions * ----------------------------------------------------------------------------- */ -int cyberiada_copy_string(char** target, unsigned int* size, const char* source) +static int cyberiada_copy_string(char** target, size_t* size, const char* source) { char* target_str; - unsigned int strsize; + size_t strsize; if (!source) return CYBERIADA_BAD_PARAMETER; strsize = strlen(source); @@ -99,7 +99,7 @@ int cyberiada_copy_string(char** target, unsigned int* size, const char* source) * Graph manipulation functions * ----------------------------------------------------------------------------- */ -CyberiadaNode* cyberiada_graph_find_node(CyberiadaNode* root, const char* id) +static CyberiadaNode* cyberiada_graph_find_node(CyberiadaNode* root, const char* id) { CyberiadaNode* node; CyberiadaNode* found; @@ -117,7 +117,7 @@ CyberiadaNode* cyberiada_graph_find_node(CyberiadaNode* root, const char* id) return NULL; } -CyberiadaNode* cyberiada_new_node(const char* id) +static CyberiadaNode* cyberiada_new_node(const char* id) { CyberiadaNode* new_node = (CyberiadaNode*)malloc(sizeof(CyberiadaNode)); cyberiada_copy_string(&(new_node->id), &(new_node->id_len), id); @@ -134,7 +134,7 @@ CyberiadaNode* cyberiada_new_node(const char* id) return new_node; } -CyberiadaEdge* cyberiada_new_edge(const char* id, CyberiadaNode* source, CyberiadaNode* target) +static CyberiadaEdge* cyberiada_new_edge(const char* id, CyberiadaNode* source, CyberiadaNode* target) { CyberiadaEdge* new_edge = (CyberiadaEdge*)malloc(sizeof(CyberiadaEdge)); cyberiada_copy_string(&(new_edge->id), &(new_edge->id_len), id); @@ -148,7 +148,7 @@ CyberiadaEdge* cyberiada_new_edge(const char* id, CyberiadaNode* source, Cyberia return new_edge; } -int cyberiada_graph_add_sibling_node(CyberiadaNode* sibling, CyberiadaNode* new_node) +static int cyberiada_graph_add_sibling_node(CyberiadaNode* sibling, CyberiadaNode* new_node) { CyberiadaNode* node = sibling; if (!new_node) { @@ -160,7 +160,7 @@ int cyberiada_graph_add_sibling_node(CyberiadaNode* sibling, CyberiadaNode* new_ return CYBERIADA_NO_ERROR; } -int cyberiada_graph_add_edge(CyberiadaSM* sm, const char* id, CyberiadaNode* source, CyberiadaNode* target) +static int cyberiada_graph_add_edge(CyberiadaSM* sm, const char* id, CyberiadaNode* source, CyberiadaNode* target) { CyberiadaEdge* last_edge; CyberiadaEdge* new_edge; @@ -178,7 +178,7 @@ int cyberiada_graph_add_edge(CyberiadaSM* sm, const char* id, CyberiadaNode* sou return CYBERIADA_NO_ERROR; } -CyberiadaEdge* cyberiada_graph_find_last_edge(CyberiadaSM* sm) +static CyberiadaEdge* cyberiada_graph_find_last_edge(CyberiadaSM* sm) { CyberiadaEdge* edge; if (!sm) { @@ -193,7 +193,7 @@ CyberiadaEdge* cyberiada_graph_find_last_edge(CyberiadaSM* sm) * The Cyberiada GraphML library fucntions declarations * ----------------------------------------------------------------------------- */ -CyberiadaSM* cyberiada_create_sm() +CyberiadaSM* cyberiada_create_sm(void) { CyberiadaSM* sm = (CyberiadaSM*)malloc(sizeof(CyberiadaSM)); cyberiada_init_sm(sm); @@ -229,11 +229,11 @@ static int cyberiada_destroy_node(CyberiadaNode* node) if(n->action) free(n->action); } while (node); } + return CYBERIADA_NO_ERROR; } int cyberiada_cleanup_sm(CyberiadaSM* sm) { - CyberiadaNode* n; CyberiadaEdge *edge, *e; CyberiadaPolyline *polyline, *pl; @@ -278,12 +278,12 @@ int cyberiada_destroy_sm(CyberiadaSM* sm) return CYBERIADA_NO_ERROR; } -static int cyberiada_get_attr_value(char* buffer, unsigned int buffer_len, +static int cyberiada_get_attr_value(char* buffer, size_t buffer_len, xmlNode* node, const char* attrname) { xmlAttr* attribute = node->properties; while(attribute) { - if (strcmp(attribute->name, attrname) == 0) { + if (strcmp((const char*)attribute->name, attrname) == 0) { xmlChar* value = xmlNodeListGetString(node->doc, attribute->children, 1); strncpy(buffer, (char*)value, buffer_len); xmlFree(value); @@ -294,7 +294,7 @@ static int cyberiada_get_attr_value(char* buffer, unsigned int buffer_len, return CYBERIADA_NOT_FOUND; } -static int cyberiada_get_element_text(char* buffer, unsigned int buffer_len, +static int cyberiada_get_element_text(char* buffer, size_t buffer_len, xmlNode* node) { xmlChar* value = xmlNodeListGetString(node->doc, @@ -341,7 +341,7 @@ static GraphProcessorState handle_new_graph(xmlNode* xml_node, { CyberiadaNode* node; char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; /* process the top graph element only */ if(cyberiada_get_attr_value(buffer, buffer_len, xml_node, @@ -366,7 +366,7 @@ static GraphProcessorState handle_new_node(xmlNode* xml_node, { CyberiadaNode* node; char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if (cyberiada_get_attr_value(buffer, buffer_len, xml_node, GRAPHML_ID_ATTRIBUTE) != CYBERIADA_NO_ERROR) { @@ -417,10 +417,10 @@ static GraphProcessorState handle_generic_node(xmlNode* xml_node, CyberiadaNode** current) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if (cyberiada_get_attr_value(buffer, buffer_len, xml_node, - GRAPHML_YED_NODE_CONFIG_ATTRIBUTE) == CYBERIADA_NO_ERROR & + GRAPHML_YED_NODE_CONFIG_ATTRIBUTE) == CYBERIADA_NO_ERROR && (strcmp(buffer, GRAPHML_YED_NODE_CONFIG_START) == 0 || strcmp(buffer, GRAPHML_YED_NODE_CONFIG_START2) == 0)) { (*current)->type = cybNodeInitial; @@ -440,7 +440,7 @@ static int cyberiada_xml_read_coord(xmlNode* xml_node, double* result) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if (cyberiada_get_attr_value(buffer, buffer_len, xml_node, attr_name) != CYBERIADA_NO_ERROR) { @@ -497,7 +497,7 @@ static GraphProcessorState handle_property(xmlNode* xml_node, CyberiadaNode** current) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if (cyberiada_get_attr_value(buffer, buffer_len, xml_node, GRAPHML_YED_PROP_VALUE_ATTRIBUTE) != CYBERIADA_NO_ERROR) { @@ -514,7 +514,7 @@ static GraphProcessorState handle_node_title(xmlNode* xml_node, CyberiadaNode** current) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if ((*current)->title != NULL) { ERROR("Trying to set node %s label twice\n", (*current)->id); return gpsInvalid; @@ -530,7 +530,7 @@ static GraphProcessorState handle_node_action(xmlNode* xml_node, CyberiadaNode** current) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if ((*current)->action != NULL) { ERROR("Trying to set node %s action twice\n", (*current)->id); return gpsInvalid; @@ -548,7 +548,7 @@ static GraphProcessorState handle_new_edge(xmlNode* xml_node, CyberiadaNode* source = NULL; CyberiadaNode* target = NULL; char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; if(cyberiada_get_attr_value(buffer, buffer_len, xml_node, GRAPHML_SOURCE_ATTRIBUTE) != CYBERIADA_NO_ERROR) { @@ -642,7 +642,7 @@ static GraphProcessorState handle_edge_label(xmlNode* xml_node, CyberiadaNode** node) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; CyberiadaEdge *current; current = cyberiada_graph_find_last_edge(sm); if (current == NULL) { @@ -690,17 +690,17 @@ static ProcessorTransition processor_state_table[] = { {gpsEdgePath, GRAPHML_YED_EDGELABEL, &handle_edge_label}, {gpsEdgePath, GRAPHML_EDGE_ELEMENT, &handle_new_edge}, }; -const unsigned int processor_state_table_size = sizeof(processor_state_table) / sizeof(ProcessorTransition); +const size_t processor_state_table_size = sizeof(processor_state_table) / sizeof(ProcessorTransition); static int dispatch_processor(xmlNode* xml_node, CyberiadaSM* sm, CyberiadaNode** current, GraphProcessorState* gps) { - unsigned int i; + size_t i; if (xml_node->type == XML_ELEMENT_NODE) { for (i = 0; i < processor_state_table_size; i++) { if (processor_state_table[i].state == *gps && - strcmp(xml_node->name, processor_state_table[i].symbol) == 0) { + strcmp((const char*)xml_node->name, processor_state_table[i].symbol) == 0) { *gps = (*(processor_state_table[i].handler))(xml_node, sm, current); return CYBERIADA_NO_ERROR; } @@ -738,7 +738,7 @@ static int cyberiada_build_graph(xmlNode* xml_root, static int cyberiada_decode_yed_xml(xmlNode* root, CyberiadaSM* sm) { char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; + size_t buffer_len = sizeof(buffer) - 1; GraphProcessorState gps = gpsInit; CyberiadaNode* current = NULL; int res; @@ -775,7 +775,7 @@ static int cyberiada_check_graphml_ns(xmlNode* root) return CYBERIADA_XML_ERROR; } do { - if (strcmp(ns->href, GRAPHML_NAMESPACE_URI) == 0) { + if (strcmp((const char*)ns->href, GRAPHML_NAMESPACE_URI) == 0) { return CYBERIADA_NO_ERROR; } ns = ns->next; @@ -789,8 +789,6 @@ int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat int res; xmlDoc* doc = NULL; xmlNode* root = NULL; - char buffer[MAX_STR_LEN]; - unsigned int buffer_len; cyberiada_init_sm(sm); @@ -803,7 +801,7 @@ int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat /* get the root element node */ root = xmlDocGetRootElement(doc); - if (strcmp(root->name, GRAPHML_GRAPHML_ELEMENT) != 0) { + if (strcmp((const char*)root->name, GRAPHML_GRAPHML_ELEMENT) != 0) { ERROR("error: could not find GraphML root node %s\n", filename); return CYBERIADA_XML_ERROR; } @@ -834,8 +832,6 @@ static int cyberiada_print_node(CyberiadaNode* node, CyberiadaNode* start, int l { CyberiadaNode* cur_node; char levelspace[16]; - char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; int i; memset(levelspace, 0, sizeof(levelspace)); @@ -872,10 +868,7 @@ static int cyberiada_print_node(CyberiadaNode* node, CyberiadaNode* start, int l static int cyberiada_print_edge(CyberiadaEdge* edge) { - char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; CyberiadaPolyline* polyline; - int i; printf(" Edge %s [%s %s]->[%s %s]\n", edge->id, edge->source->id, @@ -889,7 +882,6 @@ static int cyberiada_print_edge(CyberiadaEdge* edge) edge->geometry_target_point.x, edge->geometry_target_point.y); } else { - int i; printf(" Geometry: (\n"); printf(" (%lf, %lf)\n", edge->geometry_source_point.x, edge->geometry_source_point.y); for (polyline = edge->geometry_polyline; polyline; polyline = polyline->next) { @@ -908,8 +900,6 @@ static int cyberiada_print_edge(CyberiadaEdge* edge) int cyberiada_print_sm(CyberiadaSM* sm) { - char buffer[MAX_STR_LEN]; - unsigned int buffer_len = sizeof(buffer) - 1; CyberiadaNode* cur_node; CyberiadaEdge* cur_edge; diff --git a/cyberiadaml.h b/cyberiadaml.h index 803b8b6..38c7c4b 100644 --- a/cyberiadaml.h +++ b/cyberiadaml.h @@ -32,109 +32,109 @@ extern "C" { * The Cyberiada GraphML library types * ----------------------------------------------------------------------------- */ -/* SM node types: */ +/* SM node types: */ typedef enum { - cybNodeInitial = 0, /* initial node */ - cybNodeSimple, /* simple node */ - cybNodeComplex, /* complex node */ - cybNodeComment /* comment node */ + cybNodeInitial = 0, /* initial node */ + cybNodeSimple, /* simple node */ + cybNodeComplex, /* complex node */ + cybNodeComment /* comment node */ } CyberiadaNodeType; /* SM node geometry */ typedef struct { - double x, y; + double x, y; } CyberiadaPoint; typedef struct { - double x, y, width, height; + double x, y, width, height; } CyberiadaRect; typedef struct _CyberiadaPolyline { - CyberiadaPoint point; - struct _CyberiadaPolyline* next; + CyberiadaPoint point; + struct _CyberiadaPolyline* next; } CyberiadaPolyline; /* SM node (state) */ typedef struct _CyberiadaNode { - char* id; - unsigned int id_len; - char* title; - unsigned int title_len; - CyberiadaNodeType type; - char* action; - unsigned int action_len; - CyberiadaRect geometry_rect; - struct _CyberiadaNode* next; - struct _CyberiadaNode* parent; - struct _CyberiadaNode* children; + char* id; + size_t id_len; + char* title; + size_t title_len; + CyberiadaNodeType type; + char* action; + size_t action_len; + CyberiadaRect geometry_rect; + struct _CyberiadaNode* next; + struct _CyberiadaNode* parent; + struct _CyberiadaNode* children; } CyberiadaNode; /* SM edge (transition) */ typedef struct _CyberiadaEdge { - char* id; - unsigned int id_len; - CyberiadaNode* source; - CyberiadaNode* target; - char* action; - unsigned int action_len; - CyberiadaPoint geometry_source_point; - CyberiadaPoint geometry_target_point; - CyberiadaPolyline* geometry_polyline; - struct _CyberiadaEdge* next; + char* id; + size_t id_len; + CyberiadaNode* source; + CyberiadaNode* target; + char* action; + size_t action_len; + CyberiadaPoint geometry_source_point; + CyberiadaPoint geometry_target_point; + CyberiadaPolyline* geometry_polyline; + struct _CyberiadaEdge* next; } CyberiadaEdge; /* SM graph (state machine) */ typedef struct { - char* name; - unsigned int name_len; - char* version; - unsigned int version_len; - CyberiadaNode* nodes; - CyberiadaNode* start; - CyberiadaEdge* edges; + char* name; + size_t name_len; + char* version; + size_t version_len; + CyberiadaNode* nodes; + CyberiadaNode* start; + CyberiadaEdge* edges; } CyberiadaSM; /* SM GraphML supported formats */ typedef enum { - cybxmlYED = 0, - cybxmlCyberiada + cybxmlYED = 0, + cybxmlCyberiada } CyberiadaXMLFormat; - + /* ----------------------------------------------------------------------------- * The Cyberiada GraphML error codes * ----------------------------------------------------------------------------- */ -#define CYBERIADA_NO_ERROR 0 -#define CYBERIADA_XML_ERROR 1 -#define CYBERIADA_FORMAT_ERROR 2 -#define CYBERIADA_NOT_FOUND 3 -#define CYBERIADA_BAD_PARAMETER 4 +#define CYBERIADA_NO_ERROR 0 +#define CYBERIADA_XML_ERROR 1 +#define CYBERIADA_FORMAT_ERROR 2 +#define CYBERIADA_NOT_FOUND 3 +#define CYBERIADA_BAD_PARAMETER 4 /* ----------------------------------------------------------------------------- * The Cyberiada GraphML library functions * ----------------------------------------------------------------------------- */ - /* Allocate the SM structure in memory (for heap usage) */ - CyberiadaSM* cyberiada_create_sm(); + /* Allocate the SM structure in memory (for heap usage) */ + CyberiadaSM* cyberiada_create_sm(void); - /* Initialize the SM structure. Do not use the structure before the initialization! */ - int cyberiada_init_sm(CyberiadaSM* sm); + /* Initialize the SM structure. Do not use the structure before the initialization! */ + int cyberiada_init_sm(CyberiadaSM* sm); - /* Cleanup the content of the SM structure, free the conents memory */ - int cyberiada_cleanup_sm(CyberiadaSM* sm); + /* Cleanup the content of the SM structure, free the conents memory */ + int cyberiada_cleanup_sm(CyberiadaSM* sm); - /* Free the allocated SM structure (for heap usage) */ - int cyberiada_destroy_sm(CyberiadaSM* sm); + /* Free the allocated SM structure (for heap usage) */ + int cyberiada_destroy_sm(CyberiadaSM* sm); - /* Read an XML file and decode the SM structure */ - int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat format); - - /* Print the SM structure to stdout */ - int cyberiada_print_sm(CyberiadaSM* sm); + /* Read an XML file and decode the SM structure */ + int cyberiada_read_sm(CyberiadaSM* sm, const char* filename, CyberiadaXMLFormat format); + + /* Print the SM structure to stdout */ + int cyberiada_print_sm(CyberiadaSM* sm); #ifdef __cplusplus } #endif - + #endif diff --git a/test.c b/test.c index b6e9324..6f9d982 100644 --- a/test.c +++ b/test.c @@ -36,7 +36,7 @@ const char* format_names[] = { unsigned int format_count = sizeof(formats) / sizeof(char*); -void print_usage(const char* name) +static void print_usage(const char* name) { unsigned int i; fprintf(stderr, "%s -t \n\n", name);