X-Git-Url: https://git.saurik.com/android/aapt.git/blobdiff_plain/7e486e3393be690b0541d30339e50177fa07e64b..dd854d4c9322204ea873c2de498d6693b271952a:/Resource.cpp?ds=sidebyside diff --git a/Resource.cpp b/Resource.cpp index 49ccf71..027e3ab 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -433,7 +433,7 @@ static void checkForIds(const String8& path, ResXMLParser& parser) } } -static void applyFileOverlay(const sp& assets, +static bool applyFileOverlay(const sp& assets, const sp& baseSet, const char *resType) { @@ -441,7 +441,7 @@ static void applyFileOverlay(const sp& assets, // Also add any found only in the overlay. sp overlay = assets->getOverlay(); String8 resTypeString(resType); - + // work through the linked list of overlays while (overlay.get()) { KeyedVector >* overlayRes = overlay->getResources(); @@ -456,7 +456,7 @@ static void applyFileOverlay(const sp& assets, size_t overlayCount = overlaySet->size(); for (size_t overlayIndex=0; overlayIndexindexOfKey(overlaySet->keyAt(overlayIndex)); - if (baseIndex != UNKNOWN_ERROR) { + if (baseIndex < UNKNOWN_ERROR) { // look for same flavor. For a given file (strings.xml, for example) // there may be a locale specific or other flavors - we want to match // the same flavor. @@ -482,9 +482,10 @@ static void applyFileOverlay(const sp& assets, } } else { // this group doesn't exist (a file that's only in the overlay) - // add it - baseSet->add(overlaySet->keyAt(overlayIndex), - overlaySet->valueAt(overlayIndex)); + fprintf(stderr, "aapt: error: " + "*** Resource file '%s' exists only in an overlay\n", + overlaySet->keyAt(overlayIndex).string()); + return false; } } // this overlay didn't have resources for this type @@ -492,7 +493,7 @@ static void applyFileOverlay(const sp& assets, // try next overlay overlay = overlay->getOverlay(); } - return; + return true; } void addTagAttribute(const sp& node, const char* ns8, @@ -618,13 +619,15 @@ status_t buildResources(Bundle* bundle, const sp& assets) current = current->getOverlay(); } // apply the overlay files to the base set - applyFileOverlay(assets, drawables, "drawable"); - applyFileOverlay(assets, layouts, "layout"); - applyFileOverlay(assets, anims, "anim"); - applyFileOverlay(assets, xmls, "xml"); - applyFileOverlay(assets, raws, "raw"); - applyFileOverlay(assets, colors, "color"); - applyFileOverlay(assets, menus, "menu"); + if (!applyFileOverlay(assets, drawables, "drawable") || + !applyFileOverlay(assets, layouts, "layout") || + !applyFileOverlay(assets, anims, "anim") || + !applyFileOverlay(assets, xmls, "xml") || + !applyFileOverlay(assets, raws, "raw") || + !applyFileOverlay(assets, colors, "color") || + !applyFileOverlay(assets, menus, "menu")) { + return UNKNOWN_ERROR; + } bool hasErrors = false;