diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aapt/Images.cpp | 48 | ||||
-rw-r--r-- | tools/aapt/Resource.cpp | 44 | ||||
-rw-r--r-- | tools/aidl/aidl.cpp | 15 |
3 files changed, 56 insertions, 51 deletions
diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp index 9de685a..25a948d 100644 --- a/tools/aapt/Images.cpp +++ b/tools/aapt/Images.cpp @@ -12,13 +12,15 @@ #include <utils/ByteOrder.h> #include <png.h> +#include <zlib.h> #define NOISY(x) //x static void png_write_aapt_file(png_structp png_ptr, png_bytep data, png_size_t length) { - status_t err = ((AaptFile*)png_ptr->io_ptr)->writeData(data, length); + AaptFile* aaptfile = (AaptFile*) png_get_io_ptr(png_ptr); + status_t err = aaptfile->writeData(data, length); if (err != NO_ERROR) { png_error(png_ptr, "Write Error"); } @@ -90,7 +92,7 @@ static void read_png(const char* imageName, png_set_palette_to_rgb(read_ptr); if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) - png_set_gray_1_2_4_to_8(read_ptr); + png_set_expand_gray_1_2_4_to_8(read_ptr); if (png_get_valid(read_ptr, read_info, PNG_INFO_tRNS)) { //printf("Has PNG_INFO_tRNS!\n"); @@ -109,7 +111,7 @@ static void read_png(const char* imageName, png_read_update_info(read_ptr, read_info); outImageInfo->rows = (png_bytepp)malloc( - outImageInfo->height * png_sizeof(png_bytep)); + outImageInfo->height * sizeof(png_bytep)); outImageInfo->allocHeight = outImageInfo->height; outImageInfo->allocRows = outImageInfo->rows; @@ -450,10 +452,11 @@ static status_t do_9patch(const char* imageName, image_info* image) int maxSizeXDivs = W * sizeof(int32_t); int maxSizeYDivs = H * sizeof(int32_t); - int32_t* xDivs = (int32_t*) malloc(maxSizeXDivs); - int32_t* yDivs = (int32_t*) malloc(maxSizeYDivs); - uint8_t numXDivs = 0; - uint8_t numYDivs = 0; + int32_t* xDivs = image->info9Patch.xDivs = (int32_t*) malloc(maxSizeXDivs); + int32_t* yDivs = image->info9Patch.yDivs = (int32_t*) malloc(maxSizeYDivs); + uint8_t numXDivs = 0; + uint8_t numYDivs = 0; + int8_t numColors; int numRows; int numCols; @@ -508,6 +511,10 @@ static status_t do_9patch(const char* imageName, image_info* image) goto getout; } + // Copy patch size data into image... + image->info9Patch.numXDivs = numXDivs; + image->info9Patch.numYDivs = numYDivs; + // Find left and right of padding area... if (get_horizontal_ticks(image->rows[H-1], W, transparent, false, &image->info9Patch.paddingLeft, &image->info9Patch.paddingRight, &errorMsg, NULL, false) != NO_ERROR) { @@ -543,12 +550,6 @@ static status_t do_9patch(const char* imageName, image_info* image) image->layoutBoundsRight, image->layoutBoundsBottom)); } - // Copy patch data into image - image->info9Patch.numXDivs = numXDivs; - image->info9Patch.numYDivs = numYDivs; - image->info9Patch.xDivs = xDivs; - image->info9Patch.yDivs = yDivs; - // If padding is not yet specified, take values from size. if (image->info9Patch.paddingLeft < 0) { image->info9Patch.paddingLeft = xDivs[0]; @@ -573,7 +574,7 @@ static status_t do_9patch(const char* imageName, image_info* image) image->info9Patch.paddingTop, image->info9Patch.paddingBottom)); // Remove frame from image. - image->rows = (png_bytepp)malloc((H-2) * png_sizeof(png_bytep)); + image->rows = (png_bytepp)malloc((H-2) * sizeof(png_bytep)); for (i=0; i<(H-2); i++) { image->rows[i] = image->allocRows[i+1]; memmove(image->rows[i], image->rows[i]+4, (W-2)*4); @@ -955,7 +956,7 @@ static void analyze_image(const char *imageName, image_info &imageInfo, int gray gg = *row++; bb = *row++; aa = *row++; - + if (isGrayscale) { *out++ = rr; } else { @@ -984,7 +985,7 @@ static void write_png(const char* imageName, unknowns[0].data = NULL; unknowns[1].data = NULL; - png_bytepp outRows = (png_bytepp) malloc((int) imageInfo.height * png_sizeof(png_bytep)); + png_bytepp outRows = (png_bytepp) malloc((int) imageInfo.height * sizeof(png_bytep)); if (outRows == (png_bytepp) 0) { printf("Can't allocate output buffer!\n"); exit(1); @@ -1073,18 +1074,19 @@ static void write_png(const char* imageName, unknowns[b_index].size = chunk_size; } + for (int i = 0; i < chunk_count; i++) { + unknowns[i].location = PNG_HAVE_PLTE; + } png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS, chunk_names, chunk_count); png_set_unknown_chunks(write_ptr, write_info, unknowns, chunk_count); - // XXX I can't get this to work without forcibly changing - // the location to what I want... which apparently is supposed - // to be a private API, but everything else I have tried results - // in the location being set to what I -last- wrote so I never - // get written. :p +#if PNG_LIBPNG_VER < 10600 + /* Deal with unknown chunk location bug in 1.5.x and earlier */ png_set_unknown_chunk_location(write_ptr, write_info, 0, PNG_HAVE_PLTE); if (imageInfo.haveLayoutBounds) { png_set_unknown_chunk_location(write_ptr, write_info, 1, PNG_HAVE_PLTE); } +#endif } @@ -1092,7 +1094,9 @@ static void write_png(const char* imageName, png_bytepp rows; if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) { - png_set_filler(write_ptr, 0, PNG_FILLER_AFTER); + if (color_type == PNG_COLOR_TYPE_RGB) { + png_set_filler(write_ptr, 0, PNG_FILLER_AFTER); + } rows = imageInfo.rows; } else { rows = outRows; diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp index 08ad7a0..386888b 100644 --- a/tools/aapt/Resource.cpp +++ b/tools/aapt/Resource.cpp @@ -469,7 +469,7 @@ static int validateAttr(const String8& path, const ResTable& table, value.data); return ATTR_NOT_FOUND; } - + pool = table.getTableStringBlock(strIdx); #if 0 if (pool != NULL) { @@ -705,7 +705,7 @@ bool addTagAttribute(const sp<XMLNode>& node, const char* ns8, // don't stop the build. return true; } - + node->addAttribute(ns, attr, String16(value)); return true; } @@ -756,7 +756,7 @@ status_t massageManifest(Bundle* bundle, sp<XMLNode> root) bundle->getVersionName(), errorOnFailedInsert)) { return UNKNOWN_ERROR; } - + if (bundle->getMinSdkVersion() != NULL || bundle->getTargetSdkVersion() != NULL || bundle->getMaxSdkVersion() != NULL) { @@ -765,7 +765,7 @@ status_t massageManifest(Bundle* bundle, sp<XMLNode> root) vers = XMLNode::newElement(root->getFilename(), String16(), String16("uses-sdk")); root->insertChildAt(vers, 0); } - + if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "minSdkVersion", bundle->getMinSdkVersion(), errorOnFailedInsert)) { return UNKNOWN_ERROR; @@ -840,7 +840,7 @@ status_t massageManifest(Bundle* bundle, sp<XMLNode> root) } } } - + return NO_ERROR; } @@ -924,7 +924,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) // -------------------------------------------------------------- // resType -> leafName -> group - KeyedVector<String8, sp<ResourceTypeSet> > *resources = + KeyedVector<String8, sp<ResourceTypeSet> > *resources = new KeyedVector<String8, sp<ResourceTypeSet> >; collect_files(assets, resources); @@ -956,7 +956,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) // now go through any resource overlays and collect their files sp<AaptAssets> current = assets->getOverlay(); while(current.get()) { - KeyedVector<String8, sp<ResourceTypeSet> > *resources = + KeyedVector<String8, sp<ResourceTypeSet> > *resources = new KeyedVector<String8, sp<ResourceTypeSet> >; current->setResources(resources); collect_files(current, resources); @@ -1059,7 +1059,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) // compile resources current = assets; while(current.get()) { - KeyedVector<String8, sp<ResourceTypeSet> > *resources = + KeyedVector<String8, sp<ResourceTypeSet> > *resources = current->getResources(); ssize_t index = resources->indexOfKey(String8("values")); @@ -1068,7 +1068,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) ssize_t res; while ((res=it.next()) == NO_ERROR) { sp<AaptFile> file = it.getFile(); - res = compileResourceFile(bundle, assets, file, it.getParams(), + res = compileResourceFile(bundle, assets, file, it.getParams(), (current!=assets), &table); if (res != NO_ERROR) { hasErrors = true; @@ -1253,7 +1253,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) if (table.validateLocalizations()) { hasErrors = true; } - + if (hasErrors) { return UNKNOWN_ERROR; } @@ -1286,7 +1286,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) ResTable finalResTable; sp<AaptFile> resFile; - + if (table.hasResources()) { sp<AaptSymbols> symbols = assets->getSymbolsFor(String8("R")); err = table.addSymbols(symbols); @@ -1318,10 +1318,10 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) table.writePublicDefinitions(String16(assets->getPackage()), fp); fclose(fp); } - + // Read resources back in, finalResTable.add(resFile->getData(), resFile->getSize(), NULL); - + #if 0 NOISY( printf("Generated resources:\n"); @@ -1329,7 +1329,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) ) #endif } - + // Perform a basic validation of the manifest file. This time we // parse it with the comments intact, so that we can use them to // generate java docs... so we are not going to write this one @@ -1424,7 +1424,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) ssize_t index = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "name"); const uint16_t* id = block.getAttributeStringValue(index, &len); if (id == NULL) { - fprintf(stderr, "%s:%d: missing name attribute in element <%s>.\n", + fprintf(stderr, "%s:%d: missing name attribute in element <%s>.\n", manifestPath.string(), block.getLineNumber(), String8(block.getElementName(&len)).string()); hasErrors = true; @@ -1582,7 +1582,7 @@ status_t buildResources(Bundle* bundle, const sp<AaptAssets>& assets) return err; } } - + return err; } @@ -1704,7 +1704,7 @@ static status_t writeLayoutClasses( NA = idents.size(); bool deprecated = false; - + String16 comment = symbols->getComment(realClassName); fprintf(fp, "%s/** ", indentStr); if (comment.size() > 0) { @@ -1787,7 +1787,7 @@ static status_t writeLayoutClasses( if (deprecated) { fprintf(fp, "%s@Deprecated\n", indentStr); } - + fprintf(fp, "%spublic static final int[] %s = {\n" "%s", @@ -1832,9 +1832,9 @@ static status_t writeLayoutClasses( //printf("%s:%s/%s: 0x%08x\n", String8(package16).string(), // String8(attr16).string(), String8(name16).string(), typeSpecFlags); const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0; - + bool deprecated = false; - + fprintf(fp, "%s/**\n", indentStr); if (comment.size() > 0) { String8 cmt(comment); @@ -2219,10 +2219,10 @@ status_t writeResourceSymbols(Bundle* bundle, const sp<AaptAssets>& assets, status_t err = writeSymbolClass(fp, assets, includePrivate, symbols, className, 0, bundle->getNonConstantId()); + fclose(fp); if (err != NO_ERROR) { return err; } - fclose(fp); if (textSymbolsDest != NULL && R == className) { String8 textDest(textSymbolsDest); @@ -2241,10 +2241,10 @@ status_t writeResourceSymbols(Bundle* bundle, const sp<AaptAssets>& assets, status_t err = writeTextSymbolClass(fp, assets, includePrivate, symbols, className); + fclose(fp); if (err != NO_ERROR) { return err; } - fclose(fp); } // If we were asked to generate a dependency file, we'll go ahead and add this R.java diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp index b8a4803..a84d743 100644 --- a/tools/aidl/aidl.cpp +++ b/tools/aidl/aidl.cpp @@ -207,7 +207,7 @@ check_filename(const char* filename, const char* package, buffer_type* name) p = strchr(name->data, '.'); len = p ? p-name->data : strlen(name->data); expected.append(name->data, len); - + expected += ".aidl"; len = fn.length(); @@ -473,7 +473,7 @@ check_method(const char* filename, int kind, method_type* m) err = 1; goto next; } - + if (!(kind == INTERFACE_TYPE_BINDER ? t->CanWriteToParcel() : t->CanWriteToRpcData())) { fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n", filename, m->type.type.lineno, index, @@ -536,7 +536,7 @@ check_method(const char* filename, int kind, method_type* m) filename, m->name.lineno, index, arg->name.data); err = 1; } - + next: index++; arg = arg->next; @@ -797,7 +797,7 @@ parse_preprocessed_file(const string& filename) //printf("%s:%d:...%s...%s...%s...\n", filename.c_str(), lineno, // type, packagename, classname); document_item_type* doc; - + if (0 == strcmp("parcelable", type)) { user_data_type* parcl = (user_data_type*)malloc( sizeof(user_data_type)); @@ -847,6 +847,7 @@ parse_preprocessed_file(const string& filename) else { fprintf(stderr, "%s:%d: bad type in line: %s\n", filename.c_str(), lineno, line); + fclose(f); return 1; } err = gather_types(filename.c_str(), doc); @@ -1103,13 +1104,13 @@ preprocess_aidl(const Options& options) } // write preprocessed file - int fd = open( options.outputFileName.c_str(), + int fd = open( options.outputFileName.c_str(), O_RDWR|O_CREAT|O_TRUNC|O_BINARY, #ifdef HAVE_MS_C_RUNTIME _S_IREAD|_S_IWRITE); -#else +#else S_IRUSR|S_IWUSR|S_IRGRP); -#endif +#endif if (fd == -1) { fprintf(stderr, "aidl: could not open file for write: %s\n", options.outputFileName.c_str()); |