Ticket #1539: remove-Parrot_string_cstring.patch

File remove-Parrot_string_cstring.patch, 5.2 KB (added by tcurtis, 5 years ago)
  • src/pmc/packfile.pmc

     
    171171*/ 
    172172    VTABLE void set_string_native(STRING *str) { 
    173173        PackFile  * const pf  = PackFile_new(interp, 0); 
    174         opcode_t  * const ptr = (opcode_t *)Parrot_string_cstring(interp, str); 
     174        opcode_t  * const ptr = (opcode_t *)Parrot_str_to_cstring(interp, str); 
    175175        const int length      = Parrot_str_byte_length(interp, str); 
    176176        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF); 
    177177 
    178178        if (!PackFile_unpack(interp, pf, ptr, length)) { 
    179179            PackFile_destroy(interp, pf); 
     180            Parrot_str_free_cstring(ptr); 
    180181            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_MALFORMED_PACKFILE, 
    181182                                        "Can't unpack packfile."); 
    182183        } 
     
    192193        Parrot_unblock_GC_mark(interp); 
    193194 
    194195        PackFile_destroy(interp, pf); 
     196        Parrot_str_free_cstring(ptr); 
    195197    } 
    196198 
    197199 
     
    250252        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "uuid_type"))) 
    251253            return attrs->uuid_type; 
    252254 
    253         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND, 
    254                        "Packfile: No such integer key \"%s\"", 
    255                        Parrot_string_cstring(interp, key)); 
     255        const char start_buffer[] = "Packfile: No such integer key \""; 
     256        STRING * message = 
     257            Parrot_str_new(interp, start_buffer, sizeof (start_buffer)); 
     258        STRING * const message_end = Parrot_str_new(interp, "\"", 1); 
     259        message = Parrot_str_append(interp, message, key); 
     260        message = Parrot_str_append(interp, message, message_end); 
     261 
     262        PMC * const except = Parrot_ex_build_exception(interp, NULL, 
     263                       EXCEPTION_KEY_NOT_FOUND, message); 
     264 
     265        Parrot_ex_throw_from_c(interp, except); 
    256266    } 
    257267 
    258268/* 
     
    274284        if (!Parrot_str_compare(interp, key, CONST_STRING(interp, "uuid"))) 
    275285            return PARROT_PACKFILE(SELF)->uuid; 
    276286 
    277         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND, 
    278                        "Packfile: No such string key \"%s\"", 
    279                        Parrot_string_cstring(interp, key)); 
     287        const char start_buffer[] = "Packfile: No such string key \""; 
     288        STRING * message = 
     289            Parrot_str_new(interp, start_buffer, sizeof (start_buffer)); 
     290        STRING * const message_end = Parrot_str_new(interp, "\"", 1); 
     291        message = Parrot_str_append(interp, message, key); 
     292        message = Parrot_str_append(interp, message, message_end); 
     293 
     294        PMC * const except = Parrot_ex_build_exception(interp, NULL, 
     295                       EXCEPTION_KEY_NOT_FOUND, message); 
     296 
     297        Parrot_ex_throw_from_c(interp, except); 
    280298    } 
    281299 
    282300 
     
    350368            attrs->uuid_type = value; 
    351369            return; 
    352370        } 
    353         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND, 
    354                        "Packfile: No such integer key \"%s\"", 
    355                        Parrot_string_cstring(interp, key)); 
     371 
     372        const char start_buffer[] = "Packfile: No such integer key \""; 
     373        STRING * message = 
     374            Parrot_str_new(interp, start_buffer, sizeof (start_buffer)); 
     375        STRING * const message_end = Parrot_str_new(interp, "\"", 1); 
     376        message = Parrot_str_append(interp, message, key); 
     377        message = Parrot_str_append(interp, message, message_end); 
     378 
     379        PMC * const except = Parrot_ex_build_exception(interp, NULL, 
     380                       EXCEPTION_KEY_NOT_FOUND, message); 
     381 
     382        Parrot_ex_throw_from_c(interp, except); 
    356383    } 
    357384 
    358385 
     
    394421            return; 
    395422        } 
    396423 
    397         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND, 
    398                        "Packfile: No such string key \"%s\"", 
    399                        Parrot_string_cstring(interp, key)); 
     424        const char start_buffer[] = "Packfile: No such integer key \""; 
     425        STRING * message = 
     426            Parrot_str_new(interp, start_buffer, sizeof (start_buffer)); 
     427        STRING * const message_end = Parrot_str_new(interp, "\"", 1); 
     428        message = Parrot_str_append(interp, message, key); 
     429        message = Parrot_str_append(interp, message, message_end); 
     430 
     431        PMC * const except = Parrot_ex_build_exception(interp, NULL, 
     432                       EXCEPTION_KEY_NOT_FOUND, message); 
     433 
     434        Parrot_ex_throw_from_c(interp, except); 
    400435    } 
    401436 
    402437/* 
  • src/pmc/packfilefixupentry.pmc

     
    100100                PARROT_PACKFILEFIXUPENTRY(SELF); 
    101101        PackFile_FixupEntry                  * entry = 
    102102                mem_gc_allocate_zeroed_typed(INTERP, PackFile_FixupEntry); 
    103  
     103        const char * tempName = Parrot_str_to_cstring(interp, attrs->name); 
    104104        entry->type     = attrs->type; 
    105         entry->name     = strdup(Parrot_string_cstring(interp, attrs->name)); 
     105        entry->name     = strdup(tempName); 
    106106        entry->offset   = attrs->offset; 
     107 
     108        Parrot_str_free_cstring(tempName); 
    107109        return entry; 
    108110    } 
    109111