src/share/native/com/sun/java/util/jar/pack/bands.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File jdk Sdiff src/share/native/com/sun/java/util/jar/pack

src/share/native/com/sun/java/util/jar/pack/bands.cpp

Print this page




 271 
 272 #define INDEX_INIT(tag, nullOK, subindex) \
 273         ((tag) + (subindex)*SUBINDEX_BIT + (nullOK)*256)
 274 
 275 #define INDEX(tag)          INDEX_INIT(tag, 0, 0)
 276 #define NULL_OR_INDEX(tag)  INDEX_INIT(tag, 1, 0)
 277 #define SUB_INDEX(tag)      INDEX_INIT(tag, 0, 1)
 278 #define NO_INDEX            0
 279 
 280 struct band_init {
 281   int         bn;
 282   const char* name;
 283   int   defc;
 284   int   index;
 285 };
 286 
 287 #define BAND_INIT(name, cspec, ix) \
 288   { e_##name,  #name, /*debug only*/ \
 289     cspec, ix }
 290 
 291 const band_init all_band_inits[] = {
 292 //BAND_INIT(archive_magic, BYTE1_spec, 0),
 293 //BAND_INIT(archive_header, UNSIGNED5_spec, 0),
 294 //BAND_INIT(band_headers, BYTE1_spec, 0),
 295   BAND_INIT(cp_Utf8_prefix, DELTA5_spec, 0),
 296   BAND_INIT(cp_Utf8_suffix, UNSIGNED5_spec, 0),
 297   BAND_INIT(cp_Utf8_chars, CHAR3_spec, 0),
 298   BAND_INIT(cp_Utf8_big_suffix, DELTA5_spec, 0),
 299   BAND_INIT(cp_Utf8_big_chars, DELTA5_spec, 0),
 300   BAND_INIT(cp_Int, UDELTA5_spec, 0),
 301   BAND_INIT(cp_Float, UDELTA5_spec, 0),
 302   BAND_INIT(cp_Long_hi, UDELTA5_spec, 0),
 303   BAND_INIT(cp_Long_lo, DELTA5_spec, 0),
 304   BAND_INIT(cp_Double_hi, UDELTA5_spec, 0),
 305   BAND_INIT(cp_Double_lo, DELTA5_spec, 0),
 306   BAND_INIT(cp_String, UDELTA5_spec, INDEX(CONSTANT_Utf8)),
 307   BAND_INIT(cp_Class, UDELTA5_spec, INDEX(CONSTANT_Utf8)),
 308   BAND_INIT(cp_Signature_form, DELTA5_spec, INDEX(CONSTANT_Utf8)),
 309   BAND_INIT(cp_Signature_classes, UDELTA5_spec, INDEX(CONSTANT_Class)),
 310   BAND_INIT(cp_Descr_name, DELTA5_spec, INDEX(CONSTANT_Utf8)),
 311   BAND_INIT(cp_Descr_type, UDELTA5_spec, INDEX(CONSTANT_Signature)),


 431   BAND_INIT(bc_classref, UNSIGNED5_spec, NULL_OR_INDEX(CONSTANT_Class)),
 432   BAND_INIT(bc_fieldref, DELTA5_spec, INDEX(CONSTANT_Fieldref)),
 433   BAND_INIT(bc_methodref, UNSIGNED5_spec, INDEX(CONSTANT_Methodref)),
 434   BAND_INIT(bc_imethodref, DELTA5_spec, INDEX(CONSTANT_InterfaceMethodref)),
 435   BAND_INIT(bc_indyref, DELTA5_spec, INDEX(CONSTANT_InvokeDynamic)),
 436   BAND_INIT(bc_thisfield, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Fieldref)),
 437   BAND_INIT(bc_superfield, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Fieldref)),
 438   BAND_INIT(bc_thismethod, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 439   BAND_INIT(bc_supermethod, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 440   BAND_INIT(bc_initref, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 441   BAND_INIT(bc_escref, UNSIGNED5_spec, INDEX(CONSTANT_All)),
 442   BAND_INIT(bc_escrefsize, UNSIGNED5_spec, 0),
 443   BAND_INIT(bc_escsize, UNSIGNED5_spec, 0),
 444   BAND_INIT(bc_escbyte, BYTE1_spec, 0),
 445   BAND_INIT(file_name, UNSIGNED5_spec, INDEX(CONSTANT_Utf8)),
 446   BAND_INIT(file_size_hi, UNSIGNED5_spec, 0),
 447   BAND_INIT(file_size_lo, UNSIGNED5_spec, 0),
 448   BAND_INIT(file_modtime, DELTA5_spec, 0),
 449   BAND_INIT(file_options, UNSIGNED5_spec, 0),
 450 //BAND_INIT(file_bits, BYTE1_spec, 0),
 451 #ifndef PRODUCT
 452   { 0, 0, 0, 0 }
 453 #else
 454   { 0, 0 }
 455 #endif
 456 };
 457 #define NUM_BAND_INITS \
 458         (sizeof(all_band_inits)/sizeof(all_band_inits[0]))
 459 
 460 band* band::makeBands(unpacker* u) {
 461   band* tmp_all_bands = U_NEW(band, BAND_LIMIT);
 462   for (int i = 0; i < BAND_LIMIT; i++) {
 463     assert((byte*)&all_band_inits[i+1]
 464            < (byte*)all_band_inits+sizeof(all_band_inits));
 465     const band_init& bi = all_band_inits[i];
 466     band&            b  = tmp_all_bands[i];
 467     coding*          defc = coding::findBySpec(bi.defc);
 468     assert((defc == null) == (bi.defc == -1));  // no garbage, please
 469     assert(defc == null || !defc->isMalloc);
 470     assert(bi.bn == i);  // band array consistent w/ band enum
 471     b.init(u, i, defc);
 472     if (bi.index > 0) {
 473       b.nullOK = ((bi.index >> 8) & 1);
 474       b.ixTag = (bi.index & 0xFF);
 475     }
 476 #ifndef PRODUCT
 477     b.name = bi.name;
 478 #endif


 271 
 272 #define INDEX_INIT(tag, nullOK, subindex) \
 273         ((tag) + (subindex)*SUBINDEX_BIT + (nullOK)*256)
 274 
 275 #define INDEX(tag)          INDEX_INIT(tag, 0, 0)
 276 #define NULL_OR_INDEX(tag)  INDEX_INIT(tag, 1, 0)
 277 #define SUB_INDEX(tag)      INDEX_INIT(tag, 0, 1)
 278 #define NO_INDEX            0
 279 
 280 struct band_init {
 281   int         bn;
 282   const char* name;
 283   int   defc;
 284   int   index;
 285 };
 286 
 287 #define BAND_INIT(name, cspec, ix) \
 288   { e_##name,  #name, /*debug only*/ \
 289     cspec, ix }
 290 
 291 const band_init all_band_inits[BAND_LIMIT+1] = {
 292 //BAND_INIT(archive_magic, BYTE1_spec, 0),
 293 //BAND_INIT(archive_header, UNSIGNED5_spec, 0),
 294 //BAND_INIT(band_headers, BYTE1_spec, 0),
 295   BAND_INIT(cp_Utf8_prefix, DELTA5_spec, 0),
 296   BAND_INIT(cp_Utf8_suffix, UNSIGNED5_spec, 0),
 297   BAND_INIT(cp_Utf8_chars, CHAR3_spec, 0),
 298   BAND_INIT(cp_Utf8_big_suffix, DELTA5_spec, 0),
 299   BAND_INIT(cp_Utf8_big_chars, DELTA5_spec, 0),
 300   BAND_INIT(cp_Int, UDELTA5_spec, 0),
 301   BAND_INIT(cp_Float, UDELTA5_spec, 0),
 302   BAND_INIT(cp_Long_hi, UDELTA5_spec, 0),
 303   BAND_INIT(cp_Long_lo, DELTA5_spec, 0),
 304   BAND_INIT(cp_Double_hi, UDELTA5_spec, 0),
 305   BAND_INIT(cp_Double_lo, DELTA5_spec, 0),
 306   BAND_INIT(cp_String, UDELTA5_spec, INDEX(CONSTANT_Utf8)),
 307   BAND_INIT(cp_Class, UDELTA5_spec, INDEX(CONSTANT_Utf8)),
 308   BAND_INIT(cp_Signature_form, DELTA5_spec, INDEX(CONSTANT_Utf8)),
 309   BAND_INIT(cp_Signature_classes, UDELTA5_spec, INDEX(CONSTANT_Class)),
 310   BAND_INIT(cp_Descr_name, DELTA5_spec, INDEX(CONSTANT_Utf8)),
 311   BAND_INIT(cp_Descr_type, UDELTA5_spec, INDEX(CONSTANT_Signature)),


 431   BAND_INIT(bc_classref, UNSIGNED5_spec, NULL_OR_INDEX(CONSTANT_Class)),
 432   BAND_INIT(bc_fieldref, DELTA5_spec, INDEX(CONSTANT_Fieldref)),
 433   BAND_INIT(bc_methodref, UNSIGNED5_spec, INDEX(CONSTANT_Methodref)),
 434   BAND_INIT(bc_imethodref, DELTA5_spec, INDEX(CONSTANT_InterfaceMethodref)),
 435   BAND_INIT(bc_indyref, DELTA5_spec, INDEX(CONSTANT_InvokeDynamic)),
 436   BAND_INIT(bc_thisfield, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Fieldref)),
 437   BAND_INIT(bc_superfield, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Fieldref)),
 438   BAND_INIT(bc_thismethod, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 439   BAND_INIT(bc_supermethod, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 440   BAND_INIT(bc_initref, UNSIGNED5_spec, SUB_INDEX(CONSTANT_Methodref)),
 441   BAND_INIT(bc_escref, UNSIGNED5_spec, INDEX(CONSTANT_All)),
 442   BAND_INIT(bc_escrefsize, UNSIGNED5_spec, 0),
 443   BAND_INIT(bc_escsize, UNSIGNED5_spec, 0),
 444   BAND_INIT(bc_escbyte, BYTE1_spec, 0),
 445   BAND_INIT(file_name, UNSIGNED5_spec, INDEX(CONSTANT_Utf8)),
 446   BAND_INIT(file_size_hi, UNSIGNED5_spec, 0),
 447   BAND_INIT(file_size_lo, UNSIGNED5_spec, 0),
 448   BAND_INIT(file_modtime, DELTA5_spec, 0),
 449   BAND_INIT(file_options, UNSIGNED5_spec, 0),
 450 //BAND_INIT(file_bits, BYTE1_spec, 0),
 451   { 0, NULL, 0, 0 }




 452 };


 453 
 454 band* band::makeBands(unpacker* u) {
 455   band* tmp_all_bands = U_NEW(band, BAND_LIMIT);
 456   for (int i = 0; i < BAND_LIMIT; i++) {
 457     assert((byte*)&all_band_inits[i+1]
 458            < (byte*)all_band_inits+sizeof(all_band_inits));
 459     const band_init& bi = all_band_inits[i];
 460     band&            b  = tmp_all_bands[i];
 461     coding*          defc = coding::findBySpec(bi.defc);
 462     assert((defc == null) == (bi.defc == -1));  // no garbage, please
 463     assert(defc == null || !defc->isMalloc);
 464     assert(bi.bn == i);  // band array consistent w/ band enum
 465     b.init(u, i, defc);
 466     if (bi.index > 0) {
 467       b.nullOK = ((bi.index >> 8) & 1);
 468       b.ixTag = (bi.index & 0xFF);
 469     }
 470 #ifndef PRODUCT
 471     b.name = bi.name;
 472 #endif
src/share/native/com/sun/java/util/jar/pack/bands.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File