diff options
author | Jacek Antonelli | 2009-08-29 17:44:38 -0500 |
---|---|---|
committer | Jacek Antonelli | 2009-08-29 22:49:51 -0500 |
commit | 6a5aab98892df74f60743f5b789959c9593d6647 (patch) | |
tree | 62da18f8540879ed01e12eeb0ce49375474272e4 /linden/indra/win_updater | |
parent | Merge branch 'mac-openal-url' into next (diff) | |
parent | Converted 1.23 XUI files to unix line endings. (diff) | |
download | meta-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.txt | 11 | ||||
-rw-r--r-- | linden/indra/win_updater/updater.cpp | 288 |
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 | ||
22 | add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES}) | 22 | add_executable(windows-updater WIN32 ${win_updater_SOURCE_FILES}) |
23 | 23 | ||
24 | target_link_libraries(windows-updater wininet) | 24 | target_link_libraries(windows-updater |
25 | wininet | ||
26 | user32 | ||
27 | gdi32 | ||
28 | shell32 | ||
29 | ) | ||
25 | 30 | ||
26 | set_target_properties(windows-updater | 31 | set_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; | |||
44 | DWORD gTotalBytes = -1; | 54 | DWORD gTotalBytes = -1; |
45 | HWND gWindow = NULL; | 55 | HWND gWindow = NULL; |
46 | WCHAR gProgress[256]; | 56 | WCHAR gProgress[256]; |
47 | char* gUpdateURL; | 57 | char* gUpdateURL = NULL; |
48 | 58 | ||
49 | #if _DEBUG | 59 | #if _DEBUG |
50 | FILE* logfile = 0; | 60 | std::ofstream logfile; |
61 | #define DEBUG(expr) logfile << expr << std::endl | ||
62 | #else | ||
63 | #define DEBUG(expr) /**/ | ||
51 | #endif | 64 | #endif |
52 | 65 | ||
53 | char* wchars_to_utf8chars(WCHAR* in_chars) | 66 | char* 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 | ||
79 | int WINAPI get_url_into_file(WCHAR *uri, char *path, int *cancelled) | 92 | class Fetcher |
93 | { | ||
94 | public: | ||
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 | |||
127 | private: | ||
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 | |||
152 | HINTERNET 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 | |||
160 | HINTERNET 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 | |||
167 | unsigned 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 | |||
176 | int 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 | } |