X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fxml.c;h=8280e8edfc496f014029d3abcb25560c5c89f100;hp=f7d694d04e9557d0641ecfb88b970b9ed91d3258;hb=52c44c6a506cdfae17fd5fd5c6611622d342c128;hpb=93cf87b7baf5093c729f74f7e1c4be2a94880dbe diff --git a/src/xml.c b/src/xml.c index f7d694d0..8280e8ed 100644 --- a/src/xml.c +++ b/src/xml.c @@ -716,7 +716,6 @@ xml_update_image_info(WIMStruct *wim, int image) xmlFreeNode(totalbytes_node); xmlFreeNode(hardlinkbytes_node); xmlFreeNode(lastmodificationtime_node); - WARNING("Failed to update image information!"); return WIMLIB_ERR_NOMEM; } @@ -809,7 +808,10 @@ xml_export_image(const struct wim_xml_info *src_info, int src_image, xmlFreeProp(unlink_index_attribute(dest_node)); - return append_image_node(dest_info, dest_node); + ret = append_image_node(dest_info, dest_node); + if (ret) + goto err; + return 0; err: xmlFreeNode(dest_node); @@ -920,11 +922,12 @@ print_windows_info(struct wim_xml_info *info, xmlNode *image_node) tprintf(T("Languages: ")); node_for_each_child(langs_node, lang_node) { - if (node_is_element(lang_node, "LANGUAGE")) { - tfputs(node_get_ttext(info, lang_node), stdout); - tputchar(T(' ')); - } - + if (!node_is_element(lang_node, "LANGUAGE")) + continue; + text = node_get_ttext(info, lang_node); + if (!text) + continue; + tprintf(T("%"TS" "), text); } tputchar(T('\n')); @@ -1347,8 +1350,8 @@ wimlib_extract_xml_data(WIMStruct *wim, FILE *fp) return ret; } -WIMLIBAPI bool -wimlib_image_name_in_use(const WIMStruct *wim, const tchar *name) +static bool +image_name_in_use(const WIMStruct *wim, const tchar *name, int excluded_image) { const struct wim_xml_info *info = wim->xml_info; const xmlChar *name_utf8; @@ -1362,6 +1365,8 @@ wimlib_image_name_in_use(const WIMStruct *wim, const tchar *name) if (tstr_get_utf8(name, &name_utf8)) return false; for (int i = 0; i < info->image_count && !found; i++) { + if (i + 1 == excluded_image) + continue; found = xmlStrEqual(name_utf8, xml_get_text_by_path( info->images[i], "NAME")); } @@ -1369,6 +1374,12 @@ wimlib_image_name_in_use(const WIMStruct *wim, const tchar *name) return found; } +WIMLIBAPI bool +wimlib_image_name_in_use(const WIMStruct *wim, const tchar *name) +{ + return image_name_in_use(wim, name, WIMLIB_NO_IMAGE); +} + WIMLIBAPI const tchar * wimlib_get_image_name(const WIMStruct *wim, int image) { @@ -1400,7 +1411,7 @@ wimlib_get_image_property(const WIMStruct *wim, int image, WIMLIBAPI int wimlib_set_image_name(WIMStruct *wim, int image, const tchar *name) { - if (wimlib_image_name_in_use(wim, name)) + if (image_name_in_use(wim, name, image)) return WIMLIB_ERR_IMAGE_NAME_COLLISION; return set_image_property(wim, image, "NAME", name); @@ -1425,6 +1436,9 @@ wimlib_set_image_property(WIMStruct *wim, int image, const tchar *property_name, const xmlChar *name; int ret; + if (!property_name || !*property_name) + return WIMLIB_ERR_INVALID_PARAM; + ret = tstr_get_utf8(property_name, &name); if (ret) return ret;