diff --git a/menuselect/menuselect.c b/menuselect/menuselect.c index 2eea3f09eb..2ef075fdbe 100644 --- a/menuselect/menuselect.c +++ b/menuselect/menuselect.c @@ -210,6 +210,8 @@ static void free_member(struct member *mem) xmlFree((void *) mem->defaultenabled); xmlFree((void *) mem->support_level); xmlFree((void *) mem->replacement); + xmlFree((void *) mem->deprecated_in); + xmlFree((void *) mem->removed_in); } free(mem); @@ -341,6 +343,32 @@ static int process_xml_replacement_node(xmlNode *node, struct member *mem) return 0; } +static int process_xml_deprecatedin_node(xmlNode *node, struct member *mem) +{ + const char *tmp = (const char *) xmlNodeGetContent(node); + + if (tmp && !strlen_zero(tmp)) { + xmlFree((void *) mem->deprecated_in); + mem->deprecated_in = tmp; + print_debug("Set deprecated_in for %s to %s\n", mem->name, mem->deprecated_in); + } + + return 0; +} + +static int process_xml_removedin_node(xmlNode *node, struct member *mem) +{ + const char *tmp = (const char *) xmlNodeGetContent(node); + + if (tmp && !strlen_zero(tmp)) { + xmlFree((void *) mem->removed_in); + mem->removed_in = tmp; + print_debug("Set removed_in for %s to %s\n", mem->name, mem->removed_in); + } + + return 0; +} + static int process_xml_ref_node(xmlNode *node, struct member *mem, struct reference_list *refs) { struct reference *ref; @@ -416,6 +444,8 @@ static const struct { { "conflict", process_xml_conflict_node }, { "use", process_xml_use_node }, { "member_data", process_xml_member_data_node }, + { "deprecated_in", process_xml_deprecatedin_node }, + { "removed_in", process_xml_removedin_node }, }; static node_handler lookup_node_handler(xmlNode *node) diff --git a/menuselect/menuselect.h b/menuselect/menuselect.h index d41859e194..9c71de28b3 100644 --- a/menuselect/menuselect.h +++ b/menuselect/menuselect.h @@ -70,6 +70,8 @@ struct member { const char *touch_on_change; const char *support_level; const char *replacement; + const char *deprecated_in; + const char *removed_in; /*! member_data is just an opaque, member-specific string */ const char *member_data; /*! This module is currently selected */ diff --git a/menuselect/menuselect_curses.c b/menuselect/menuselect_curses.c index fe42119db6..769806152f 100644 --- a/menuselect/menuselect_curses.c +++ b/menuselect/menuselect_curses.c @@ -279,13 +279,21 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int if (!mem->is_separator) { /* Separators lack support levels */ { /* support level */ + char buf2[64]; wmove(menu, end - start_y + 7, start_x); snprintf(buf, sizeof(buf), "Support Level: %s", mem->support_level); if (mem->replacement && *mem->replacement) { - char buf2[64]; snprintf(buf2, sizeof(buf2), ", Replaced by: %s", mem->replacement); strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1); } + if (mem->deprecated_in && *mem->deprecated_in) { + snprintf(buf2, sizeof(buf2), ", Deprecated in: %s", mem->deprecated_in); + strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1); + } + if (mem->removed_in && *mem->removed_in) { + snprintf(buf2, sizeof(buf2), ", Removed in: %s", mem->removed_in); + strncat(buf, buf2, sizeof(buf) - strlen(buf) - 1); + } waddstr(menu, buf); } } diff --git a/menuselect/menuselect_newt.c b/menuselect/menuselect_newt.c index bc03f9b1b5..b0f7574566 100644 --- a/menuselect/menuselect_newt.c +++ b/menuselect/menuselect_newt.c @@ -110,6 +110,7 @@ static void reset_display() static void display_member_info(struct member *mem) { char buffer[128] = { 0 }; + char buf2[64]; struct reference *dep; struct reference *con; @@ -175,10 +176,17 @@ static void display_member_info(struct member *mem) { /* Support Level */ snprintf(buffer, sizeof(buffer), "%s", mem->support_level); if (mem->replacement && *mem->replacement) { - char buf2[64]; snprintf(buf2, sizeof(buf2), ", Replaced by: %s", mem->replacement); strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1); } + if (mem->deprecated_in && *mem->deprecated_in) { + snprintf(buf2, sizeof(buf2), ", Deprecated in: %s", mem->deprecated_in); + strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1); + } + if (mem->removed_in && *mem->removed_in) { + snprintf(buf2, sizeof(buf2), ", Removed in: %s", mem->removed_in); + strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1); + } if (mem->is_separator) { newtTextboxSetText(supportLevelDataTextbox, ""); } else {