]> git.sesse.net Git - vlc/commitdiff
- formating
authorDamien Fouilleul <damienf@videolan.org>
Mon, 28 Aug 2006 18:38:33 +0000 (18:38 +0000)
committerDamien Fouilleul <damienf@videolan.org>
Mon, 28 Aug 2006 18:38:33 +0000 (18:38 +0000)
- javascript fixes

mozilla/control/npolibvlc.cpp
mozilla/control/npolibvlc.h
mozilla/control/nporuntime.cpp
mozilla/control/nporuntime.h
mozilla/control/npovlc.cpp
mozilla/control/npovlc.h

index 3d712817b84341c9d1603da94a5f4b530c29ad80..1f9e06406bbd29c68d3c3c884e1e81b819185c06 100755 (executable)
@@ -79,21 +79,21 @@ enum LibvlcRootNPObjectPropertyIds
 \r
 const int LibvlcRootNPObject::propertyCount = sizeof(LibvlcRootNPObject::propertyNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcRootNPObject::getProperty(int index, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcRootNPObject::getProperty(int index, NPVariant &result)\r
 {\r
     switch( index )\r
     {\r
         case ID_audio:\r
-            OBJECT_TO_NPVARIANT(NPN_RetainObject(audioObj), *result);\r
+            OBJECT_TO_NPVARIANT(NPN_RetainObject(audioObj), result);\r
             return INVOKERESULT_NO_ERROR;\r
         case ID_input:\r
-            OBJECT_TO_NPVARIANT(NPN_RetainObject(inputObj), *result);\r
+            OBJECT_TO_NPVARIANT(NPN_RetainObject(inputObj), result);\r
             return INVOKERESULT_NO_ERROR;\r
         case ID_playlist:\r
-            OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistObj), *result);\r
+            OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistObj), result);\r
             return INVOKERESULT_NO_ERROR;\r
         case ID_video:\r
-            OBJECT_TO_NPVARIANT(NPN_RetainObject(videoObj), *result);\r
+            OBJECT_TO_NPVARIANT(NPN_RetainObject(videoObj), result);\r
             return INVOKERESULT_NO_ERROR;\r
     }\r
     return INVOKERESULT_GENERIC_ERROR;\r
@@ -124,7 +124,7 @@ enum LibvlcAudioNPObjectPropertyIds
 \r
 const int LibvlcAudioNPObject::propertyCount = sizeof(LibvlcAudioNPObject::propertyNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -143,7 +143,7 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                BOOLEAN_TO_NPVARIANT(muted, *result);\r
+                BOOLEAN_TO_NPVARIANT(muted, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_volume:\r
@@ -155,7 +155,7 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                INT32_TO_NPVARIANT(volume, *result);\r
+                INT32_TO_NPVARIANT(volume, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
         }\r
@@ -163,7 +163,7 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::getProperty(int index, NPVari
     return INVOKERESULT_GENERIC_ERROR;\r
 }\r
 \r
-RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const NPVariant *value)\r
+RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const NPVariant &value)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -174,10 +174,10 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const
         switch( index )\r
         {\r
             case ID_mute:\r
-                if( NPVARIANT_IS_BOOLEAN(*value) )\r
+                if( NPVARIANT_IS_BOOLEAN(value) )\r
                 {\r
                     libvlc_audio_set_mute(p_plugin->getVLC(),\r
-                                          NPVARIANT_TO_BOOLEAN(*value), &ex);\r
+                                          NPVARIANT_TO_BOOLEAN(value), &ex);\r
                     if( libvlc_exception_raised(&ex) )\r
                     {\r
                         NPN_SetException(this, libvlc_exception_get_message(&ex));\r
@@ -188,10 +188,10 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::setProperty(int index, const
                 }\r
                 return INVOKERESULT_INVALID_VALUE;\r
             case ID_volume:\r
-                if( isNumberValue(*value) )\r
+                if( isNumberValue(value) )\r
                 {\r
                     libvlc_audio_set_volume(p_plugin->getVLC(),\r
-                                            numberValue(*value), &ex);\r
+                                            numberValue(value), &ex);\r
                     if( libvlc_exception_raised(&ex) )\r
                     {\r
                         NPN_SetException(this, libvlc_exception_get_message(&ex));\r
@@ -218,7 +218,7 @@ enum LibvlcAudioNPObjectMethodIds
 \r
 const int LibvlcAudioNPObject::methodCount = sizeof(LibvlcAudioNPObject::methodNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -240,7 +240,7 @@ RuntimeNPObject::InvokeResult LibvlcAudioNPObject::invoke(int index, const NPVar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -276,7 +276,7 @@ enum LibvlcInputNPObjectPropertyIds
 \r
 const int LibvlcInputNPObject::propertyCount = sizeof(LibvlcInputNPObject::propertyNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -304,7 +304,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                DOUBLE_TO_NPVARIANT(val, *result);\r
+                DOUBLE_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_position:\r
@@ -317,7 +317,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                DOUBLE_TO_NPVARIANT(val, *result);\r
+                DOUBLE_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_time:\r
@@ -330,7 +330,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                DOUBLE_TO_NPVARIANT(val, *result);\r
+                DOUBLE_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_fps:\r
@@ -343,7 +343,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                DOUBLE_TO_NPVARIANT(val, *result);\r
+                DOUBLE_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_hasvout:\r
@@ -356,7 +356,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                BOOLEAN_TO_NPVARIANT(val, *result);\r
+                BOOLEAN_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
         }\r
@@ -365,7 +365,7 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::getProperty(int index, NPVari
     return INVOKERESULT_GENERIC_ERROR;\r
 }\r
 \r
-RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const NPVariant *value)\r
+RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const NPVariant &value)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -385,13 +385,13 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const
         {\r
             case ID_position:\r
             {\r
-                if( ! NPVARIANT_IS_DOUBLE(*value) )\r
+                if( ! NPVARIANT_IS_DOUBLE(value) )\r
                 {\r
                     libvlc_input_free(p_input);\r
                     return INVOKERESULT_INVALID_VALUE;\r
                 }\r
 \r
-                float val = (float)NPVARIANT_TO_DOUBLE(*value);\r
+                float val = (float)NPVARIANT_TO_DOUBLE(value);\r
                 libvlc_input_set_position(p_input, val, &ex);\r
                 libvlc_input_free(p_input);\r
                 if( libvlc_exception_raised(&ex) )\r
@@ -405,10 +405,10 @@ RuntimeNPObject::InvokeResult LibvlcInputNPObject::setProperty(int index, const
             case ID_time:\r
             {\r
                 vlc_int64_t val;\r
-                if( NPVARIANT_IS_INT32(*value) )\r
-                    val = (vlc_int64_t)NPVARIANT_TO_INT32(*value);\r
-                else if( NPVARIANT_IS_DOUBLE(*value) )\r
-                    val = (vlc_int64_t)NPVARIANT_TO_DOUBLE(*value);\r
+                if( NPVARIANT_IS_INT32(value) )\r
+                    val = (vlc_int64_t)NPVARIANT_TO_INT32(value);\r
+                else if( NPVARIANT_IS_DOUBLE(value) )\r
+                    val = (vlc_int64_t)NPVARIANT_TO_DOUBLE(value);\r
                 else\r
                 {\r
                     libvlc_input_free(p_input);\r
@@ -457,7 +457,7 @@ enum LibvlcPlaylistNPObjectPropertyIds
 \r
 const int LibvlcPlaylistNPObject::propertyCount = sizeof(LibvlcPlaylistNPObject::propertyNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -476,7 +476,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPV
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                INT32_TO_NPVARIANT(val, *result);\r
+                INT32_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_isplaying:\r
@@ -488,7 +488,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPV
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                BOOLEAN_TO_NPVARIANT(val, *result);\r
+                BOOLEAN_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
         }\r
@@ -522,7 +522,7 @@ enum LibvlcPlaylistNPObjectMethodIds
 \r
 const int LibvlcPlaylistNPObject::methodCount = sizeof(LibvlcPlaylistNPObject::methodNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -533,39 +533,91 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
         switch( index )\r
         {\r
             case ID_add:\r
-                if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )\r
+            {\r
+                char *url = NULL;\r
+                char *name = NULL;\r
+                int i_options = 0;\r
+                char** ppsz_options = NULL;\r
+\r
+                if( (argCount < 1) || (argCount > 3) )\r
+                    return INVOKERESULT_NO_SUCH_METHOD;\r
+\r
+                // grab URL\r
+                if( NPVARIANT_IS_STRING(args[0]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
-\r
                         char *url = p_plugin->getAbsoluteURL(s);\r
                         delete s;\r
                         if( ! url )\r
                             // what happened ?\r
                             return INVOKERESULT_GENERIC_ERROR;\r
-                             \r
-                        int item = libvlc_playlist_add(p_plugin->getVLC(), url, NULL, &ex);\r
-                        free(url);\r
-                        if( libvlc_exception_raised(&ex) )\r
-                        {\r
-                            NPN_SetException(this, libvlc_exception_get_message(&ex));\r
-                            libvlc_exception_clear(&ex);\r
-                            return INVOKERESULT_GENERIC_ERROR;\r
-                        }\r
-                        else\r
-                        {\r
-                            INT32_TO_NPVARIANT(item, *result);\r
-                            return INVOKERESULT_NO_ERROR;\r
-                        }\r
                     }\r
                     else\r
                         return INVOKERESULT_OUT_OF_MEMORY;\r
                 }\r
-                return INVOKERESULT_NO_SUCH_METHOD;\r
+                else\r
+                    return INVOKERESULT_NO_SUCH_METHOD;\r
+\r
+                // grab name if available\r
+                if( argCount > 1 )\r
+                {\r
+                    if( NPVARIANT_IS_NULL(args[1]) )\r
+                    {\r
+                        // do nothing\r
+                    }\r
+                    else if( NPVARIANT_IS_STRING(args[1]) )\r
+                    {\r
+                        name = stringValue(NPVARIANT_TO_STRING(args[0]));\r
+                    }\r
+                    else\r
+                        return INVOKERESULT_NO_SUCH_METHOD;\r
+                }\r
+\r
+                // grab options if available\r
+                if( argCount > 2 )\r
+                {\r
+                    if( NPVARIANT_IS_NULL(args[2]) )\r
+                    {\r
+                        // do nothing\r
+                    }\r
+                    else if( NPVARIANT_IS_STRING(args[2]) )\r
+                    {\r
+                        parseOptions(NPVARIANT_TO_STRING(args[0]), &i_options, &ppsz_options);\r
+\r
+                    }\r
+                    else if( NPVARIANT_IS_OBJECT(args[3]) )\r
+                    {\r
+                        parseOptions(NPVARIANT_TO_OBJECT(args[0]), &i_options, &ppsz_options);\r
+                    }\r
+                }\r
+\r
+                int item = libvlc_playlist_add_extended(p_plugin->getVLC(),\r
+                                                        url,\r
+                                                        name,\r
+                                                        i_options,\r
+                                                        const_cast<const char **>(ppsz_options),\r
+                                                        &ex);\r
+                delete url;\r
+                delete name;\r
+                for( int i=0; i< i_options; ++i )\r
+                {\r
+                    delete ppsz_options[i];\r
+                }\r
+                delete ppsz_options;\r
+                if( libvlc_exception_raised(&ex) )\r
+                {\r
+                    NPN_SetException(this, libvlc_exception_get_message(&ex));\r
+                    libvlc_exception_clear(&ex);\r
+                    return INVOKERESULT_GENERIC_ERROR;\r
+                }\r
+                else\r
+                {\r
+                    INT32_TO_NPVARIANT(item, result);\r
+                    return INVOKERESULT_NO_ERROR;\r
+                }\r
+            }\r
             case ID_play:\r
                 if( argCount == 0 )\r
                 {\r
@@ -578,7 +630,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -595,7 +647,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -612,7 +664,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -629,7 +681,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -646,7 +698,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -663,7 +715,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -680,7 +732,7 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -691,6 +743,136 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::invoke(int index, const NP
     }\r
     return INVOKERESULT_GENERIC_ERROR;\r
 }\r
\r
+void LibvlcPlaylistNPObject::parseOptions(const NPString &s, int *i_options, char*** ppsz_options)\r
+{\r
+    if( s.utf8length )\r
+    {\r
+        char *val = stringValue(s);\r
+        if( val )\r
+        {\r
+            long capacity = 16;\r
+            char **options = (char **)malloc(capacity*sizeof(char *));\r
+            if( options )\r
+            {\r
+                int nOptions = 0;\r
+\r
+                char *end = val + s.utf8length;\r
+                while( val < end )\r
+                {\r
+                    // skip leading blanks\r
+                    while( (val < end)\r
+                        && ((*val == ' ' ) || (*val != '\t')) )\r
+                        ++val;\r
+\r
+                    char *start = val;\r
+                    // skip till we get a blank character\r
+                    while( (val < end)\r
+                        && (*val != ' ' )\r
+                        && (*val != '\t') )\r
+                    {\r
+                        char c = *(val++);\r
+                        if( ('\'' == c) || ('"' == c) )\r
+                        {\r
+                            // skip till end of string\r
+                            while( (val < end) && (*(val++) != c ) );\r
+                        }\r
+                    }\r
+\r
+                    if( val > start )\r
+                    {\r
+                        if( nOptions == capacity )\r
+                        {\r
+                            capacity += 16;\r
+                            char **moreOptions = (char **)realloc(options, capacity*sizeof(char*)); \r
+                            if( ! moreOptions )\r
+                            {\r
+                                /* failed to allocate more memory */\r
+                                delete val;\r
+                                /* return what we got so far */\r
+                                *i_options = nOptions;\r
+                                *ppsz_options = options;\r
+                                break;\r
+                            }\r
+                            options = moreOptions;\r
+                        }\r
+                        *(val++) = '\0';\r
+                        options[nOptions++] = strdup(start);\r
+                    }\r
+                    else\r
+                        // must be end of string\r
+                        break;\r
+                }\r
+                *i_options = nOptions;\r
+                *ppsz_options = options;\r
+            }\r
+            delete val;\r
+        }\r
+    }\r
+}\r
+\r
+void LibvlcPlaylistNPObject::parseOptions(NPObject *obj, int *i_options, char*** ppsz_options)\r
+{\r
+    NPIdentifier name = NPN_GetStringIdentifier("length");\r
+    /* we are expecting to have a Javascript Array object */\r
+    if( NPN_HasProperty(_instance, obj, name) )\r
+    {\r
+        NPVariant value;\r
+        if( NPN_GetProperty(_instance, obj, name, &value) )\r
+        {\r
+            int count = numberValue(value);\r
+            NPN_ReleaseVariantValue(&value);\r
+            if( count )\r
+            {\r
+                long capacity = 16;\r
+                char **options = (char **)malloc(capacity*sizeof(char *));\r
+                if( options )\r
+                {\r
+                    int nOptions = 0;\r
+\r
+                    while( nOptions < count )\r
+                    {\r
+                        name = NPN_GetIntIdentifier(nOptions);\r
+                        if( ! NPN_HasProperty(_instance, obj, name) )\r
+                            /* return what we got so far */\r
+                            break;\r
+\r
+                        if( ! NPN_GetProperty(_instance, obj, name, &value) )\r
+                            /* return what we got so far */\r
+                            break;\r
+\r
+                        if( ! NPVARIANT_IS_STRING(value) )\r
+                        {\r
+                            /* return what we got so far */\r
+                            NPN_ReleaseVariantValue(&value);\r
+                            break;\r
+                        }\r
+\r
+                        if( nOptions == capacity )\r
+                        {\r
+                            capacity += 16;\r
+                            char **moreOptions = (char **)realloc(options, capacity*sizeof(char*)); \r
+                            if( ! moreOptions )\r
+                            {\r
+                                /* failed to allocate more memory */\r
+                                NPN_ReleaseVariantValue(&value);\r
+                                /* return what we got so far */\r
+                                *i_options = nOptions;\r
+                                *ppsz_options = options;\r
+                                break;\r
+                            }\r
+                            options = moreOptions;\r
+                        }\r
+\r
+                        options[nOptions++] = stringValue(value);\r
+                    }\r
+                    *i_options = nOptions;\r
+                    *ppsz_options = options;\r
+                }\r
+            }\r
+        }\r
+    }\r
+}\r
 \r
 /*\r
 ** implementation of libvlc video object\r
@@ -712,7 +894,7 @@ enum LibvlcVideoNPObjectPropertyIds
 \r
 const int LibvlcVideoNPObject::propertyCount = sizeof(LibvlcVideoNPObject::propertyNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -740,7 +922,7 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                BOOLEAN_TO_NPVARIANT(val, *result);\r
+                BOOLEAN_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_height:\r
@@ -753,7 +935,7 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                INT32_TO_NPVARIANT(val, *result);\r
+                INT32_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
             case ID_width:\r
@@ -766,7 +948,7 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVari
                     libvlc_exception_clear(&ex);\r
                     return INVOKERESULT_GENERIC_ERROR;\r
                 }\r
-                INT32_TO_NPVARIANT(val, *result);\r
+                INT32_TO_NPVARIANT(val, result);\r
                 return INVOKERESULT_NO_ERROR;\r
             }\r
         }\r
@@ -775,7 +957,7 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::getProperty(int index, NPVari
     return INVOKERESULT_GENERIC_ERROR;\r
 }\r
 \r
-RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const NPVariant *value)\r
+RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const NPVariant &value)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -795,13 +977,13 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::setProperty(int index, const
         {\r
             case ID_fullscreen:\r
             {\r
-                if( ! NPVARIANT_IS_BOOLEAN(*value) )\r
+                if( ! NPVARIANT_IS_BOOLEAN(value) )\r
                 {\r
                     libvlc_input_free(p_input);\r
                     return INVOKERESULT_INVALID_VALUE;\r
                 }\r
 \r
-                int val = NPVARIANT_TO_BOOLEAN(*value);\r
+                int val = NPVARIANT_TO_BOOLEAN(value);\r
                 libvlc_set_fullscreen(p_input, val, &ex);\r
                 libvlc_input_free(p_input);\r
                 if( libvlc_exception_raised(&ex) )\r
@@ -830,7 +1012,7 @@ enum LibvlcVideoNPObjectMethodIds
 \r
 const int LibvlcVideoNPObject::methodCount = sizeof(LibvlcVideoNPObject::methodNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)\r
+RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -861,7 +1043,7 @@ RuntimeNPObject::InvokeResult LibvlcVideoNPObject::invoke(int index, const NPVar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
index e0346fcf39db545133c2c54eeb7f4010ca4980be..b737aca84765e7989c9d1b3bf1d3ae49011ce8a0 100755 (executable)
@@ -39,7 +39,7 @@ protected:
     static const int propertyCount;\r
     static const NPUTF8 * const propertyNames[];\r
 \r
-    InvokeResult getProperty(int index, NPVariant *result);\r
+    InvokeResult getProperty(int index, NPVariant &result);\r
 \r
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
@@ -63,13 +63,13 @@ protected:
     static const int propertyCount;\r
     static const NPUTF8 * const propertyNames[];\r
 \r
-    InvokeResult getProperty(int index, NPVariant *result);\r
-    InvokeResult setProperty(int index, const NPVariant *value);\r
+    InvokeResult getProperty(int index, NPVariant &result);\r
+    InvokeResult setProperty(int index, const NPVariant &value);\r
 \r
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
 \r
-    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result);\r
+    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);\r
 };\r
 \r
 class LibvlcInputNPObject: public RuntimeNPObject\r
@@ -86,8 +86,8 @@ protected:
     static const int propertyCount;\r
     static const NPUTF8 * const propertyNames[];\r
 \r
-    InvokeResult getProperty(int index, NPVariant *result);\r
-    InvokeResult setProperty(int index, const NPVariant *value);\r
+    InvokeResult getProperty(int index, NPVariant &result);\r
+    InvokeResult setProperty(int index, const NPVariant &value);\r
 \r
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
@@ -106,12 +106,15 @@ protected:
     static const int propertyCount;\r
     static const NPUTF8 * const propertyNames[];\r
 \r
-    InvokeResult getProperty(int index, NPVariant *result);\r
+    InvokeResult getProperty(int index, NPVariant &result);\r
 \r
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
 \r
-    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result);\r
+    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);\r
+\r
+    void parseOptions(const NPString &s, int *i_options, char*** ppsz_options);\r
+    void parseOptions(NPObject *obj, int *i_options, char*** ppsz_options);\r
 };\r
 \r
 class LibvlcVideoNPObject: public RuntimeNPObject\r
@@ -127,13 +130,13 @@ protected:
     static const int propertyCount;\r
     static const NPUTF8 * const propertyNames[];\r
 \r
-    InvokeResult getProperty(int index, NPVariant *result);\r
-    InvokeResult setProperty(int index, const NPVariant *value);\r
+    InvokeResult getProperty(int index, NPVariant &result);\r
+    InvokeResult setProperty(int index, const NPVariant &value);\r
 \r
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
 \r
-    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result);\r
+    InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);\r
 \r
 };\r
 \r
index 831cf10d08b0d87a38a52d91ff2c4557145eba71..20195987b0b66dbb75c350e6c55a1dfbc55ec6ca 100755 (executable)
 #include "nporuntime.h"
 #include "vlcplugin.h"
 
-RuntimeNPObject::InvokeResult RuntimeNPObject::getProperty(int index, NPVariant *result)
+char* RuntimeNPObject::stringValue(const NPString &s)
+{
+    NPUTF8 *val = new NPUTF8[s.utf8length+1];
+    if( val )
+    {
+        strncpy(val, s.utf8characters, s.utf8length);
+        val[s.utf8length] = '\0';
+    }
+    return val;
+}
+
+char* RuntimeNPObject::stringValue(const NPVariant &v)
+{
+    char *s = NULL;
+    if( NPVARIANT_IS_STRING(v) ) 
+    {
+        return stringValue(NPVARIANT_TO_STRING(v));
+    }
+    return s;
+}
+
+RuntimeNPObject::InvokeResult RuntimeNPObject::getProperty(int index, NPVariant &result)
 {
     /* default behaviour */
     return INVOKERESULT_GENERIC_ERROR;
 }
 
-RuntimeNPObject::InvokeResult RuntimeNPObject::setProperty(int index, const NPVariant *value)
+RuntimeNPObject::InvokeResult RuntimeNPObject::setProperty(int index, const NPVariant &value)
 {
     /* default behaviour */
     return INVOKERESULT_GENERIC_ERROR;
@@ -53,16 +74,16 @@ RuntimeNPObject::InvokeResult RuntimeNPObject::removeProperty(int index)
     return INVOKERESULT_GENERIC_ERROR;
 }
 
-RuntimeNPObject::InvokeResult RuntimeNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)
+RuntimeNPObject::InvokeResult RuntimeNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)
 {
     /* default beahviour */
     return INVOKERESULT_GENERIC_ERROR;
 }
 
-RuntimeNPObject::InvokeResult RuntimeNPObject::invokeDefault(const NPVariant *args, uint32_t argCount, NPVariant *result)
+RuntimeNPObject::InvokeResult RuntimeNPObject::invokeDefault(const NPVariant *args, uint32_t argCount, NPVariant &result)
 {
     /* return void */
-    VOID_TO_NPVARIANT(*result);
+    VOID_TO_NPVARIANT(result);
     return INVOKERESULT_NO_ERROR;
 }
 
index 1d6237cccc55a74dd6a9c4f446c0e533ecc24f39..5ad3dbeffa9f2358584bbb74e1e223e7a21fdc6c 100755 (executable)
@@ -52,6 +52,9 @@ public:
         }
     };
 
+    static char* stringValue(const NPString &v);
+    static char* stringValue(const NPVariant &v);
+
     RuntimeNPObject(NPP instance, const NPClass *aClass) :
         _instance(instance)
     {
@@ -88,11 +91,11 @@ protected:
                                                     uint32_t argCount,
                                                     NPVariant *result);
 
-    virtual InvokeResult getProperty(int index, NPVariant *result);
-    virtual InvokeResult setProperty(int index, const NPVariant *value);
+    virtual InvokeResult getProperty(int index, NPVariant &result);
+    virtual InvokeResult setProperty(int index, const NPVariant &value);
     virtual InvokeResult removeProperty(int index);
-    virtual InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result);
-    virtual InvokeResult invokeDefault(const NPVariant *args, uint32_t argCount, NPVariant *result);
+    virtual InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);
+    virtual InvokeResult invokeDefault(const NPVariant *args, uint32_t argCount, NPVariant &result);
 
     bool returnInvokeResult(InvokeResult result);
 
@@ -162,7 +165,7 @@ static bool RuntimeNPClassGetProperty(NPObject *npobj, NPIdentifier name, NPVari
     if( index != -1 )
     {
         RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
-        return vObj->returnInvokeResult(vObj->getProperty(index, result));
+        return vObj->returnInvokeResult(vObj->getProperty(index, *result));
     }
     return false;
 }
@@ -175,7 +178,7 @@ static bool RuntimeNPClassSetProperty(NPObject *npobj, NPIdentifier name, const
     if( index != -1 )
     {
         RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
-        return vObj->returnInvokeResult(vObj->setProperty(index, value));
+        return vObj->returnInvokeResult(vObj->setProperty(index, *value));
     }
     return false;
 }
@@ -203,7 +206,7 @@ static bool RuntimeNPClassInvoke(NPObject *npobj, NPIdentifier name,
     if( index != -1 )
     {
         RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
-        return vObj->returnInvokeResult(vObj->invoke(index, args, argCount, result));
+        return vObj->returnInvokeResult(vObj->invoke(index, args, argCount, *result));
 
     }
     return false;
@@ -216,7 +219,7 @@ static bool RuntimeNPClassInvokeDefault(NPObject *npobj,
                                            NPVariant *result)
 {
     RuntimeNPObject *vObj = static_cast<RuntimeNPObject *>(npobj);
-    return vObj->returnInvokeResult(vObj->invokeDefault(args, argCount, result));
+    return vObj->returnInvokeResult(vObj->invokeDefault(args, argCount, *result));
 }
 
 template<class T>
index e48000742a9d1268d34c3c3080dbf2a188d3ce94..a3ec13c0adfbe144962431c25ec45166ab1eb8f8 100755 (executable)
@@ -102,7 +102,7 @@ enum VlcNPObjectMethodIds
 \r
 const int VlcNPObject::methodCount = sizeof(VlcNPObject::methodNames)/sizeof(NPUTF8 *);\r
 \r
-RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result)\r
+RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result)\r
 {\r
     VlcPlugin *p_plugin = reinterpret_cast<VlcPlugin *>(_instance->pdata);\r
     if( p_plugin )\r
@@ -124,7 +124,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -141,7 +141,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -158,7 +158,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -179,7 +179,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                         }\r
                         else\r
                         {\r
-                            VOID_TO_NPVARIANT(*result);\r
+                            VOID_TO_NPVARIANT(result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                     }\r
@@ -207,7 +207,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -224,7 +224,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        INT32_TO_NPVARIANT(val, *result);\r
+                        INT32_TO_NPVARIANT(val, result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -241,7 +241,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -249,18 +249,15 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
             case ID_get_int_variable:\r
                 if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
                         if( VLC_SUCCESS == VLC_VariableGet(vlc_id, s, &val) )\r
                         {\r
                             delete s;\r
-                            INT32_TO_NPVARIANT(val.i_int, *result);\r
+                            INT32_TO_NPVARIANT(val.i_int, result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                         else\r
@@ -278,19 +275,16 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     && NPVARIANT_IS_STRING(args[0])\r
                     && isNumberValue(args[1]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
                         val.i_int = numberValue(args[1]);\r
                         if( VLC_SUCCESS == VLC_VariableSet(vlc_id, s, val) )\r
                         {\r
                             delete s;\r
-                            VOID_TO_NPVARIANT(*result);\r
+                            VOID_TO_NPVARIANT(result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                         else\r
@@ -306,18 +300,15 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
             case ID_get_bool_variable:\r
                 if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
                         if( VLC_SUCCESS == VLC_VariableGet(vlc_id, s, &val) )\r
                         {\r
                             delete s;\r
-                            BOOLEAN_TO_NPVARIANT(val.b_bool, *result);\r
+                            BOOLEAN_TO_NPVARIANT(val.b_bool, result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                         else\r
@@ -335,19 +326,16 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     && NPVARIANT_IS_STRING(args[0])\r
                     && NPVARIANT_IS_BOOLEAN(args[1]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
                         val.b_bool = NPVARIANT_TO_BOOLEAN(args[1]);\r
                         if( VLC_SUCCESS == VLC_VariableSet(vlc_id, s, val) )\r
                         {\r
                             delete s;\r
-                            VOID_TO_NPVARIANT(*result);\r
+                            VOID_TO_NPVARIANT(result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                         else\r
@@ -363,14 +351,11 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
             case ID_get_str_variable:\r
                 if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
                         if( VLC_SUCCESS == VLC_VariableGet(vlc_id, s, &val) )\r
                         {\r
                             delete s;\r
@@ -381,7 +366,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                                 if( retval )\r
                                 {\r
                                     memcpy(retval, val.psz_string, len);\r
-                                    STRINGN_TO_NPVARIANT(retval, len, *result);\r
+                                    STRINGN_TO_NPVARIANT(retval, len, result);\r
                                     free(val.psz_string);\r
                                     return INVOKERESULT_NO_ERROR;\r
                                 }\r
@@ -393,7 +378,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                             else\r
                             {\r
                                 /* null string */\r
-                                STRINGN_TO_NPVARIANT(NULL, 0, *result);\r
+                                STRINGN_TO_NPVARIANT(NULL, 0, result);\r
                                 return INVOKERESULT_NO_ERROR;\r
                             }\r
                         }\r
@@ -412,25 +397,19 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     && NPVARIANT_IS_STRING(args[0])\r
                     && NPVARIANT_IS_STRING(args[1]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
                         int vlc_id = libvlc_get_vlc_id(p_plugin->getVLC());\r
                         vlc_value_t val;\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
-                        const NPString &v = NPVARIANT_TO_STRING(args[1]);\r
-                        val.psz_string = new NPUTF8[v.utf8length+1];\r
+                        val.psz_string = stringValue(NPVARIANT_TO_STRING(args[1]));\r
                         if( val.psz_string )\r
                         {\r
-                            strncpy(val.psz_string, v.utf8characters, v.utf8length);\r
-                            val.psz_string[v.utf8length] = '\0';\r
                             if( VLC_SUCCESS == VLC_VariableSet(vlc_id, s, val) )\r
                             {\r
                                 delete s;\r
                                 delete val.psz_string;\r
-                                VOID_TO_NPVARIANT(*result);\r
+                                VOID_TO_NPVARIANT(result);\r
                                 return INVOKERESULT_NO_ERROR;\r
                             }\r
                             else\r
@@ -462,7 +441,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -470,13 +449,9 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
             case ID_add_item:\r
                 if( (argCount == 1) && NPVARIANT_IS_STRING(args[0]) )\r
                 {\r
-                    const NPString &name = NPVARIANT_TO_STRING(args[0]);\r
-                    NPUTF8 *s = new NPUTF8[name.utf8length+1];\r
+                    char *s = stringValue(NPVARIANT_TO_STRING(args[0]));\r
                     if( s )\r
                     {\r
-                        strncpy(s, name.utf8characters, name.utf8length);\r
-                        s[name.utf8length] = '\0';\r
-\r
                         char *url = p_plugin->getAbsoluteURL(s);\r
                         delete s;\r
                         if( ! url )\r
@@ -493,7 +468,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                         }\r
                         else\r
                         {\r
-                            INT32_TO_NPVARIANT(item, *result);\r
+                            INT32_TO_NPVARIANT(item, result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                     }\r
@@ -513,7 +488,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -530,7 +505,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -547,7 +522,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                     }\r
                     else\r
                     {\r
-                        BOOLEAN_TO_NPVARIANT(isplaying, *result);\r
+                        BOOLEAN_TO_NPVARIANT(isplaying, result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                 }\r
@@ -568,7 +543,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                         }\r
                         else\r
                         {\r
-                            INT32_TO_NPVARIANT((uint32_t)(val/1000LL), *result);\r
+                            INT32_TO_NPVARIANT((uint32_t)(val/1000LL), result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                     }\r
@@ -600,7 +575,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                         }\r
                         else\r
                         {\r
-                            DOUBLE_TO_NPVARIANT((double)val, *result);\r
+                            DOUBLE_TO_NPVARIANT((double)val, result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                     }\r
@@ -632,7 +607,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                         }\r
                         else\r
                         {\r
-                            DOUBLE_TO_NPVARIANT((uint32_t)(val/1000LL), *result);\r
+                            DOUBLE_TO_NPVARIANT((uint32_t)(val/1000LL), result);\r
                             return INVOKERESULT_NO_ERROR;\r
                         }\r
                     }\r
@@ -680,7 +655,7 @@ RuntimeNPObject::InvokeResult VlcNPObject::invoke(int index, const NPVariant *ar
                             libvlc_exception_clear(&ex);\r
                             return INVOKERESULT_GENERIC_ERROR;\r
                         }\r
-                        VOID_TO_NPVARIANT(*result);\r
+                        VOID_TO_NPVARIANT(result);\r
                         return INVOKERESULT_NO_ERROR;\r
                     }\r
                     else\r
index 1fee65a3fd492580da40da9a050a983591d48773..82b0463cb99e90a09a4bdd83dd11d5de31675de3 100755 (executable)
@@ -43,6 +43,6 @@ protected:
     static const int methodCount;\r
     static const NPUTF8 * const methodNames[];\r
 \r
-    virtual InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant *result);\r
+    virtual InvokeResult invoke(int index, const NPVariant *args, uint32_t argCount, NPVariant &result);\r
 };\r
 \r