<feed xmlns='http://www.w3.org/2005/Atom'>
<title>viewer.git/indra/llcommon/llsdutil.h, branch cef_147</title>
<subtitle>Megapahit's fork of the Second Life viewer.
</subtitle>
<id>https://megapahit.org/viewer.git/atom?h=cef_147</id>
<link rel='self' href='https://megapahit.org/viewer.git/atom?h=cef_147'/>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/'/>
<updated>2025-05-29T04:35:27Z</updated>
<entry>
<title>Merge branch 'main' into 2025.05</title>
<updated>2025-05-29T04:35:27Z</updated>
<author>
<name>Erik Kundiman</name>
<email>erik@megapahit.org</email>
</author>
<published>2025-05-29T04:35:27Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=d046d7e0e1e3ccbffb42d22fe52aa73d0c170b8e'/>
<id>urn:sha1:d046d7e0e1e3ccbffb42d22fe52aa73d0c170b8e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>#4000 Cherry pick inventory LEAP functions from develop branch</title>
<updated>2025-05-20T17:40:04Z</updated>
<author>
<name>Maxim Nikolenko</name>
<email>maximnproductengine@lindenlab.com</email>
</author>
<published>2025-05-20T17:40:04Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=2cbff073edad0bb31d2a025b888a9fb2e90fe2cf'/>
<id>urn:sha1:2cbff073edad0bb31d2a025b888a9fb2e90fe2cf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>#3857 second batch of new or updated LEAP functions</title>
<updated>2025-04-03T09:34:51Z</updated>
<author>
<name>Mnikolenko Productengine</name>
<email>mnikolenko@productengine.com</email>
</author>
<published>2025-04-03T09:34:51Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=46fca6f5bbafcdb2942114ccccdadc1e769955e4'/>
<id>urn:sha1:46fca6f5bbafcdb2942114ccccdadc1e769955e4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix line endlings</title>
<updated>2024-05-22T19:40:26Z</updated>
<author>
<name>Ansariel</name>
<email>ansariel.hiller@phoenixviewer.com</email>
</author>
<published>2024-05-22T19:25:21Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=e2e37cced861b98de8c1a7c9c0d3a50d2d90e433'/>
<id>urn:sha1:e2e37cced861b98de8c1a7c9c0d3a50d2d90e433</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/main' into DRTVWR-600-maint-A</title>
<updated>2024-05-22T17:04:52Z</updated>
<author>
<name>Ansariel</name>
<email>ansariel.hiller@phoenixviewer.com</email>
</author>
<published>2024-05-22T17:04:52Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=1b67dd855c41f5a0cda7ec2a68d98071986ca703'/>
<id>urn:sha1:1b67dd855c41f5a0cda7ec2a68d98071986ca703</id>
<content type='text'>
# Conflicts:
#	autobuild.xml
#	indra/cmake/CMakeLists.txt
#	indra/cmake/GoogleMock.cmake
#	indra/llaudio/llaudioengine_fmodstudio.cpp
#	indra/llaudio/llaudioengine_fmodstudio.h
#	indra/llaudio/lllistener_fmodstudio.cpp
#	indra/llaudio/lllistener_fmodstudio.h
#	indra/llaudio/llstreamingaudio_fmodstudio.cpp
#	indra/llaudio/llstreamingaudio_fmodstudio.h
#	indra/llcharacter/llmultigesture.cpp
#	indra/llcharacter/llmultigesture.h
#	indra/llimage/llimage.cpp
#	indra/llimage/llimagepng.cpp
#	indra/llimage/llimageworker.cpp
#	indra/llimage/tests/llimageworker_test.cpp
#	indra/llmessage/tests/llmockhttpclient.h
#	indra/llprimitive/llgltfmaterial.h
#	indra/llrender/llfontfreetype.cpp
#	indra/llui/llcombobox.cpp
#	indra/llui/llfolderview.cpp
#	indra/llui/llfolderviewmodel.h
#	indra/llui/lllineeditor.cpp
#	indra/llui/lllineeditor.h
#	indra/llui/lltextbase.cpp
#	indra/llui/lltextbase.h
#	indra/llui/lltexteditor.cpp
#	indra/llui/lltextvalidate.cpp
#	indra/llui/lltextvalidate.h
#	indra/llui/lluictrl.h
#	indra/llui/llview.cpp
#	indra/llwindow/llwindowmacosx.cpp
#	indra/newview/app_settings/settings.xml
#	indra/newview/llappearancemgr.cpp
#	indra/newview/llappearancemgr.h
#	indra/newview/llavatarpropertiesprocessor.cpp
#	indra/newview/llavatarpropertiesprocessor.h
#	indra/newview/llbreadcrumbview.cpp
#	indra/newview/llbreadcrumbview.h
#	indra/newview/llbreastmotion.cpp
#	indra/newview/llbreastmotion.h
#	indra/newview/llconversationmodel.h
#	indra/newview/lldensityctrl.cpp
#	indra/newview/lldensityctrl.h
#	indra/newview/llface.inl
#	indra/newview/llfloatereditsky.cpp
#	indra/newview/llfloatereditwater.cpp
#	indra/newview/llfloateremojipicker.h
#	indra/newview/llfloaterimsessiontab.cpp
#	indra/newview/llfloaterprofiletexture.cpp
#	indra/newview/llfloaterprofiletexture.h
#	indra/newview/llgesturemgr.cpp
#	indra/newview/llgesturemgr.h
#	indra/newview/llimpanel.cpp
#	indra/newview/llimpanel.h
#	indra/newview/llinventorybridge.cpp
#	indra/newview/llinventorybridge.h
#	indra/newview/llinventoryclipboard.cpp
#	indra/newview/llinventoryclipboard.h
#	indra/newview/llinventoryfunctions.cpp
#	indra/newview/llinventoryfunctions.h
#	indra/newview/llinventorygallery.cpp
#	indra/newview/lllistbrowser.cpp
#	indra/newview/lllistbrowser.h
#	indra/newview/llpanelobjectinventory.cpp
#	indra/newview/llpanelprofile.cpp
#	indra/newview/llpanelprofile.h
#	indra/newview/llpreviewgesture.cpp
#	indra/newview/llsavedsettingsglue.cpp
#	indra/newview/llsavedsettingsglue.h
#	indra/newview/lltooldraganddrop.cpp
#	indra/newview/llurllineeditorctrl.cpp
#	indra/newview/llvectorperfoptions.cpp
#	indra/newview/llvectorperfoptions.h
#	indra/newview/llviewerparceloverlay.cpp
#	indra/newview/llviewertexlayer.cpp
#	indra/newview/llviewertexturelist.cpp
#	indra/newview/macmain.h
#	indra/test/test.cpp
</content>
</entry>
<entry>
<title>#824 Process source files in bulk: replace tabs with spaces, convert CRLF to LF, and trim trailing whitespaces as needed</title>
<updated>2024-04-29T04:56:09Z</updated>
<author>
<name>Andrey Lihatskiy</name>
<email>alihatskiy@productengine.com</email>
</author>
<published>2024-04-29T04:43:28Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=1b68f71348ecf3983b76b40d7940da8377f049b7'/>
<id>urn:sha1:1b68f71348ecf3983b76b40d7940da8377f049b7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge branch 'main' into marchcat/a-merge</title>
<updated>2024-04-24T16:28:15Z</updated>
<author>
<name>Andrey Lihatskiy</name>
<email>alihatskiy@productengine.com</email>
</author>
<published>2024-04-24T16:28:15Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=85f2447b3ddf7e4b91cd5963cb2e7668d48ab2a9'/>
<id>urn:sha1:85f2447b3ddf7e4b91cd5963cb2e7668d48ab2a9</id>
<content type='text'>
# Conflicts:
#	autobuild.xml
#	indra/llimage/llimage.cpp
#	indra/llui/llsearcheditor.cpp
#	indra/llui/llview.cpp
#	indra/newview/llagent.cpp
#	indra/newview/llappviewer.cpp
#	indra/newview/llfloatercamera.cpp
#	indra/newview/llfloatereditsky.cpp
#	indra/newview/llfloatereditwater.cpp
#	indra/newview/llinventoryfunctions.cpp
#	indra/newview/lloutfitgallery.cpp
#	indra/newview/lloutfitslist.cpp
#	indra/newview/llpanelgroupbulkban.cpp
#	indra/newview/llsidepanelappearance.cpp
#	indra/newview/llvovolume.cpp
</content>
</entry>
<entry>
<title>llcommon: BOOL (int) to real bool/LSTATUS</title>
<updated>2024-02-08T23:02:29Z</updated>
<author>
<name>Lars Næsbye Christensen</name>
<email>lars@naesbye.dk</email>
</author>
<published>2024-02-08T01:51:51Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=ba4e7b989b6c20a49da0eeb450bd2f945b3eefc6'/>
<id>urn:sha1:ba4e7b989b6c20a49da0eeb450bd2f945b3eefc6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Replace BOOST_FOREACH with standard C++ range-based for-loops</title>
<updated>2024-01-09T18:44:50Z</updated>
<author>
<name>Ansariel</name>
<email>ansariel.hiller@phoenixviewer.com</email>
</author>
<published>2024-01-08T23:16:52Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=ba74152c823563a66729ea0a7fb7cab5bf58980d'/>
<id>urn:sha1:ba74152c823563a66729ea0a7fb7cab5bf58980d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>DRTVWR-587: Fix LL::apply(function, LLSD array).</title>
<updated>2023-10-29T15:56:17Z</updated>
<author>
<name>Nat Goodspeed</name>
<email>nat@lindenlab.com</email>
</author>
<published>2023-10-29T15:56:17Z</published>
<link rel='alternate' type='text/html' href='https://megapahit.org/viewer.git/commit/?id=f7d2d40b3057f5bc249c88784b35443aad8de7aa'/>
<id>urn:sha1:f7d2d40b3057f5bc249c88784b35443aad8de7aa</id>
<content type='text'>
We define a specialization of LLSDParam&lt;const char*&gt; to support passing an
LLSD object to a const char* function parameter. Needless to remark, passing
object.asString().c_str() would be Bad: destroying the temporary std::string
returned by asString() would immediately invalidate the pointer returned by
its c_str(). But when you pass LLSDParam&lt;const char*&gt;(object) as the
parameter, that specialization itself stores the std::string so the c_str()
pointer remains valid as long as the LLSDParam object does.

Then there's LLSDParam&lt;LLSD&gt;, used when we don't have the parameter type
available to select the LLSDParam specialization. LLSDParam&lt;LLSD&gt; defines a
templated conversion operator T() that constructs an LLSDParam&lt;T&gt; to provide
the actual parameter value. So far, so good.

The trouble was with the implementation of LLSDParam&lt;LLSD&gt;: it constructed a
_temporary_ LLSDParam&lt;T&gt;, implicitly called its operator T() and immediately
destroyed it. Destroying LLSDParam&lt;const char*&gt; destroyed its stored string,
thus invalidating the c_str() pointer before the target function was entered.

Instead, make LLSDParam&lt;LLSD&gt;::operator T() capture each LLSDParam&lt;T&gt; it
constructs, extending its lifespan to the lifespan of the LLSDParam&lt;LLSD&gt;
instance. For this, derive each LLSDParam specialization from LLSDParamBase, a
trivial base class that simply establishes the virtual destructor. We can then
capture any specialization as a pointer to LLSDParamBase.

Also restore LazyEventAPI tests on Mac.
</content>
</entry>
</feed>
