Ignore:
Timestamp:
Feb 11, 2013, 8:53:47 PM (13 years ago)
Author:
dmik
Message:

Merge icedtea-web v1.3 to trunk.

Location:
trunk/icedtea-web
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/icedtea-web

  • trunk/icedtea-web/plugin/icedteanp/IcedTeaPluginUtils.cc

    r375 r418  
    151151IcedTeaPluginUtilities::JSIDToString(void* id, std::string* result)
    152152{
    153 
    154         char* id_str = (char*) malloc(sizeof(char)*20); // max = long long = 8446744073709551615 == 19 chars
     153        char id_str[NUM_STR_BUFFER_SIZE];
    155154
    156155        if (sizeof(void*) == sizeof(long long))
    157156        {
    158                 sprintf(id_str, "%llu", id);
     157                snprintf(id_str, NUM_STR_BUFFER_SIZE, "%llu", id);
    159158        }
    160159        else
    161160        {
    162                 sprintf(id_str, "%lu", id); // else use long
     161                snprintf(id_str, NUM_STR_BUFFER_SIZE, "%lu", id); // else use long
    163162        }
    164163
     
    166165
    167166        PLUGIN_DEBUG("Converting pointer %p to %s\n", id, id_str);
    168         free(id_str);
    169167}
    170168
     
    262260IcedTeaPluginUtilities::itoa(int i, std::string* result)
    263261{
    264         // largest possible integer is 10 digits long
    265         char* int_str = (char*) malloc(sizeof(char)*11);
    266         sprintf(int_str, "%d", i);
     262        char int_str[NUM_STR_BUFFER_SIZE];
     263        snprintf(int_str, NUM_STR_BUFFER_SIZE, "%d", i);
    267264        result->append(int_str);
    268 
    269         free(int_str);
    270265}
    271266
     
    297292 * @param str The string to split
    298293 * @param The delimiters to split on
    299  * @return A string vector containing the aplit components
     294 * @return A string vector containing the split components
    300295 */
    301296
     
    307302        char* copy;
    308303
    309         // Tokening is done on a copy
     304        // Tokenization is done on a copy
    310305        copy = (char*) malloc (sizeof(char)*strlen(str) + 1);
    311306        strcpy(copy, str);
     
    318313            // Allocation on heap since caller has no way to knowing how much will
    319314            // be needed. Make sure caller cleans up!
    320                 std::string* s = new std::string();
    321                 s->append(tok_ptr);
    322                 v->push_back(s);
    323                 tok_ptr = strtok (NULL, " ");
     315            std::string* s = new std::string();
     316            s->append(tok_ptr);
     317            v->push_back(s);
     318            tok_ptr = strtok (NULL, delim);
    324319        }
     320        free(copy);
    325321
    326322        return v;
     
    376372        ostream << length;
    377373
    378         // UTF-8 characters are 4-bytes max + space + '\0'
    379         char* hex_value = (char*) malloc(sizeof(char)*10);
     374        char hex_value[NUM_STR_BUFFER_SIZE];
    380375
    381376        for (int i = 0; i < str->length(); i++)
    382377        {
    383                 sprintf(hex_value, " %hx", str->at(i));
     378                snprintf(hex_value, NUM_STR_BUFFER_SIZE," %hx", str->at(i));
    384379                ostream << hex_value;
    385380        }
     
    388383        *utf_str = ostream.str();
    389384
    390         free(hex_value);
    391385        PLUGIN_DEBUG("Converted %s to UTF-8 string %s\n", str->c_str(), utf_str->c_str());
    392386}
     
    673667    else if (NPVARIANT_IS_STRING(variant))
    674668    {
    675 #if MOZILLA_VERSION_COLLAPSED < 1090200
    676         PLUGIN_DEBUG("STRING: %s\n", NPVARIANT_TO_STRING(variant).utf8characters);
    677 #else
    678         PLUGIN_DEBUG("STRING: %s\n", NPVARIANT_TO_STRING(variant).UTF8Characters);
    679 #endif
     669        std::string str = IcedTeaPluginUtilities::NPVariantAsString(variant);
     670        PLUGIN_DEBUG("STRING: %s (length=%d)\n", str.c_str(), str.size());
    680671    }
    681672    else
     
    688679IcedTeaPluginUtilities::NPVariantToString(NPVariant variant, std::string* result)
    689680{
    690         char* str = (char*) malloc(sizeof(char)*32); // enough for everything except string
    691 
    692     if (NPVARIANT_IS_VOID(variant))
    693     {
    694         sprintf(str, "%p", variant);
    695     }
    696     else if (NPVARIANT_IS_NULL(variant))
    697     {
    698         sprintf(str, "NULL");
    699     }
    700     else if (NPVARIANT_IS_BOOLEAN(variant))
    701     {
    702         if (NPVARIANT_TO_BOOLEAN(variant))
    703                 sprintf(str, "true");
    704         else
    705                 sprintf(str, "false");
    706     }
    707     else if (NPVARIANT_IS_INT32(variant))
    708     {
    709         sprintf(str, "%d", NPVARIANT_TO_INT32(variant));
    710     }
    711     else if (NPVARIANT_IS_DOUBLE(variant))
    712     {
    713         sprintf(str, "%f", NPVARIANT_TO_DOUBLE(variant));;
    714     }
    715     else if (NPVARIANT_IS_STRING(variant))
    716     {
    717         free(str);
    718 #if MOZILLA_VERSION_COLLAPSED < 1090200
    719         str = (char*) malloc(sizeof(char)*NPVARIANT_TO_STRING(variant).utf8length);
    720         sprintf(str, "%s", NPVARIANT_TO_STRING(variant).utf8characters);
    721 #else
    722         str = (char*) malloc(sizeof(char)*NPVARIANT_TO_STRING(variant).UTF8Length);
    723         sprintf(str, "%s", NPVARIANT_TO_STRING(variant).UTF8Characters);
    724 #endif
    725     }
     681  char conv_str[NUM_STR_BUFFER_SIZE]; // conversion buffer
     682  bool was_string_already = false;
     683
     684  if (NPVARIANT_IS_STRING(variant))
     685  {
     686    result->append(IcedTeaPluginUtilities::NPVariantAsString(variant));
     687    was_string_already = true;
     688  }
     689  else if (NPVARIANT_IS_VOID(variant))
     690  {
     691    snprintf(conv_str, NUM_STR_BUFFER_SIZE, "%p", variant);
     692  }
     693  else if (NPVARIANT_IS_NULL(variant))
     694  {
     695    snprintf(conv_str, NUM_STR_BUFFER_SIZE, "NULL");
     696  }
     697  else if (NPVARIANT_IS_BOOLEAN(variant))
     698  {
     699    if (NPVARIANT_TO_BOOLEAN(variant))
     700      snprintf(conv_str, NUM_STR_BUFFER_SIZE, "true");
    726701    else
    727     {
    728         sprintf(str, "[Object %p]", variant);
    729     }
    730 
    731     result->append(str);
    732     free(str);
     702      snprintf(conv_str, NUM_STR_BUFFER_SIZE, "false");
     703  }
     704  else if (NPVARIANT_IS_INT32(variant))
     705  {
     706    snprintf(conv_str, NUM_STR_BUFFER_SIZE, "%d", NPVARIANT_TO_INT32(variant));
     707  }
     708  else if (NPVARIANT_IS_DOUBLE(variant))
     709  {
     710    snprintf(conv_str, NUM_STR_BUFFER_SIZE, "%f", NPVARIANT_TO_DOUBLE(variant));
     711  }
     712  else
     713  {
     714    snprintf(conv_str, NUM_STR_BUFFER_SIZE, "[Object %p]", variant);
     715  }
     716
     717  if (!was_string_already){
     718    result->append(conv_str);
     719  }
    733720}
    734721
     
    869856    IcedTeaPluginUtilities::printNPVariant(constructor_str);
    870857
    871     std::string constructor_name = std::string();
    872 
    873 #if MOZILLA_VERSION_COLLAPSED < 1090200
    874     constructor_name.append(NPVARIANT_TO_STRING(constructor_str).utf8characters);
    875 #else
    876     constructor_name.append(NPVARIANT_TO_STRING(constructor_str).UTF8Characters);
    877 #endif
     858    std::string constructor_name = IcedTeaPluginUtilities::NPVariantAsString(constructor_str);
    878859
    879860    PLUGIN_DEBUG("Constructor for NPObject is %s\n", constructor_name.c_str());
     
    918899}
    919900
     901/* Copies a variant data type into a C++ string */
     902std::string
     903IcedTeaPluginUtilities::NPVariantAsString(NPVariant variant)
     904{
     905#if MOZILLA_VERSION_COLLAPSED < 1090200
     906  return std::string(
     907    NPVARIANT_TO_STRING(variant).utf8characters,
     908    NPVARIANT_TO_STRING(variant).utf8length);
     909#else
     910  return std::string(
     911    NPVARIANT_TO_STRING(variant).UTF8Characters,
     912    NPVARIANT_TO_STRING(variant).UTF8Length);
     913#endif
     914}
    920915
    921916/**
     
    10811076                PLUGIN_DEBUG("Error: Unable to initialize message queue mutex: %d\n", ret);
    10821077
    1083         PLUGIN_DEBUG("Mutexs %p and %p initialized\n", &subscriber_mutex, &msg_queue_mutex);
     1078        PLUGIN_DEBUG("Mutexes %p and %p initialized\n", &subscriber_mutex, &msg_queue_mutex);
    10841079}
    10851080
     
    11451140MessageBus::post(const char* message)
    11461141{
    1147         char* msg = (char*) malloc(sizeof(char)*strlen(message) + 1);
    11481142        bool message_consumed = false;
    1149 
    1150         // consumer frees this memory
    1151         strcpy(msg, message);
    11521143
    11531144        PLUGIN_DEBUG("Trying to lock %p...\n", &msg_queue_mutex);
    11541145        pthread_mutex_lock(&subscriber_mutex);
    11551146
    1156     PLUGIN_DEBUG("Message %s received on bus. Notifying subscribers.\n", msg);
     1147    PLUGIN_DEBUG("Message %s received on bus. Notifying subscribers.\n", message);
    11571148
    11581149    std::list<BusSubscriber*>::const_iterator i;
    11591150    for( i = subscribers.begin(); i != subscribers.end() && !message_consumed; ++i ) {
    1160         PLUGIN_DEBUG("Notifying subscriber %p of %s\n", *i, msg);
    1161         message_consumed = ((BusSubscriber*) *i)->newMessageOnBus(msg);
     1151        PLUGIN_DEBUG("Notifying subscriber %p of %s\n", *i, message);
     1152        message_consumed = ((BusSubscriber*) *i)->newMessageOnBus(message);
    11621153    }
    11631154
     
    11651156
    11661157    if (!message_consumed)
    1167         PLUGIN_DEBUG("Warning: No consumer found for message %s\n", msg);
     1158        PLUGIN_DEBUG("Warning: No consumer found for message %s\n", message);
    11681159
    11691160    PLUGIN_DEBUG("%p unlocked...\n", &msg_queue_mutex);
Note: See TracChangeset for help on using the changeset viewer.