aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/win_updater
diff options
context:
space:
mode:
authorJacek Antonelli2009-08-29 17:44:38 -0500
committerJacek Antonelli2009-08-29 22:49:51 -0500
commit6a5aab98892df74f60743f5b789959c9593d6647 (patch)
tree62da18f8540879ed01e12eeb0ce49375474272e4 /linden/indra/win_updater
parentMerge branch 'mac-openal-url' into next (diff)
parentConverted 1.23 XUI files to unix line endings. (diff)
downloadmeta-impy-6a5aab98892df74f60743f5b789959c9593d6647.zip
meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.gz
meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.bz2
meta-impy-6a5aab98892df74f60743f5b789959c9593d6647.tar.xz
Merged SL 1.23.4 into Imprudence.
Conflicts: linden/doc/contributions.txt linden/indra/CMakeLists.txt linden/indra/cmake/APR.cmake linden/indra/cmake/CopyWinLibs.cmake linden/indra/cmake/OPENAL.cmake linden/indra/develop.py linden/indra/llaudio/audioengine.cpp linden/indra/llcommon/indra_constants.h linden/indra/llcommon/llversionviewer.h linden/indra/llcrashlogger/llcrashlogger.cpp linden/indra/llmedia/llmediaimplgstreamer.cpp linden/indra/llmedia/llmediaimplgstreamer.h linden/indra/llmedia/llmediaimplgstreamer_syms.cpp linden/indra/llmedia/llmediaimplgstreamer_syms.h linden/indra/llmedia/llmediaimplgstreamer_syms_raw.inc linden/indra/llmedia/llmediamanager.cpp linden/indra/llmessage/llassetstorage.cpp linden/indra/llui/lltexteditor.cpp linden/indra/llvfs/lldir.cpp linden/indra/newview/CMakeLists.txt linden/indra/newview/English.lproj/InfoPlist.strings linden/indra/newview/Info-Imprudence.plist linden/indra/newview/app_settings/logcontrol.xml linden/indra/newview/app_settings/settings.xml linden/indra/newview/installers/windows/installer_template.nsi linden/indra/newview/llagent.cpp linden/indra/newview/llappviewer.cpp linden/indra/newview/llcallingcard.cpp linden/indra/newview/llfilepicker.cpp linden/indra/newview/llfloateractivespeakers.cpp linden/indra/newview/llfloateravatarpicker.cpp linden/indra/newview/llfloaterbulkpermission.cpp linden/indra/newview/llfloaterbulkpermission.h linden/indra/newview/llfloaterchat.cpp linden/indra/newview/llfloatergodtools.cpp linden/indra/newview/llfloaterhtmlhelp.cpp linden/indra/newview/llfloatertools.cpp linden/indra/newview/llfloatertools.h linden/indra/newview/llfloatertopobjects.cpp linden/indra/newview/llinventorybridge.cpp linden/indra/newview/llinventoryview.cpp linden/indra/newview/llnetmap.cpp linden/indra/newview/llnetmap.h linden/indra/newview/llpanelland.cpp linden/indra/newview/llpanellogin.cpp linden/indra/newview/llpanelobject.cpp linden/indra/newview/llprefsim.cpp linden/indra/newview/lltexturecache.cpp linden/indra/newview/lltoolbrush.cpp linden/indra/newview/llvieweraudio.cpp linden/indra/newview/llviewermenu.cpp linden/indra/newview/llviewermessage.cpp linden/indra/newview/llviewerparcelmedia.cpp linden/indra/newview/llvoavatar.cpp linden/indra/newview/llwebbrowserctrl.cpp linden/indra/newview/llworldmapview.cpp linden/indra/newview/pipeline.cpp linden/indra/newview/res/viewerRes.rc linden/indra/newview/skins/default/colors_base.xml linden/indra/newview/skins/default/xui/de/floater_active_speakers.xml linden/indra/newview/skins/default/xui/de/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/de/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/de/floater_joystick.xml linden/indra/newview/skins/default/xui/de/floater_mute_object.xml linden/indra/newview/skins/default/xui/de/floater_sim_release_message.xml linden/indra/newview/skins/default/xui/de/panel_media_controls.xml linden/indra/newview/skins/default/xui/de/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/de/strings.xml linden/indra/newview/skins/default/xui/de/teleport_strings.xml linden/indra/newview/skins/default/xui/en-us/alerts.xml linden/indra/newview/skins/default/xui/en-us/floater_about_land.xml linden/indra/newview/skins/default/xui/en-us/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/en-us/floater_beacons.xml linden/indra/newview/skins/default/xui/en-us/floater_bulk_perms.xml linden/indra/newview/skins/default/xui/en-us/floater_buy_land.xml linden/indra/newview/skins/default/xui/en-us/floater_chatterbox.xml linden/indra/newview/skins/default/xui/en-us/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/en-us/floater_media_browser.xml linden/indra/newview/skins/default/xui/en-us/floater_mini_map.xml linden/indra/newview/skins/default/xui/en-us/floater_tools.xml linden/indra/newview/skins/default/xui/en-us/menu_login.xml linden/indra/newview/skins/default/xui/en-us/menu_mini_map.xml linden/indra/newview/skins/default/xui/en-us/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/en-us/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/en-us/menu_pie_object.xml linden/indra/newview/skins/default/xui/en-us/menu_pie_self.xml linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml linden/indra/newview/skins/default/xui/en-us/notify.xml linden/indra/newview/skins/default/xui/en-us/panel_bars.xml linden/indra/newview/skins/default/xui/en-us/panel_groups.xml linden/indra/newview/skins/default/xui/en-us/panel_media_controls.xml linden/indra/newview/skins/default/xui/en-us/panel_mini_map.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml linden/indra/newview/skins/default/xui/en-us/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/en-us/strings.xml linden/indra/newview/skins/default/xui/es/alerts.xml linden/indra/newview/skins/default/xui/es/floater_about.xml linden/indra/newview/skins/default/xui/es/floater_about_land.xml linden/indra/newview/skins/default/xui/es/floater_animation_preview.xml linden/indra/newview/skins/default/xui/es/floater_auction.xml linden/indra/newview/skins/default/xui/es/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/es/floater_avatar_textures.xml linden/indra/newview/skins/default/xui/es/floater_build_options.xml linden/indra/newview/skins/default/xui/es/floater_bumps.xml linden/indra/newview/skins/default/xui/es/floater_buy_contents.xml linden/indra/newview/skins/default/xui/es/floater_buy_currency.xml linden/indra/newview/skins/default/xui/es/floater_buy_land.xml linden/indra/newview/skins/default/xui/es/floater_buy_object.xml linden/indra/newview/skins/default/xui/es/floater_chat_history.xml linden/indra/newview/skins/default/xui/es/floater_choose_group.xml linden/indra/newview/skins/default/xui/es/floater_clothing.xml linden/indra/newview/skins/default/xui/es/floater_color_picker.xml linden/indra/newview/skins/default/xui/es/floater_critical.xml linden/indra/newview/skins/default/xui/es/floater_customize.xml linden/indra/newview/skins/default/xui/es/floater_directory.xml linden/indra/newview/skins/default/xui/es/floater_gesture.xml linden/indra/newview/skins/default/xui/es/floater_group_info.xml linden/indra/newview/skins/default/xui/es/floater_html.xml linden/indra/newview/skins/default/xui/es/floater_im.xml linden/indra/newview/skins/default/xui/es/floater_image_preview.xml linden/indra/newview/skins/default/xui/es/floater_import.xml linden/indra/newview/skins/default/xui/es/floater_instant_message.xml linden/indra/newview/skins/default/xui/es/floater_inventory.xml linden/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml linden/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/es/floater_land_holdings.xml linden/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml linden/indra/newview/skins/default/xui/es/floater_moveview.xml linden/indra/newview/skins/default/xui/es/floater_mute.xml linden/indra/newview/skins/default/xui/es/floater_name_description.xml linden/indra/newview/skins/default/xui/es/floater_new_im.xml linden/indra/newview/skins/default/xui/es/floater_new_outfit_dialog.xml linden/indra/newview/skins/default/xui/es/floater_openobject.xml linden/indra/newview/skins/default/xui/es/floater_pay.xml linden/indra/newview/skins/default/xui/es/floater_pay_object.xml linden/indra/newview/skins/default/xui/es/floater_postcard.xml linden/indra/newview/skins/default/xui/es/floater_preferences.xml linden/indra/newview/skins/default/xui/es/floater_preview_animation.xml linden/indra/newview/skins/default/xui/es/floater_preview_embedded_texture.xml linden/indra/newview/skins/default/xui/es/floater_preview_gesture.xml linden/indra/newview/skins/default/xui/es/floater_preview_notecard.xml linden/indra/newview/skins/default/xui/es/floater_preview_notecard_keep_discard.xml linden/indra/newview/skins/default/xui/es/floater_preview_sound.xml linden/indra/newview/skins/default/xui/es/floater_preview_texture.xml linden/indra/newview/skins/default/xui/es/floater_preview_texture_keep_discard.xml linden/indra/newview/skins/default/xui/es/floater_price_for_listing.xml linden/indra/newview/skins/default/xui/es/floater_profile.xml linden/indra/newview/skins/default/xui/es/floater_report_abuse.xml linden/indra/newview/skins/default/xui/es/floater_script_debug.xml linden/indra/newview/skins/default/xui/es/floater_script_ed_panel.xml linden/indra/newview/skins/default/xui/es/floater_script_preview.xml linden/indra/newview/skins/default/xui/es/floater_script_queue.xml linden/indra/newview/skins/default/xui/es/floater_script_search.xml linden/indra/newview/skins/default/xui/es/floater_sell_land.xml linden/indra/newview/skins/default/xui/es/floater_settings_debug.xml linden/indra/newview/skins/default/xui/es/floater_snapshot.xml linden/indra/newview/skins/default/xui/es/floater_sound_preview.xml linden/indra/newview/skins/default/xui/es/floater_telehub.xml linden/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml linden/indra/newview/skins/default/xui/es/floater_tools.xml linden/indra/newview/skins/default/xui/es/floater_top_objects.xml linden/indra/newview/skins/default/xui/es/floater_tos.xml linden/indra/newview/skins/default/xui/es/floater_wearable_save_as.xml linden/indra/newview/skins/default/xui/es/floater_world_map.xml linden/indra/newview/skins/default/xui/es/menu_inventory.xml linden/indra/newview/skins/default/xui/es/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/es/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/es/menu_pie_land.xml linden/indra/newview/skins/default/xui/es/menu_pie_object.xml linden/indra/newview/skins/default/xui/es/menu_pie_self.xml linden/indra/newview/skins/default/xui/es/menu_viewer.xml linden/indra/newview/skins/default/xui/es/notify.xml linden/indra/newview/skins/default/xui/es/panel_avatar.xml linden/indra/newview/skins/default/xui/es/panel_avatar_classified.xml linden/indra/newview/skins/default/xui/es/panel_avatar_pick.xml linden/indra/newview/skins/default/xui/es/panel_chat_bar.xml linden/indra/newview/skins/default/xui/es/panel_classified.xml linden/indra/newview/skins/default/xui/es/panel_event.xml linden/indra/newview/skins/default/xui/es/panel_group.xml linden/indra/newview/skins/default/xui/es/panel_group_finder.xml linden/indra/newview/skins/default/xui/es/panel_group_general.xml linden/indra/newview/skins/default/xui/es/panel_group_invite.xml linden/indra/newview/skins/default/xui/es/panel_group_land_money.xml linden/indra/newview/skins/default/xui/es/panel_group_notices.xml linden/indra/newview/skins/default/xui/es/panel_group_roles.xml linden/indra/newview/skins/default/xui/es/panel_group_voting.xml linden/indra/newview/skins/default/xui/es/panel_land_covenant.xml linden/indra/newview/skins/default/xui/es/panel_login.xml linden/indra/newview/skins/default/xui/es/panel_overlaybar.xml linden/indra/newview/skins/default/xui/es/panel_place.xml linden/indra/newview/skins/default/xui/es/panel_place_small.xml linden/indra/newview/skins/default/xui/es/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/es/panel_preferences_chat.xml linden/indra/newview/skins/default/xui/es/panel_preferences_general.xml linden/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml linden/indra/newview/skins/default/xui/es/panel_preferences_im.xml linden/indra/newview/skins/default/xui/es/panel_preferences_input.xml linden/indra/newview/skins/default/xui/es/panel_preferences_network.xml linden/indra/newview/skins/default/xui/es/panel_preferences_popups.xml linden/indra/newview/skins/default/xui/es/panel_region_covenant.xml linden/indra/newview/skins/default/xui/es/panel_region_debug.xml linden/indra/newview/skins/default/xui/es/panel_region_estate.xml linden/indra/newview/skins/default/xui/es/panel_region_general.xml linden/indra/newview/skins/default/xui/es/panel_region_terrain.xml linden/indra/newview/skins/default/xui/es/panel_region_texture.xml linden/indra/newview/skins/default/xui/es/panel_scrolling_param.xml linden/indra/newview/skins/default/xui/es/panel_status_bar.xml linden/indra/newview/skins/default/xui/es/panel_toolbar.xml linden/indra/newview/skins/default/xui/es/panel_top_pick.xml linden/indra/newview/skins/default/xui/fr/alerts.xml linden/indra/newview/skins/default/xui/fr/floater_about.xml linden/indra/newview/skins/default/xui/fr/floater_about_land.xml linden/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml linden/indra/newview/skins/default/xui/fr/floater_beacons.xml linden/indra/newview/skins/default/xui/fr/floater_buy_contents.xml linden/indra/newview/skins/default/xui/fr/floater_buy_currency.xml linden/indra/newview/skins/default/xui/fr/floater_buy_land.xml linden/indra/newview/skins/default/xui/fr/floater_chat_history.xml linden/indra/newview/skins/default/xui/fr/floater_clothing.xml linden/indra/newview/skins/default/xui/fr/floater_customize.xml linden/indra/newview/skins/default/xui/fr/floater_directory.xml linden/indra/newview/skins/default/xui/fr/floater_god_tools.xml linden/indra/newview/skins/default/xui/fr/floater_group_info.xml linden/indra/newview/skins/default/xui/fr/floater_html.xml linden/indra/newview/skins/default/xui/fr/floater_im.xml linden/indra/newview/skins/default/xui/fr/floater_instant_message.xml linden/indra/newview/skins/default/xui/fr/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/fr/floater_inventory.xml linden/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/fr/floater_joystick.xml linden/indra/newview/skins/default/xui/fr/floater_land_holdings.xml linden/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml linden/indra/newview/skins/default/xui/fr/floater_media_browser.xml linden/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml linden/indra/newview/skins/default/xui/fr/floater_name_description.xml linden/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml linden/indra/newview/skins/default/xui/fr/floater_profile.xml linden/indra/newview/skins/default/xui/fr/floater_report_abuse.xml linden/indra/newview/skins/default/xui/fr/floater_script_search.xml linden/indra/newview/skins/default/xui/fr/floater_sell_land.xml linden/indra/newview/skins/default/xui/fr/floater_snapshot.xml linden/indra/newview/skins/default/xui/fr/floater_sound_preview.xml linden/indra/newview/skins/default/xui/fr/floater_tools.xml linden/indra/newview/skins/default/xui/fr/floater_top_objects.xml linden/indra/newview/skins/default/xui/fr/floater_world_map.xml linden/indra/newview/skins/default/xui/fr/menu_inventory.xml linden/indra/newview/skins/default/xui/fr/menu_login.xml linden/indra/newview/skins/default/xui/fr/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/fr/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/fr/menu_pie_object.xml linden/indra/newview/skins/default/xui/fr/menu_viewer.xml linden/indra/newview/skins/default/xui/fr/notify.xml linden/indra/newview/skins/default/xui/fr/panel_audio.xml linden/indra/newview/skins/default/xui/fr/panel_avatar.xml linden/indra/newview/skins/default/xui/fr/panel_avatar_classified.xml linden/indra/newview/skins/default/xui/fr/panel_classified.xml linden/indra/newview/skins/default/xui/fr/panel_event.xml linden/indra/newview/skins/default/xui/fr/panel_friends.xml linden/indra/newview/skins/default/xui/fr/panel_group_general.xml linden/indra/newview/skins/default/xui/fr/panel_group_invite.xml linden/indra/newview/skins/default/xui/fr/panel_group_land_money.xml linden/indra/newview/skins/default/xui/fr/panel_group_roles.xml linden/indra/newview/skins/default/xui/fr/panel_login.xml linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml linden/indra/newview/skins/default/xui/fr/panel_media_remote_expanded.xml linden/indra/newview/skins/default/xui/fr/panel_overlaybar.xml linden/indra/newview/skins/default/xui/fr/panel_place.xml linden/indra/newview/skins/default/xui/fr/panel_place_small.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_general.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_im.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_input.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_network.xml linden/indra/newview/skins/default/xui/fr/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/fr/panel_region_covenant.xml linden/indra/newview/skins/default/xui/fr/panel_region_debug.xml linden/indra/newview/skins/default/xui/fr/panel_region_general.xml linden/indra/newview/skins/default/xui/fr/panel_voice_controls.xml linden/indra/newview/skins/default/xui/fr/role_actions.xml linden/indra/newview/skins/default/xui/fr/strings.xml linden/indra/newview/skins/default/xui/fr/teleport_strings.xml linden/indra/newview/skins/default/xui/ja/floater_active_speakers.xml linden/indra/newview/skins/default/xui/ja/floater_html.xml linden/indra/newview/skins/default/xui/ja/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/ja/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/ja/floater_joystick.xml linden/indra/newview/skins/default/xui/ja/floater_media_browser.xml linden/indra/newview/skins/default/xui/ja/floater_windlight_options.xml linden/indra/newview/skins/default/xui/ja/menu_login.xml linden/indra/newview/skins/default/xui/ja/panel_friends.xml linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml linden/indra/newview/skins/default/xui/ja/panel_media_remote_expanded.xml linden/indra/newview/skins/default/xui/ja/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/ja/panel_speaker_controls.xml linden/indra/newview/skins/default/xui/ja/strings.xml linden/indra/newview/skins/default/xui/ja/teleport_strings.xml linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml linden/indra/newview/skins/default/xui/pt/alerts.xml linden/indra/newview/skins/default/xui/pt/floater_about.xml linden/indra/newview/skins/default/xui/pt/floater_about_land.xml linden/indra/newview/skins/default/xui/pt/floater_active_speakers.xml linden/indra/newview/skins/default/xui/pt/floater_animation_preview.xml linden/indra/newview/skins/default/xui/pt/floater_auction.xml linden/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml linden/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml linden/indra/newview/skins/default/xui/pt/floater_beacons.xml linden/indra/newview/skins/default/xui/pt/floater_build_options.xml linden/indra/newview/skins/default/xui/pt/floater_bumps.xml linden/indra/newview/skins/default/xui/pt/floater_buy_contents.xml linden/indra/newview/skins/default/xui/pt/floater_buy_currency.xml linden/indra/newview/skins/default/xui/pt/floater_buy_land.xml linden/indra/newview/skins/default/xui/pt/floater_buy_object.xml linden/indra/newview/skins/default/xui/pt/floater_chat_history.xml linden/indra/newview/skins/default/xui/pt/floater_clothing.xml linden/indra/newview/skins/default/xui/pt/floater_color_picker.xml linden/indra/newview/skins/default/xui/pt/floater_critical.xml linden/indra/newview/skins/default/xui/pt/floater_customize.xml linden/indra/newview/skins/default/xui/pt/floater_day_cycle_options.xml linden/indra/newview/skins/default/xui/pt/floater_directory.xml linden/indra/newview/skins/default/xui/pt/floater_env_settings.xml linden/indra/newview/skins/default/xui/pt/floater_gesture.xml linden/indra/newview/skins/default/xui/pt/floater_god_tools.xml linden/indra/newview/skins/default/xui/pt/floater_group_info.xml linden/indra/newview/skins/default/xui/pt/floater_im.xml linden/indra/newview/skins/default/xui/pt/floater_image_preview.xml linden/indra/newview/skins/default/xui/pt/floater_inspect.xml linden/indra/newview/skins/default/xui/pt/floater_instant_message.xml linden/indra/newview/skins/default/xui/pt/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/pt/floater_instant_message_group.xml linden/indra/newview/skins/default/xui/pt/floater_inventory.xml linden/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml linden/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml linden/indra/newview/skins/default/xui/pt/floater_joystick.xml linden/indra/newview/skins/default/xui/pt/floater_lagmeter.xml linden/indra/newview/skins/default/xui/pt/floater_land_holdings.xml linden/indra/newview/skins/default/xui/pt/floater_landmark_ctrl.xml linden/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml linden/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml linden/indra/newview/skins/default/xui/pt/floater_media_browser.xml linden/indra/newview/skins/default/xui/pt/floater_moveview.xml linden/indra/newview/skins/default/xui/pt/floater_mute.xml linden/indra/newview/skins/default/xui/pt/floater_mute_object.xml linden/indra/newview/skins/default/xui/pt/floater_name_description.xml linden/indra/newview/skins/default/xui/pt/floater_new_outfit_dialog.xml linden/indra/newview/skins/default/xui/pt/floater_openobject.xml linden/indra/newview/skins/default/xui/pt/floater_pay.xml linden/indra/newview/skins/default/xui/pt/floater_postcard.xml linden/indra/newview/skins/default/xui/pt/floater_preferences.xml linden/indra/newview/skins/default/xui/pt/floater_preview_animation.xml linden/indra/newview/skins/default/xui/pt/floater_preview_classified.xml linden/indra/newview/skins/default/xui/pt/floater_preview_event.xml linden/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml linden/indra/newview/skins/default/xui/pt/floater_preview_notecard_keep_discard.xml linden/indra/newview/skins/default/xui/pt/floater_preview_sound.xml linden/indra/newview/skins/default/xui/pt/floater_preview_url.xml linden/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml linden/indra/newview/skins/default/xui/pt/floater_profile.xml linden/indra/newview/skins/default/xui/pt/floater_report_abuse.xml linden/indra/newview/skins/default/xui/pt/floater_script_debug.xml linden/indra/newview/skins/default/xui/pt/floater_script_queue.xml linden/indra/newview/skins/default/xui/pt/floater_script_search.xml linden/indra/newview/skins/default/xui/pt/floater_sell_land.xml linden/indra/newview/skins/default/xui/pt/floater_settings_debug.xml linden/indra/newview/skins/default/xui/pt/floater_sim_release_message.xml linden/indra/newview/skins/default/xui/pt/floater_snapshot.xml linden/indra/newview/skins/default/xui/pt/floater_sound_preview.xml linden/indra/newview/skins/default/xui/pt/floater_telehub.xml linden/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml linden/indra/newview/skins/default/xui/pt/floater_tools.xml linden/indra/newview/skins/default/xui/pt/floater_top_objects.xml linden/indra/newview/skins/default/xui/pt/floater_tos.xml linden/indra/newview/skins/default/xui/pt/floater_url_entry.xml linden/indra/newview/skins/default/xui/pt/floater_water.xml linden/indra/newview/skins/default/xui/pt/floater_wearable_save_as.xml linden/indra/newview/skins/default/xui/pt/floater_windlight_options.xml linden/indra/newview/skins/default/xui/pt/floater_world_map.xml linden/indra/newview/skins/default/xui/pt/menu_inventory.xml linden/indra/newview/skins/default/xui/pt/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/pt/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/pt/menu_pie_land.xml linden/indra/newview/skins/default/xui/pt/menu_pie_object.xml linden/indra/newview/skins/default/xui/pt/menu_viewer.xml linden/indra/newview/skins/default/xui/pt/notify.xml linden/indra/newview/skins/default/xui/pt/panel_account_details.xml linden/indra/newview/skins/default/xui/pt/panel_account_planning.xml linden/indra/newview/skins/default/xui/pt/panel_account_transactions.xml linden/indra/newview/skins/default/xui/pt/panel_audio_device.xml linden/indra/newview/skins/default/xui/pt/panel_avatar.xml linden/indra/newview/skins/default/xui/pt/panel_avatar_classified.xml linden/indra/newview/skins/default/xui/pt/panel_avatar_pick.xml linden/indra/newview/skins/default/xui/pt/panel_chat_bar.xml linden/indra/newview/skins/default/xui/pt/panel_classified.xml linden/indra/newview/skins/default/xui/pt/panel_event.xml linden/indra/newview/skins/default/xui/pt/panel_friends.xml linden/indra/newview/skins/default/xui/pt/panel_group.xml linden/indra/newview/skins/default/xui/pt/panel_group_finder.xml linden/indra/newview/skins/default/xui/pt/panel_group_general.xml linden/indra/newview/skins/default/xui/pt/panel_group_invite.xml linden/indra/newview/skins/default/xui/pt/panel_group_land_money.xml linden/indra/newview/skins/default/xui/pt/panel_group_notices.xml linden/indra/newview/skins/default/xui/pt/panel_group_roles.xml linden/indra/newview/skins/default/xui/pt/panel_group_voting.xml linden/indra/newview/skins/default/xui/pt/panel_land_covenant.xml linden/indra/newview/skins/default/xui/pt/panel_login.xml linden/indra/newview/skins/default/xui/pt/panel_overlaybar.xml linden/indra/newview/skins/default/xui/pt/panel_place.xml linden/indra/newview/skins/default/xui/pt/panel_place_small.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_general.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_im.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_input.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_network.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_popups.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_voice.xml linden/indra/newview/skins/default/xui/pt/panel_preferences_web.xml linden/indra/newview/skins/default/xui/pt/panel_region_covenant.xml linden/indra/newview/skins/default/xui/pt/panel_region_debug.xml linden/indra/newview/skins/default/xui/pt/panel_region_estate.xml linden/indra/newview/skins/default/xui/pt/panel_region_general.xml linden/indra/newview/skins/default/xui/pt/panel_region_terrain.xml linden/indra/newview/skins/default/xui/pt/panel_region_texture.xml linden/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml linden/indra/newview/skins/default/xui/pt/panel_speaker_controls.xml linden/indra/newview/skins/default/xui/pt/panel_status_bar.xml linden/indra/newview/skins/default/xui/pt/panel_toolbar.xml linden/indra/newview/skins/default/xui/pt/panel_top_pick.xml linden/indra/newview/skins/default/xui/pt/panel_voice_controls.xml linden/indra/newview/skins/default/xui/pt/panel_voice_enable.xml linden/indra/newview/skins/default/xui/pt/panel_voice_options.xml linden/indra/newview/skins/default/xui/pt/strings.xml linden/indra/newview/skins/default/xui/pt/teleport_strings.xml linden/indra/newview/skins/default/xui/zh/floater_env_settings.xml linden/indra/newview/skins/default/xui/zh/floater_instant_message_ad_hoc.xml linden/indra/newview/skins/default/xui/zh/floater_lagmeter.xml linden/indra/newview/skins/default/xui/zh/floater_landmark_ctrl.xml linden/indra/newview/skins/default/xui/zh/floater_post_process.xml linden/indra/newview/skins/default/xui/zh/floater_settings_debug.xml linden/indra/newview/skins/default/xui/zh/floater_windlight_options.xml linden/indra/newview/skins/default/xui/zh/menu_pie_attachment.xml linden/indra/newview/skins/default/xui/zh/menu_pie_avatar.xml linden/indra/newview/skins/default/xui/zh/menu_pie_land.xml linden/indra/newview/skins/default/xui/zh/menu_pie_object.xml linden/indra/newview/skins/default/xui/zh/menu_viewer.xml linden/indra/newview/skins/default/xui/zh/panel_avatar.xml linden/indra/newview/skins/default/xui/zh/panel_friends.xml linden/indra/newview/skins/default/xui/zh/panel_group_general.xml linden/indra/newview/skins/default/xui/zh/panel_group_invite.xml linden/indra/newview/skins/default/xui/zh/panel_group_land_money.xml linden/indra/newview/skins/default/xui/zh/panel_group_notices.xml linden/indra/newview/skins/default/xui/zh/panel_group_roles.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_audio.xml linden/indra/newview/skins/default/xui/zh/panel_preferences_im.xml linden/indra/newview/skins/default/xui/zh/panel_region_covenant.xml linden/indra/newview/skins/default/xui/zh/panel_speaker_controls.xml linden/indra/newview/skins/default/xui/zh/panel_voice_options.xml linden/indra/newview/skins/default/xui/zh/strings.xml linden/indra/newview/skins/silver/colors_base.xml linden/indra/newview/skins/silver/xui/en-us/floater_about_land.xml linden/indra/newview/skins/silver/xui/en-us/floater_directory.xml linden/indra/newview/skins/silver/xui/en-us/floater_tools.xml linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml linden/indra/newview/viewer_manifest.py linden/install.xml
Diffstat (limited to 'linden/indra/win_updater')
-rw-r--r--linden/indra/win_updater/CMakeLists.txt11
-rw-r--r--linden/indra/win_updater/updater.cpp288
2 files changed, 175 insertions, 124 deletions
diff --git a/linden/indra/win_updater/CMakeLists.txt b/linden/indra/win_updater/CMakeLists.txt
index 6379d7c..dedb7cf 100644
--- a/linden/indra/win_updater/CMakeLists.txt
+++ b/linden/indra/win_updater/CMakeLists.txt
@@ -21,10 +21,15 @@ list(APPEND win_updater_SOURCE_FILES ${win_updater_HEADER_FILES})
21 21
22add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES}) 22add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES})
23 23
24target_link_libraries(windows-updater wininet) 24target_link_libraries(windows-updater
25 wininet
26 user32
27 gdi32
28 shell32
29 )
25 30
26set_target_properties(windows-updater 31set_target_properties(windows-updater
27 PROPERTIES 32 PROPERTIES
28 LINK_FLAGS "/NODEFAULTLIB:MSVCRT" 33 LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
29 LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;MSVCRTD\"" 34 LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
30 ) 35 )
diff --git a/linden/indra/win_updater/updater.cpp b/linden/indra/win_updater/updater.cpp
index 9aed612..4a50731 100644
--- a/linden/indra/win_updater/updater.cpp
+++ b/linden/indra/win_updater/updater.cpp
@@ -17,7 +17,8 @@
17 * There are special exceptions to the terms and conditions of the GPL as 17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception 18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or 19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception 20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 * 22 *
22 * By copying, modifying or distributing this software, you acknowledge 23 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above, 24 * that you have read and understood your obligations described above,
@@ -33,10 +34,19 @@
33// Usage: updater -url <url> 34// Usage: updater -url <url>
34// 35//
35 36
36#include "linden_common.h" 37// We use dangerous fopen, strtok, mbstowcs, sprintf
38// which generates warnings on VC2005.
39// *TODO: Switch to fopen_s, strtok_s, etc.
40#define _CRT_SECURE_NO_DEPRECATE
37 41
38#include <windows.h> 42#include <windows.h>
39#include <wininet.h> 43#include <wininet.h>
44#include <stdio.h>
45#include <string>
46#include <iostream>
47#include <stdexcept>
48#include <sstream>
49#include <fstream>
40 50
41#define BUFSIZE 8192 51#define BUFSIZE 8192
42 52
@@ -44,16 +54,19 @@ int gTotalBytesRead = 0;
44DWORD gTotalBytes = -1; 54DWORD gTotalBytes = -1;
45HWND gWindow = NULL; 55HWND gWindow = NULL;
46WCHAR gProgress[256]; 56WCHAR gProgress[256];
47char* gUpdateURL; 57char* gUpdateURL = NULL;
48 58
49#if _DEBUG 59#if _DEBUG
50FILE* logfile = 0; 60std::ofstream logfile;
61#define DEBUG(expr) logfile << expr << std::endl
62#else
63#define DEBUG(expr) /**/
51#endif 64#endif
52 65
53char* wchars_to_utf8chars(WCHAR* in_chars) 66char* wchars_to_utf8chars(const WCHAR* in_chars)
54{ 67{
55 int tlen = 0; 68 int tlen = 0;
56 WCHAR* twc = in_chars; 69 const WCHAR* twc = in_chars;
57 while (*twc++ != 0) 70 while (*twc++ != 0)
58 { 71 {
59 tlen++; 72 tlen++;
@@ -76,103 +89,128 @@ char* wchars_to_utf8chars(WCHAR* in_chars)
76 return res; 89 return res;
77} 90}
78 91
79int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled) 92class Fetcher
93{
94public:
95 Fetcher(const std::wstring& uri)
96 {
97 // These actions are broken out as separate methods not because it
98 // makes the code clearer, but to avoid triggering AntiVir and
99 // McAfee-GW-Edition virus scanners (DEV-31680).
100 mInet = openInet();
101 mDownload = openUrl(uri);
102 }
103
104 ~Fetcher()
105 {
106 DEBUG("Calling InternetCloseHandle");
107 InternetCloseHandle(mDownload);
108 InternetCloseHandle(mInet);
109 }
110
111 unsigned long read(char* buffer, size_t bufflen) const;
112
113 DWORD getTotalBytes() const
114 {
115 DWORD totalBytes;
116 DWORD sizeof_total_bytes = sizeof(totalBytes);
117 HttpQueryInfo(mDownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER,
118 &totalBytes, &sizeof_total_bytes, NULL);
119 return totalBytes;
120 }
121
122 struct InetError: public std::runtime_error
123 {
124 InetError(const std::string& what): std::runtime_error(what) {}
125 };
126
127private:
128 // We test results from a number of different MS functions with different
129 // return types -- but the common characteristic is that 0 (i.e. (! result))
130 // means an error of some kind.
131 template <typename RESULT>
132 static RESULT check(const std::string& desc, RESULT result)
133 {
134 if (result)
135 {
136 // success, show caller
137 return result;
138 }
139 DWORD err = GetLastError();
140 std::ostringstream out;
141 out << desc << " Failed: " << err;
142 DEBUG(out.str());
143 throw InetError(out.str());
144 }
145
146 HINTERNET openUrl(const std::wstring& uri) const;
147 HINTERNET openInet() const;
148
149 HINTERNET mInet, mDownload;
150};
151
152HINTERNET Fetcher::openInet() const
153{
154 DEBUG("Calling InternetOpen");
155 // Init wininet subsystem
156 return check("InternetOpen",
157 InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0));
158}
159
160HINTERNET Fetcher::openUrl(const std::wstring& uri) const
161{
162 DEBUG("Calling InternetOpenUrl: " << wchars_to_utf8chars(uri.c_str()));
163 return check("InternetOpenUrl",
164 InternetOpenUrl(mInet, uri.c_str(), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL));
165}
166
167unsigned long Fetcher::read(char* buffer, size_t bufflen) const
168{
169 unsigned long bytes_read = 0;
170 DEBUG("Calling InternetReadFile");
171 check("InternetReadFile",
172 InternetReadFile(mDownload, buffer, bufflen, &bytes_read));
173 return bytes_read;
174}
175
176int WINAPI get_url_into_file(const std::wstring& uri, const std::string& path, int *cancelled)
80{ 177{
81 int success = FALSE; 178 int success = FALSE;
82 *cancelled = FALSE; 179 *cancelled = FALSE;
83 180
84 HINTERNET hinet, hdownload; 181 DEBUG("Opening '" << path << "'");
85 char data[BUFSIZE]; /* Flawfinder: ignore */
86 unsigned long bytes_read;
87
88#if _DEBUG
89 fprintf(logfile,"Opening '%s'\n",path);
90 fflush(logfile);
91#endif
92 182
93 FILE* fp = fopen(path, "wb"); /* Flawfinder: ignore */ 183 FILE* fp = fopen(path.c_str(), "wb"); /* Flawfinder: ignore */
94 184
95 if (!fp) 185 if (!fp)
96 { 186 {
97#if _DEBUG 187 DEBUG("Failed to open '" << path << "'");
98 fprintf(logfile,"Failed to open '%s'\n",path);
99 fflush(logfile);
100#endif
101 return success;
102 }
103
104#if _DEBUG
105 fprintf(logfile,"Calling InternetOpen\n");
106 fflush(logfile);
107#endif
108 // Init wininet subsystem
109 hinet = InternetOpen(L"LindenUpdater", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
110 if (hinet == NULL)
111 {
112 return success; 188 return success;
113 } 189 }
114 190
115#if _DEBUG 191 // Note, ctor can throw, since it uses check() function.
116 fprintf(logfile,"Calling InternetOpenUrl: %s\n",wchars_to_utf8chars(uri)); 192 Fetcher fetcher(uri);
117 fflush(logfile); 193 gTotalBytes = fetcher.getTotalBytes();
118#endif
119 hdownload = InternetOpenUrl(hinet, uri, NULL, 0, INTERNET_FLAG_NEED_FILE, NULL);
120 if (hdownload == NULL)
121 {
122#if _DEBUG
123 DWORD err = GetLastError();
124 fprintf(logfile,"InternetOpenUrl Failed: %d\n",err);
125 fflush(logfile);
126#endif
127 return success;
128 }
129 194
130 DWORD sizeof_total_bytes = sizeof(gTotalBytes); 195/*==========================================================================*|
131 HttpQueryInfo(hdownload, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &gTotalBytes, &sizeof_total_bytes, NULL); 196 // nobody uses total_bytes?!? What's this doing here?
132
133 DWORD total_bytes = 0; 197 DWORD total_bytes = 0;
134 success = InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0); 198 success = check("InternetQueryDataAvailable",
135 if (success == FALSE) 199 InternetQueryDataAvailable(hdownload, &total_bytes, 0, 0));
136 { 200|*==========================================================================*/
137#if _DEBUG
138 DWORD err = GetLastError();
139 fprintf(logfile,"InternetQueryDataAvailable Failed: %d bytes Err:%d\n",total_bytes,err);
140 fflush(logfile);
141#endif
142 return success;
143 }
144 201
145 success = FALSE; 202 success = FALSE;
146 while(!success && !(*cancelled)) 203 while(!success && !(*cancelled))
147 { 204 {
148 MSG msg; 205 char data[BUFSIZE]; /* Flawfinder: ignore */
149 206 unsigned long bytes_read = fetcher.read(data, sizeof(data));
150#if _DEBUG
151 fprintf(logfile,"Calling InternetReadFile\n");
152 fflush(logfile);
153#endif
154 if (!InternetReadFile(hdownload, data, BUFSIZE, &bytes_read))
155 {
156#if _DEBUG
157 fprintf(logfile,"InternetReadFile Failed.\n");
158 fflush(logfile);
159#endif
160 // ...an error occurred
161 return FALSE;
162 }
163 207
164#if _DEBUG
165 if (!bytes_read) 208 if (!bytes_read)
166 { 209 {
167 fprintf(logfile,"InternetReadFile Read 0 bytes.\n"); 210 DEBUG("InternetReadFile Read " << bytes_read << " bytes.");
168 fflush(logfile);
169 } 211 }
170#endif
171 212
172#if _DEBUG 213 DEBUG("Reading Data, bytes_read = " << bytes_read);
173 fprintf(logfile,"Reading Data, bytes_read = %d\n",bytes_read);
174 fflush(logfile);
175#endif
176 214
177 if (bytes_read == 0) 215 if (bytes_read == 0)
178 { 216 {
@@ -195,25 +233,17 @@ int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled)
195 233
196 } 234 }
197 235
198#if _DEBUG 236 DEBUG("Calling InvalidateRect");
199 fprintf(logfile,"Calling InvalidateRect\n");
200 fflush(logfile);
201#endif
202 237
203 // Mark the window as needing redraw (of the whole thing) 238 // Mark the window as needing redraw (of the whole thing)
204 InvalidateRect(gWindow, NULL, TRUE); 239 InvalidateRect(gWindow, NULL, TRUE);
205 240
206 // Do the redraw 241 // Do the redraw
207#if _DEBUG 242 DEBUG("Calling UpdateWindow");
208 fprintf(logfile,"Calling UpdateWindow\n");
209 fflush(logfile);
210#endif
211 UpdateWindow(gWindow); 243 UpdateWindow(gWindow);
212 244
213#if _DEBUG 245 DEBUG("Calling PeekMessage");
214 fprintf(logfile,"Calling PeekMessage\n"); 246 MSG msg;
215 fflush(logfile);
216#endif
217 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 247 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
218 { 248 {
219 TranslateMessage(&msg); 249 TranslateMessage(&msg);
@@ -227,15 +257,7 @@ int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled)
227 } 257 }
228 } 258 }
229 259
230#if _DEBUG
231 fprintf(logfile,"Calling InternetCloseHandle\n");
232 fclose(logfile);
233#endif
234
235 fclose(fp); 260 fclose(fp);
236 InternetCloseHandle(hdownload);
237 InternetCloseHandle(hinet);
238
239 return success; 261 return success;
240} 262}
241 263
@@ -301,9 +323,8 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
301 char* argv[MAX_ARGS]; /* Flawfinder: ignore */ 323 char* argv[MAX_ARGS]; /* Flawfinder: ignore */
302 324
303#if _DEBUG 325#if _DEBUG
304 logfile = _wfopen(TEXT("updater.log"),TEXT("wt")); 326 logfile.open("updater.log", std::ios_base::out);
305 fprintf(logfile,"Parsing command arguments\n"); 327 DEBUG("Parsing command arguments");
306 fflush(logfile);
307#endif 328#endif
308 329
309 char *token = NULL; 330 char *token = NULL;
@@ -341,10 +362,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
341 // Process command line arguments 362 // Process command line arguments
342 // 363 //
343 364
344#if _DEBUG 365 DEBUG("Processing command arguments");
345 fprintf(logfile,"Processing command arguments\n");
346 fflush(logfile);
347#endif
348 366
349 // 367 //
350 // Parse the command line arguments 368 // Parse the command line arguments
@@ -362,8 +380,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
362 } 380 }
363 381
364 WNDCLASSEX wndclassex = { 0 }; 382 WNDCLASSEX wndclassex = { 0 };
365 DEVMODE dev_mode = { 0 }; 383 //DEVMODE dev_mode = { 0 };
366 char update_exec_path[MAX_PATH]; /* Flawfinder: ignore */
367 384
368 const int WINDOW_WIDTH = 250; 385 const int WINDOW_WIDTH = 250;
369 const int WINDOW_HEIGHT = 100; 386 const int WINDOW_HEIGHT = 100;
@@ -381,7 +398,7 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
381 RegisterClassEx(&wndclassex); 398 RegisterClassEx(&wndclassex);
382 399
383 // Get the size of the screen 400 // Get the size of the screen
384 EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode); 401 //EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode);
385 402
386 gWindow = CreateWindowEx(NULL, win_class_name, 403 gWindow = CreateWindowEx(NULL, win_class_name,
387 L"Second Life Updater", 404 L"Second Life Updater",
@@ -412,26 +429,34 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
412 } 429 }
413 430
414 // Can't feed GetTempPath into GetTempFile directly 431 // Can't feed GetTempPath into GetTempFile directly
415 if (0 == GetTempPathA(MAX_PATH - 14, update_exec_path)) 432 char temp_path[MAX_PATH]; /* Flawfinder: ignore */
433 if (0 == GetTempPathA(sizeof(temp_path), temp_path))
416 { 434 {
417 MessageBox(gWindow, L"Problem with GetTempPath()", 435 MessageBox(gWindow, L"Problem with GetTempPath()",
418 L"Error", MB_OK); 436 L"Error", MB_OK);
419 return 1; 437 return 1;
420 } 438 }
421 strcat(update_exec_path, "Second_Life_Updater.exe"); 439 std::string update_exec_path(temp_path);
440 update_exec_path.append("Second_Life_Updater.exe");
422 441
423 WCHAR update_uri[4096]; 442 WCHAR update_uri[4096];
424 mbstowcs(update_uri, gUpdateURL, 4096); 443 mbstowcs(update_uri, gUpdateURL, sizeof(update_uri));
425 444
426 int success = 0; 445 int success = 0;
427 int cancelled = 0; 446 int cancelled = 0;
428 447
429 // Actually do the download 448 // Actually do the download
430#if _DEBUG 449 try
431 fprintf(logfile,"Calling get_url_into_file\n"); 450 {
432 fflush(logfile); 451 DEBUG("Calling get_url_into_file");
433#endif 452 success = get_url_into_file(update_uri, update_exec_path, &cancelled);
434 success = get_url_into_file(update_uri, update_exec_path, &cancelled); 453 }
454 catch (const Fetcher::InetError& e)
455 {
456 (void)e;
457 success = FALSE;
458 DEBUG("Caught: " << e.what());
459 }
435 460
436 // WinInet can't tell us if we got a 404 or not. Therefor, we check 461 // WinInet can't tell us if we got a 404 or not. Therefor, we check
437 // for the size of the downloaded file, and assume that our installer 462 // for the size of the downloaded file, and assume that our installer
@@ -471,10 +496,31 @@ WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nSho
471 // L"Download Complete", 496 // L"Download Complete",
472 // MB_OK); 497 // MB_OK);
473 498
474 if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path, NULL, 499/*==========================================================================*|
500 // DEV-31680: ShellExecuteA() causes McAfee-GW-Edition and AntiVir
501 // scanners to flag this executable as a probable virus vector.
502 // Less than or equal to 32 means failure
503 if (32 >= (int) ShellExecuteA(gWindow, "open", update_exec_path.c_str(), NULL,
475 "C:\\", SW_SHOWDEFAULT)) 504 "C:\\", SW_SHOWDEFAULT))
505|*==========================================================================*/
506 // from http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx
507 STARTUPINFOA si;
508 PROCESS_INFORMATION pi;
509 ZeroMemory(&si, sizeof(si));
510 si.cb = sizeof(si);
511 ZeroMemory(&pi, sizeof(pi));
512
513 if (! CreateProcessA(update_exec_path.c_str(), // executable file
514 NULL, // command line
515 NULL, // process cannot be inherited
516 NULL, // thread cannot be inherited
517 FALSE, // do not inherit existing handles
518 0, // process creation flags
519 NULL, // inherit parent's environment
520 NULL, // inherit parent's current dir
521 &si, // STARTUPINFO
522 &pi)) // PROCESS_INFORMATION
476 { 523 {
477 // Less than or equal to 32 means failure
478 MessageBox(gWindow, L"Update failed. Please try again later.", NULL, MB_OK); 524 MessageBox(gWindow, L"Update failed. Please try again later.", NULL, MB_OK);
479 return 1; 525 return 1;
480 } 526 }