summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/opie.bbclass2
-rw-r--r--conf/distro/angstrom-2006.9.conf4
-rw-r--r--conf/distro/angstrom.conf2
-rw-r--r--conf/distro/jlime-donkey.conf24
-rw-r--r--conf/machine/include/handheld-common.conf2
-rw-r--r--conf/machine/include/zaurus-clamshell-2.4.conf2
-rw-r--r--conf/machine/include/zaurus-clamshell-2.6.conf2
-rw-r--r--files/device_table-jlime.txt21
-rw-r--r--packages/angstrom/task-angstrom.bb112
-rw-r--r--packages/autoconf/autoconf-2.59/sizeof_types.patch2
-rw-r--r--packages/autoconf/autoconf-native_2.59.bb2
-rw-r--r--packages/autoconf/autoconf_2.59.bb2
-rw-r--r--packages/ctorrent/ctorrent.inc3
-rw-r--r--packages/ctorrent/ctorrent_1.3.4.bb2
-rw-r--r--packages/ctorrent/files/extended_ctorrent.diff14406
-rw-r--r--packages/cyrus-sasl/cyrus-sasl-2.1.19/client.c.patch11
-rw-r--r--packages/cyrus-sasl/cyrus-sasl_2.1.19.bb3
-rw-r--r--packages/debianutils/debianutils_2.16.1.bb1
-rw-r--r--packages/efl++/efl++-fb_cvs.bb9
-rw-r--r--packages/efl++/efl++-x11_cvs.bb10
-rw-r--r--packages/efl++/efl++.inc2
-rw-r--r--packages/fbreader/fbreader_0.7.3d.bb3
-rw-r--r--packages/fluxbox/.mtn2git_empty (renamed from packages/libopie/libopie2-1.2.1/.mtn2git_empty)0
-rw-r--r--packages/fluxbox/fluxbox-gpe/.mtn2git_empty (renamed from packages/opie-aboutapplet/opie-aboutapplet-1.2.1/.mtn2git_empty)0
-rw-r--r--packages/fluxbox/fluxbox-gpe/apps.gpe57
-rw-r--r--packages/fluxbox/fluxbox-gpe/fluxbox-gpe-session30
-rw-r--r--packages/fluxbox/fluxbox-gpe/fluxbox-gpe.session9
-rw-r--r--packages/fluxbox/fluxbox-gpe/gpe-init.patch121
-rw-r--r--packages/fluxbox/fluxbox-gpe/style.gpe-default137
-rw-r--r--packages/fluxbox/fluxbox-gpe_1.0rc.bb77
-rw-r--r--packages/gcc/gcc_4.1.1.bb1
-rw-r--r--packages/glib-1.2/glib-1.2-1.2.10/glib-config-use-pkg-config24
-rw-r--r--packages/guile/files/.mtn2git_empty (renamed from packages/opie-button-settings/opie-button-settings-1.2.1/.mtn2git_empty)0
-rw-r--r--packages/guile/files/configure-lossage.patch (renamed from packages/guile/configure-lossage.patch)0
-rw-r--r--packages/guile/files/gcc4.patch16
-rw-r--r--packages/guile/guile_1.6.4.bb14
-rw-r--r--packages/icecast/icecast_2.2.0.bb6
-rw-r--r--packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty (renamed from packages/qt/qt4-x11-free-4.1.1/.mtn2git_empty)0
-rw-r--r--packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch17
-rw-r--r--packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb3
-rw-r--r--packages/ipkg/ipkg-native_0.99.163.bb9
-rw-r--r--packages/ircp/ircp_0.3.bb2
-rw-r--r--packages/libaal/libaal_1.0.4.bb2
-rw-r--r--packages/libmailwrapper/libmailwrapper_1.2.2.bb (renamed from packages/libmailwrapper/libmailwrapper_1.2.1.bb)0
-rw-r--r--packages/libopie/libopie2-1.2.1/openzaurus-branding.patch11
-rw-r--r--packages/libopie/libopie2_1.2.2.bb (renamed from packages/libopie/libopie2_1.2.1.bb)2
-rw-r--r--packages/libopieobex/libopieobex0_1.2.2.bb (renamed from packages/libopieobex/libopieobex0_1.2.1.bb)1
-rw-r--r--packages/libopieobex/libopieobex0_cvs.bb1
-rw-r--r--packages/libopietooth/libopietooth1_1.2.2.bb (renamed from packages/libopietooth/libopietooth1_1.2.1.bb)0
-rw-r--r--packages/libqpe/libqpe-opie/0905_datebookmonth.patch23
-rw-r--r--packages/libqpe/libqpe-opie_1.2.2.bb (renamed from packages/libqpe/libqpe-opie_1.2.1.bb)5
-rw-r--r--packages/libqpe/libqpe-opie_cvs.bb3
-rw-r--r--packages/libqtaux/libqtaux2_1.2.2.bb (renamed from packages/libqtaux/libqtaux2_1.2.1.bb)0
-rw-r--r--packages/linux/ep93xx-kernel_2.6.17.1.bb6
-rw-r--r--packages/linux/linux-jlime-sh3_2.6.16.20.bb12
-rw-r--r--packages/linux/linux-openzaurus-2.6.17/defconfig-collie394
-rw-r--r--packages/linux/linux-openzaurus_2.6.17.bb27
-rw-r--r--packages/linux/linux-titan-sh4-2.6.16/.mtn2git_empty0
-rw-r--r--packages/linux/linux-titan-sh4-2.6.16/titan-config1530
-rw-r--r--packages/linux/linux-titan-sh4-2.6.16/titan-flash.patch3157
-rw-r--r--packages/linux/linux-titan-sh4_2.6.16.bb52
-rw-r--r--packages/mc/mc_4.6.1.bb42
-rw-r--r--packages/mdadm/mdadm.inc3
-rw-r--r--packages/mdadm/mdadm_1.12.0.bb2
-rw-r--r--packages/meta/jlime-opie.bb68
-rw-r--r--packages/meta/slugos-packages.bb4
-rw-r--r--packages/meta/task-bootstrap-unionroot.bb2
-rw-r--r--packages/misc-binary-only/acx-firmware_1.0.bb4
-rw-r--r--packages/mplayer/mplayer-1.0pre8/.mtn2git_empty0
-rw-r--r--packages/mplayer/mplayer-1.0pre8/libmpcodecs-ogg-include.patch13
-rw-r--r--packages/mplayer/mplayer-1.0pre8/libmpdemux-ogg-include.patch13
-rw-r--r--packages/mplayer/mplayer_1.0pre8.bb4
-rw-r--r--packages/musicpd/mpd-alsa_0.11.5.bb10
-rw-r--r--packages/musicpd/mpd_0.11.5.bb10
-rw-r--r--packages/mutt/mutt-1.5.4i/keymap.h.patch11
-rw-r--r--packages/mutt/mutt_1.5.4i.bb2
-rw-r--r--packages/mutt/mutt_1.5.9i.bb1
-rw-r--r--packages/opie-aboutapplet/opie-aboutapplet-1.2.1/add-hrw-to-authors.patch18
-rw-r--r--packages/opie-aboutapplet/opie-aboutapplet-1.2.1/opie-1.2.1.patch18
-rw-r--r--packages/opie-aboutapplet/opie-aboutapplet_1.2.1.bb7
-rw-r--r--packages/opie-aboutapplet/opie-aboutapplet_1.2.2.bb4
-rw-r--r--packages/opie-addressbook/opie-addressbook_1.2.2.bb (renamed from packages/opie-addressbook/opie-addressbook_1.2.1.bb)0
-rw-r--r--packages/opie-advancedfm/opie-advancedfm_1.2.2.bb (renamed from packages/opie-advancedfm/opie-advancedfm_1.2.1.bb)0
-rw-r--r--packages/opie-alarm/opie-alarm_1.2.2.bb (renamed from packages/opie-alarm/opie-alarm_1.2.1.bb)0
-rw-r--r--packages/opie-appearance/opie-appearance_1.2.2.bb (renamed from packages/opie-appearance/opie-appearance_1.2.1.bb)1
-rw-r--r--packages/opie-aqpkg/opie-aqpkg_1.2.2.bb (renamed from packages/opie-aqpkg/opie-aqpkg_1.2.1.bb)0
-rw-r--r--packages/opie-autorotateapplet/opie-autorotateapplet_1.2.2.bb (renamed from packages/opie-autorotateapplet/opie-autorotateapplet_1.2.1.bb)0
-rw-r--r--packages/opie-backgammon/opie-backgammon_1.2.2.bb (renamed from packages/opie-backgammon/opie-backgammon_1.2.1.bb)0
-rw-r--r--packages/opie-backup/opie-backup_1.2.2.bb (renamed from packages/opie-backup/opie-backup_1.2.1.bb)1
-rw-r--r--packages/opie-bartender/opie-bartender_1.2.2.bb (renamed from packages/opie-bartender/opie-bartender_1.2.1.bb)0
-rw-r--r--packages/opie-batteryapplet/opie-batteryapplet_1.2.2.bb (renamed from packages/opie-batteryapplet/opie-batteryapplet_1.2.1.bb)1
-rw-r--r--packages/opie-batteryapplet/opie-batteryapplet_cvs.bb1
-rw-r--r--packages/opie-bluepin/opie-bluepin_1.2.2.bb (renamed from packages/opie-bluepin/opie-bluepin_1.2.1.bb)1
-rw-r--r--packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.2.bb (renamed from packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.1.bb)0
-rw-r--r--packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.2.bb (renamed from packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.1.bb)1
-rw-r--r--packages/opie-bluetoothmanager/opie-bluetoothmanager_cvs.bb1
-rw-r--r--packages/opie-bounce/opie-bounce_1.2.2.bb (renamed from packages/opie-bounce/opie-bounce_1.2.1.bb)0
-rw-r--r--packages/opie-brightnessapplet/opie-brightnessapplet_1.2.2.bb (renamed from packages/opie-brightnessapplet/opie-brightnessapplet_1.2.1.bb)0
-rw-r--r--packages/opie-button-settings/opie-button-settings-1.2.1/1624-bugfix.patch25
-rw-r--r--packages/opie-button-settings/opie-button-settings.inc2
-rw-r--r--packages/opie-button-settings/opie-button-settings_1.2.1.bb8
-rw-r--r--packages/opie-button-settings/opie-button-settings_1.2.2.bb6
-rw-r--r--packages/opie-buzzword/opie-buzzword_1.2.2.bb (renamed from packages/opie-buzzword/opie-buzzword_1.2.1.bb)0
-rw-r--r--packages/opie-calculator/opie-calculator_1.2.2.bb (renamed from packages/opie-calculator/opie-calculator_1.2.1.bb)0
-rw-r--r--packages/opie-camera/opie-camera_1.2.2.bb (renamed from packages/opie-camera/opie-camera_1.2.1.bb)0
-rw-r--r--packages/opie-cardmon/opie-cardmon_1.2.2.bb (renamed from packages/opie-cardmon/opie-cardmon_1.2.1.bb)0
-rw-r--r--packages/opie-checkbook/opie-checkbook_1.2.2.bb (renamed from packages/opie-checkbook/opie-checkbook_1.2.1.bb)0
-rw-r--r--packages/opie-citytime/opie-citytime_1.2.2.bb (renamed from packages/opie-citytime/opie-citytime_1.2.1.bb)0
-rw-r--r--packages/opie-clipboardapplet/opie-clipboardapplet_1.2.2.bb (renamed from packages/opie-clipboardapplet/opie-clipboardapplet_1.2.1.bb)1
-rw-r--r--packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb1
-rw-r--r--packages/opie-clock/opie-clock_1.2.2.bb (renamed from packages/opie-clock/opie-clock_1.2.1.bb)0
-rw-r--r--packages/opie-clockapplet/opie-clockapplet_1.2.2.bb (renamed from packages/opie-clockapplet/opie-clockapplet_1.2.1.bb)1
-rw-r--r--packages/opie-clockapplet/opie-clockapplet_cvs.bb1
-rw-r--r--packages/opie-confeditor/opie-confeditor_1.2.2.bb (renamed from packages/opie-confeditor/opie-confeditor_1.2.1.bb)0
-rw-r--r--packages/opie-console/opie-console_1.2.2.bb (renamed from packages/opie-console/opie-console_1.2.1.bb)1
-rw-r--r--packages/opie-dagger/opie-dagger_1.2.2.bb (renamed from packages/opie-dagger/opie-dagger_1.2.1.bb)0
-rw-r--r--packages/opie-dasher/opie-dasher_1.2.2.bb (renamed from packages/opie-dasher/opie-dasher_1.2.1.bb)0
-rw-r--r--packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.2.bb (renamed from packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.1.bb)0
-rw-r--r--packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.2.bb (renamed from packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.1.bb)0
-rw-r--r--packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.2.bb (renamed from packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.1.bb)0
-rw-r--r--packages/opie-datebook/opie-datebook_1.2.2.bb (renamed from packages/opie-datebook/opie-datebook_1.2.1.bb)1
-rw-r--r--packages/opie-deco-flat/opie-deco-flat_1.2.2.bb (renamed from packages/opie-deco-flat/opie-deco-flat_1.2.1.bb)0
-rw-r--r--packages/opie-deco-liquid/opie-deco-liquid_1.2.2.bb (renamed from packages/opie-deco-liquid/opie-deco-liquid_1.2.1.bb)0
-rw-r--r--packages/opie-deco-polished/opie-deco-polished_1.2.2.bb (renamed from packages/opie-deco-polished/opie-deco-polished_1.2.1.bb)0
-rw-r--r--packages/opie-doctab/opie-doctab_1.2.2.bb (renamed from packages/opie-doctab/opie-doctab_1.2.1.bb)0
-rw-r--r--packages/opie-drawpad/opie-drawpad_1.2.2.bb (renamed from packages/opie-drawpad/opie-drawpad_1.2.1.bb)0
-rw-r--r--packages/opie-dvorak/opie-dvorak_1.2.2.bb (renamed from packages/opie-dvorak/opie-dvorak_1.2.1.bb)0
-rw-r--r--packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.2.bb (renamed from packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.1.bb)0
-rw-r--r--packages/opie-euroconv/opie-euroconv_1.2.2.bb (renamed from packages/opie-euroconv/opie-euroconv_1.2.1.bb)0
-rw-r--r--packages/opie-examples-python/opie-examples-python_1.2.2.bb (renamed from packages/opie-examples-python/opie-examples-python_1.2.1.bb)1
-rw-r--r--packages/opie-examples-python/opie-examples-python_cvs.bb1
-rw-r--r--packages/opie-examples/opie-examples_1.2.2.bb (renamed from packages/opie-examples/opie-examples_1.2.1.bb)0
-rw-r--r--packages/opie-eye/opie-eye_1.2.2.bb (renamed from packages/opie-eye/opie-eye_1.2.1.bb)0
-rw-r--r--packages/opie-fifteen/opie-fifteen_1.2.2.bb (renamed from packages/opie-fifteen/opie-fifteen_1.2.1.bb)0
-rw-r--r--packages/opie-formatter/opie-formatter_1.2.2.bb (renamed from packages/opie-formatter/opie-formatter_1.2.1.bb)0
-rw-r--r--packages/opie-freetype/opie-freetype_1.2.2.bb (renamed from packages/opie-freetype/opie-freetype_1.2.1.bb)0
-rw-r--r--packages/opie-ftp/opie-ftp_1.2.2.bb (renamed from packages/opie-ftp/opie-ftp_1.2.1.bb)0
-rw-r--r--packages/opie-ftplib/opie-ftplib_1.2.2.bb (renamed from packages/opie-ftplib/opie-ftplib_1.2.1.bb)0
-rw-r--r--packages/opie-go/opie-go_1.2.2.bb (renamed from packages/opie-go/opie-go_1.2.1.bb)0
-rw-r--r--packages/opie-gutenbrowser/opie-gutenbrowser_1.2.2.bb (renamed from packages/opie-gutenbrowser/opie-gutenbrowser_1.2.1.bb)0
-rw-r--r--packages/opie-handwriting/opie-handwriting_1.2.2.bb (renamed from packages/opie-handwriting/opie-handwriting_1.2.1.bb)0
-rw-r--r--packages/opie-help-en/opie-help-en_1.2.2.bb (renamed from packages/opie-help-en/opie-help-en_1.2.1.bb)0
-rw-r--r--packages/opie-help-en/opie-help-en_cvs.bb2
-rw-r--r--packages/opie-helpbrowser/opie-helpbrowser_1.2.2.bb (renamed from packages/opie-helpbrowser/opie-helpbrowser_1.2.1.bb)0
-rw-r--r--packages/opie-homeapplet/opie-homeapplet_1.2.2.bb (renamed from packages/opie-homeapplet/opie-homeapplet_1.2.1.bb)0
-rw-r--r--packages/opie-i18n/opie-i18n_1.2.2.bb (renamed from packages/opie-i18n/opie-i18n_1.2.1.bb)0
-rw-r--r--packages/opie-i18n/opie-i18n_cvs.bb2
-rw-r--r--packages/opie-i18n/opie-lrelease-native_1.2.2.bb (renamed from packages/opie-i18n/opie-lrelease-native_1.2.1.bb)0
-rw-r--r--packages/opie-i18n/opie-lrelease-native_cvs.bb2
-rw-r--r--packages/opie-i18n/opie-lupdate-native_1.2.2.bb (renamed from packages/opie-i18n/opie-lupdate-native_1.2.1.bb)0
-rw-r--r--packages/opie-i18n/opie-lupdate-native_cvs.bb2
-rw-r--r--packages/opie-icon-reload/opie-icon-reload_1.2.2.bb (renamed from packages/opie-icon-reload/opie-icon-reload_1.2.1.bb)0
-rw-r--r--packages/opie-icon-reload/opie-icon-reload_cvs.bb2
-rw-r--r--packages/opie-irc/opie-irc_1.2.2.bb (renamed from packages/opie-irc/opie-irc_1.2.1.bb)0
-rw-r--r--packages/opie-irdaapplet/opie-irdaapplet_1.2.2.bb (renamed from packages/opie-irdaapplet/opie-irdaapplet_1.2.1.bb)1
-rw-r--r--packages/opie-irdaapplet/opie-irdaapplet_cvs.bb1
-rw-r--r--packages/opie-jumpx/opie-jumpx_1.2.2.bb (renamed from packages/opie-jumpx/opie-jumpx_1.2.1.bb)0
-rw-r--r--packages/opie-kbill/opie-kbill_1.2.2.bb (renamed from packages/opie-kbill/opie-kbill_1.2.1.bb)0
-rw-r--r--packages/opie-kcheckers/opie-kcheckers_1.2.2.bb (renamed from packages/opie-kcheckers/opie-kcheckers_1.2.1.bb)0
-rw-r--r--packages/opie-keyboard/opie-keyboard_1.2.2.bb (renamed from packages/opie-keyboard/opie-keyboard_1.2.1.bb)0
-rw-r--r--packages/opie-keypebble/opie-keypebble_1.2.2.bb (renamed from packages/opie-keypebble/opie-keypebble_1.2.1.bb)0
-rw-r--r--packages/opie-keytabs/opie-keytabs_1.2.2.bb (renamed from packages/opie-keytabs/opie-keytabs_1.2.1.bb)0
-rw-r--r--packages/opie-keytabs/opie-keytabs_cvs.bb2
-rw-r--r--packages/opie-keyview/opie-keyview_1.2.2.bb (renamed from packages/opie-keyview/opie-keyview_1.2.1.bb)0
-rw-r--r--packages/opie-kjumpx/opie-kjumpx_1.2.2.bb (renamed from packages/opie-kjumpx/opie-kjumpx_1.2.1.bb)0
-rw-r--r--packages/opie-kpacman/opie-kpacman_1.2.2.bb (renamed from packages/opie-kpacman/opie-kpacman_1.2.1.bb)0
-rw-r--r--packages/opie-language/opie-language_1.2.2.bb (renamed from packages/opie-language/opie-language_1.2.1.bb)0
-rw-r--r--packages/opie-launcher-settings/opie-launcher-settings_1.2.2.bb (renamed from packages/opie-launcher-settings/opie-launcher-settings_1.2.1.bb)0
-rw-r--r--packages/opie-libqrsync/opie-libqrsync_1.2.2.bb (renamed from packages/opie-libqrsync/opie-libqrsync_1.2.1.bb)0
-rw-r--r--packages/opie-light-and-power/opie-light-and-power_1.2.2.bb (renamed from packages/opie-light-and-power/opie-light-and-power_1.2.1.bb)0
-rw-r--r--packages/opie-lockapplet/opie-lockapplet_1.2.2.bb (renamed from packages/opie-lockapplet/opie-lockapplet_1.2.1.bb)1
-rw-r--r--packages/opie-lockapplet/opie-lockapplet_cvs.bb1
-rw-r--r--packages/opie-login/opie-login_1.2.2.bb (renamed from packages/opie-login/opie-login_1.2.1.bb)0
-rw-r--r--packages/opie-logoutapplet/opie-logoutapplet_1.2.2.bb (renamed from packages/opie-logoutapplet/opie-logoutapplet_1.2.1.bb)0
-rw-r--r--packages/opie-mail/opie-mail_1.2.2.bb (renamed from packages/opie-mail/opie-mail_1.2.1.bb)0
-rw-r--r--packages/opie-mailapplet/opie-mailapplet_1.2.2.bb (renamed from packages/opie-mailapplet/opie-mailapplet_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb (renamed from packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb (renamed from packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb (renamed from packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb (renamed from packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb (renamed from packages/opie-mediaplayer1/opie-mediaplayer1_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.2.bb (renamed from packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb2
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.2.bb (renamed from packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb2
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.2.bb (renamed from packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb2
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.2.bb (renamed from packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.1.bb)0
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb2
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2_1.2.2.bb (renamed from packages/opie-mediaplayer2/opie-mediaplayer2_1.2.1.bb)1
-rw-r--r--packages/opie-mediaplayer2/opie-mediaplayer2_cvs.bb3
-rw-r--r--packages/opie-mediummount/opie-mediummount_1.2.2.bb (renamed from packages/opie-mediummount/opie-mediummount_1.2.1.bb)1
-rw-r--r--packages/opie-memoryapplet/opie-memoryapplet_1.2.2.bb (renamed from packages/opie-memoryapplet/opie-memoryapplet_1.2.1.bb)1
-rw-r--r--packages/opie-memoryapplet/opie-memoryapplet_cvs.bb1
-rw-r--r--packages/opie-mindbreaker/opie-mindbreaker_1.2.2.bb (renamed from packages/opie-mindbreaker/opie-mindbreaker_1.2.1.bb)0
-rw-r--r--packages/opie-minesweep/opie-minesweep_1.2.2.bb (renamed from packages/opie-minesweep/opie-minesweep_1.2.1.bb)0
-rw-r--r--packages/opie-multikey/opie-multikey_1.2.2.bb (renamed from packages/opie-multikey/opie-multikey_1.2.1.bb)0
-rw-r--r--packages/opie-multikeyapplet/opie-multikeyapplet_1.2.2.bb (renamed from packages/opie-multikeyapplet/opie-multikeyapplet_1.2.1.bb)1
-rw-r--r--packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb1
-rw-r--r--packages/opie-networkapplet/opie-networkapplet_1.2.2.bb (renamed from packages/opie-networkapplet/opie-networkapplet_1.2.1.bb)0
-rw-r--r--packages/opie-networksettings/opie-networksettings_1.2.2.bb (renamed from packages/opie-networksettings/opie-networksettings_1.2.1.bb)0
-rw-r--r--packages/opie-notesapplet/opie-notesapplet_1.2.2.bb (renamed from packages/opie-notesapplet/opie-notesapplet_1.2.1.bb)0
-rw-r--r--packages/opie-odict/opie-odict_1.2.2.bb (renamed from packages/opie-odict/opie-odict_1.2.1.bb)0
-rw-r--r--packages/opie-oxygen/opie-oxygen_1.2.2.bb (renamed from packages/opie-oxygen/opie-oxygen_1.2.1.bb)0
-rw-r--r--packages/opie-oyatzee/opie-oyatzee_1.2.2.bb (renamed from packages/opie-oyatzee/opie-oyatzee_1.2.1.bb)0
-rw-r--r--packages/opie-packagemanager/opie-packagemanager_1.2.2.bb (renamed from packages/opie-packagemanager/opie-packagemanager_1.2.1.bb)1
-rw-r--r--packages/opie-parashoot/opie-parashoot_1.2.2.bb (renamed from packages/opie-parashoot/opie-parashoot_1.2.1.bb)0
-rw-r--r--packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.2.bb (renamed from packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.1.bb)1
-rw-r--r--packages/opie-pickboard/opie-pickboard_1.2.2.bb (renamed from packages/opie-pickboard/opie-pickboard_1.2.1.bb)0
-rw-r--r--packages/opie-pics/opie-pics_1.2.2.bb (renamed from packages/opie-pics/opie-pics_1.2.1.bb)0
-rw-r--r--packages/opie-pics/opie-pics_cvs.bb2
-rw-r--r--packages/opie-pimconverter/opie-pimconverter_1.2.2.bb (renamed from packages/opie-pimconverter/opie-pimconverter_1.2.1.bb)1
-rw-r--r--packages/opie-pimconverter/opie-pimconverter_cvs.bb1
-rw-r--r--packages/opie-powerchord/opie-powerchord_1.2.2.bb (renamed from packages/opie-powerchord/opie-powerchord_1.2.1.bb)0
-rw-r--r--packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.2.bb (renamed from packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.1.bb)1
-rw-r--r--packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_cvs.bb1
-rw-r--r--packages/opie-qasteroids/opie-qasteroids_1.2.2.bb (renamed from packages/opie-qasteroids/opie-qasteroids_1.2.1.bb)0
-rw-r--r--packages/opie-qcop/opie-qcop_1.2.2.bb (renamed from packages/opie-qcop/opie-qcop_1.2.1.bb)0
-rw-r--r--packages/opie-qss/opie-qss_1.2.2.bb (renamed from packages/opie-qss/opie-qss_1.2.1.bb)0
-rw-r--r--packages/opie-quicklauncher/opie-quicklauncher_1.2.2.bb (renamed from packages/opie-quicklauncher/opie-quicklauncher_1.2.1.bb)0
-rw-r--r--packages/opie-rdesktop/opie-rdesktop_1.2.2.bb (renamed from packages/opie-rdesktop/opie-rdesktop_1.2.1.bb)0
-rw-r--r--packages/opie-reader/opie-reader_1.2.2.bb (renamed from packages/opie-reader/opie-reader_1.2.1.bb)0
-rw-r--r--packages/opie-recorder/opie-recorder_1.2.2.bb (renamed from packages/opie-recorder/opie-recorder_1.2.1.bb)0
-rw-r--r--packages/opie-remote/opie-remote_1.2.2.bb (renamed from packages/opie-remote/opie-remote_1.2.1.bb)0
-rw-r--r--packages/opie-restartapplet/opie-restartapplet2_1.2.2.bb (renamed from packages/opie-restartapplet/opie-restartapplet2_1.2.1.bb)0
-rw-r--r--packages/opie-restartapplet/opie-restartapplet_1.2.2.bb (renamed from packages/opie-restartapplet/opie-restartapplet_1.2.1.bb)0
-rw-r--r--packages/opie-restartapplet2/opie-restartapplet2_1.2.2.bb (renamed from packages/opie-restartapplet2/opie-restartapplet2_1.2.1.bb)0
-rw-r--r--packages/opie-rotateapplet/opie-rotateapplet_1.2.2.bb (renamed from packages/opie-rotateapplet/opie-rotateapplet_1.2.1.bb)0
-rw-r--r--packages/opie-screenshotapplet/opie-screenshotapplet_1.2.2.bb (renamed from packages/opie-screenshotapplet/opie-screenshotapplet_1.2.1.bb)1
-rw-r--r--packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb1
-rw-r--r--packages/opie-search/opie-search_1.2.2.bb (renamed from packages/opie-search/opie-search_1.2.1.bb)0
-rw-r--r--packages/opie-security/opie-security_1.2.2.bb (renamed from packages/opie-security/opie-security_1.2.1.bb)1
-rw-r--r--packages/opie-security/opie-security_cvs.bb1
-rw-r--r--packages/opie-securityplugins/opie-securityplugin-blueping_1.2.2.bb (renamed from packages/opie-securityplugins/opie-securityplugin-blueping_1.2.1.bb)0
-rw-r--r--packages/opie-securityplugins/opie-securityplugin-dummy_1.2.2.bb (renamed from packages/opie-securityplugins/opie-securityplugin-dummy_1.2.1.bb)0
-rw-r--r--packages/opie-securityplugins/opie-securityplugin-notice_1.2.2.bb (renamed from packages/opie-securityplugins/opie-securityplugin-notice_1.2.1.bb)0
-rw-r--r--packages/opie-securityplugins/opie-securityplugin-pin_1.2.2.bb (renamed from packages/opie-securityplugins/opie-securityplugin-pin_1.2.1.bb)0
-rw-r--r--packages/opie-sfcave/opie-sfcave_1.2.2.bb (renamed from packages/opie-sfcave/opie-sfcave_1.2.1.bb)0
-rw-r--r--packages/opie-sh-snes/opie-sh-snes_1.2.2.bb (renamed from packages/opie-sh-snes/opie-sh-snes_1.2.1.bb)0
-rw-r--r--packages/opie-sh-snes/opie-sh-snes_cvs.bb2
-rw-r--r--packages/opie-sh/opie-sh_1.2.2.bb (renamed from packages/opie-sh/opie-sh_1.2.1.bb)0
-rw-r--r--packages/opie-sheet/opie-sheet_1.2.2.bb (renamed from packages/opie-sheet/opie-sheet_1.2.1.bb)0
-rw-r--r--packages/opie-snake/opie-snake_1.2.2.bb (renamed from packages/opie-snake/opie-snake_1.2.1.bb)0
-rw-r--r--packages/opie-solitaire/opie-solitaire_1.2.2.bb (renamed from packages/opie-solitaire/opie-solitaire_1.2.1.bb)0
-rw-r--r--packages/opie-sounds/opie-sounds_1.2.2.bb (renamed from packages/opie-sounds/opie-sounds_1.2.1.bb)0
-rw-r--r--packages/opie-sounds/opie-sounds_cvs.bb2
-rw-r--r--packages/opie-sshkeys/opie-sshkeys_1.2.2.bb (renamed from packages/opie-sshkeys/opie-sshkeys_1.2.1.bb)0
-rw-r--r--packages/opie-stumbler/opie-stumbler_1.2.2.bb (renamed from packages/opie-stumbler/opie-stumbler_1.2.1.bb)0
-rw-r--r--packages/opie-style-flat/opie-style-flat_1.2.2.bb (renamed from packages/opie-style-flat/opie-style-flat_1.2.1.bb)0
-rw-r--r--packages/opie-style-fresh/opie-style-fresh_1.2.2.bb (renamed from packages/opie-style-fresh/opie-style-fresh_1.2.1.bb)0
-rw-r--r--packages/opie-style-liquid/opie-style-liquid_1.2.2.bb (renamed from packages/opie-style-liquid/opie-style-liquid_1.2.1.bb)0
-rw-r--r--packages/opie-style-metal/opie-style-metal_1.2.2.bb (renamed from packages/opie-style-metal/opie-style-metal_1.2.1.bb)0
-rw-r--r--packages/opie-style-phase/opie-style-phase_1.2.2.bb (renamed from packages/opie-style-phase/opie-style-phase_1.2.1.bb)0
-rw-r--r--packages/opie-style-web/opie-style-web_1.2.2.bb (renamed from packages/opie-style-web/opie-style-web_1.2.1.bb)0
-rw-r--r--packages/opie-suspendapplet/opie-suspendapplet_1.2.2.bb (renamed from packages/opie-suspendapplet/opie-suspendapplet_1.2.1.bb)0
-rw-r--r--packages/opie-symlinker/opie-symlinker_1.2.2.bb (renamed from packages/opie-symlinker/opie-symlinker_1.2.1.bb)0
-rw-r--r--packages/opie-sysinfo/opie-sysinfo_1.2.2.bb (renamed from packages/opie-sysinfo/opie-sysinfo_1.2.1.bb)0
-rw-r--r--packages/opie-systemtime/opie-systemtime_1.2.2.bb (renamed from packages/opie-systemtime/opie-systemtime_1.2.1.bb)0
-rw-r--r--packages/opie-tableviewer/opie-tableviewer_1.2.2.bb (renamed from packages/opie-tableviewer/opie-tableviewer_1.2.1.bb)0
-rw-r--r--packages/opie-taskbar/opie-taskbar.inc11
-rw-r--r--packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume33
-rw-r--r--packages/opie-taskbar/opie-taskbar_1.2.2.bb (renamed from packages/opie-taskbar/opie-taskbar_1.2.1.bb)3
-rw-r--r--packages/opie-taskbar/opie-taskbar_cvs.bb3
-rw-r--r--packages/opie-tetrix/opie-tetrix_1.2.2.bb (renamed from packages/opie-tetrix/opie-tetrix_1.2.1.bb)0
-rw-r--r--packages/opie-textedit/opie-textedit_1.2.2.bb (renamed from packages/opie-textedit/opie-textedit_1.2.1.bb)0
-rw-r--r--packages/opie-theme/opie-theme_1.2.2.bb (renamed from packages/opie-theme/opie-theme_1.2.1.bb)0
-rw-r--r--packages/opie-tictac/opie-tictac_1.2.2.bb (renamed from packages/opie-tictac/opie-tictac_1.2.1.bb)0
-rw-r--r--packages/opie-tinykate/opie-tinykate_1.2.2.bb (renamed from packages/opie-tinykate/opie-tinykate_1.2.1.bb)0
-rw-r--r--packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.2.bb (renamed from packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.2.bb (renamed from packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.2.bb (renamed from packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-mailplugin/opie-today-mailplugin_1.2.2.bb (renamed from packages/opie-today-mailplugin/opie-today-mailplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.2.bb (renamed from packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.2.bb (renamed from packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.2.bb (renamed from packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.1.bb)0
-rw-r--r--packages/opie-today/opie-today_1.2.2.bb (renamed from packages/opie-today/opie-today_1.2.1.bb)0
-rw-r--r--packages/opie-todo/opie-todo_1.2.2.bb (renamed from packages/opie-todo/opie-todo_1.2.1.bb)0
-rw-r--r--packages/opie-tonleiter/opie-tonleiter_1.2.2.bb (renamed from packages/opie-tonleiter/opie-tonleiter_1.2.1.bb)0
-rw-r--r--packages/opie-unikeyboard/opie-unikeyboard_1.2.2.bb (renamed from packages/opie-unikeyboard/opie-unikeyboard_1.2.1.bb)0
-rw-r--r--packages/opie-usermanager/opie-usermanager_1.2.2.bb (renamed from packages/opie-usermanager/opie-usermanager_1.2.1.bb)0
-rw-r--r--packages/opie-vmemo-settings/opie-vmemo-settings_1.2.2.bb (renamed from packages/opie-vmemo-settings/opie-vmemo-settings_1.2.1.bb)0
-rw-r--r--packages/opie-vmemo/opie-vmemo_1.2.2.bb (renamed from packages/opie-vmemo/opie-vmemo_1.2.1.bb)0
-rw-r--r--packages/opie-volumeapplet/opie-volumeapplet_1.2.2.bb (renamed from packages/opie-volumeapplet/opie-volumeapplet_1.2.1.bb)1
-rw-r--r--packages/opie-volumeapplet/opie-volumeapplet_cvs.bb1
-rw-r--r--packages/opie-vtapplet/opie-vtapplet_1.2.2.bb (renamed from packages/opie-vtapplet/opie-vtapplet_1.2.1.bb)0
-rw-r--r--packages/opie-wellenreiter/opie-wellenreiter_1.2.2.bb (renamed from packages/opie-wellenreiter/opie-wellenreiter_1.2.1.bb)1
-rw-r--r--packages/opie-wirelessapplet/opie-wirelessapplet_1.2.2.bb (renamed from packages/opie-wirelessapplet/opie-wirelessapplet_1.2.1.bb)0
-rw-r--r--packages/opie-wordgame/opie-wordgame_1.2.2.bb (renamed from packages/opie-wordgame/opie-wordgame_1.2.1.bb)0
-rw-r--r--packages/opie-write/opie-write_1.2.2.bb (renamed from packages/opie-write/opie-write_1.2.1.bb)0
-rw-r--r--packages/opie-zkbapplet/opie-zkbapplet_1.2.2.bb (renamed from packages/opie-zkbapplet/opie-zkbapplet_1.2.1.bb)0
-rw-r--r--packages/opie-zlines/opie-zlines_1.2.2.bb (renamed from packages/opie-zlines/opie-zlines_1.2.1.bb)0
-rw-r--r--packages/opie-zsafe/opie-zsafe_1.2.2.bb (renamed from packages/opie-zsafe/opie-zsafe_1.2.1.bb)0
-rw-r--r--packages/opie-zsame/opie-zsame_1.2.2.bb (renamed from packages/opie-zsame/opie-zsame_1.2.1.bb)0
-rw-r--r--packages/perl/perl-5.8.7/config.sh-sh3-linux22
-rw-r--r--packages/psmisc/psmisc-21.8/libintl-link.patch29
-rw-r--r--packages/psmisc/psmisc_21.8.bb7
-rw-r--r--packages/pvrusb2-mci/files/.mtn2git_empty0
-rwxr-xr-xpackages/pvrusb2-mci/files/firmware.hotplug61
-rwxr-xr-xpackages/pvrusb2-mci/files/hotplug.functions193
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/configurable-cpu-extensions.patch34
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/cross-compile.patch159
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/fix-mkspecs.patch102
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/fix-resinit-declaration.patch16
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/gcc4_1.patch50
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/no-qmake.patch16
-rw-r--r--packages/qt/qt4-x11-free-4.1.1/no-tools.patch16
-rw-r--r--packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch16
-rw-r--r--packages/qt/qt4-x11-free_4.1.1.bb138
-rw-r--r--packages/qt/qt4-x11-free_4.1.2.bb27
-rw-r--r--packages/qte/qte-2.3.10/suspend-resume-hooks.patch28
-rw-r--r--packages/qte/qte-mt-static_2.3.10.bb2
-rw-r--r--packages/qte/qte-mt_2.3.10.bb2
-rw-r--r--packages/qte/qte_2.3.10.bb2
-rw-r--r--packages/radlib/files/.mtn2git_empty0
-rw-r--r--packages/radlib/files/Makefile.am.patch24
-rw-r--r--packages/radlib/radlib-common.inc3
-rw-r--r--packages/radlib/radlib-mysql_2.6.2.bb2
-rw-r--r--packages/radlib/radlib_2.6.2.bb2
-rw-r--r--packages/radlib/x1
-rw-r--r--packages/reiser4progs/files/key_large.c.patch20
-rw-r--r--packages/reiser4progs/files/key_short.c.patch20
-rw-r--r--packages/reiser4progs/files/oid40.c.patch11
-rw-r--r--packages/reiser4progs/reiser4progs_1.0.4.bb7
-rw-r--r--packages/samba/samba-essential_3.0.20.bb4
-rw-r--r--packages/scummvm/files/gcc-4.x.x-accept.patch11
-rw-r--r--packages/scummvm/files/sh3-arch-0.9.0+.patch18
-rw-r--r--packages/scummvm/files/sh3-linux-new-arch.patch18
-rw-r--r--packages/scummvm/files/tail-obselete-fix.patch11
-rw-r--r--packages/scummvm/scummvm.inc3
-rw-r--r--packages/scummvm/scummvm_0.6.1b.bb6
-rw-r--r--packages/scummvm/scummvm_0.9.0.bb10
-rw-r--r--packages/suspend-desktop/suspend-desktop_1.0.bb8
-rw-r--r--packages/sword/sword_1.5.8.bb16
-rw-r--r--packages/sylpheed/sylpheed-claws-plugin-gtkhtml2-viewer-0.10.1_2.3.0.bb6
-rw-r--r--packages/sylpheed/sylpheed-claws-plugin-maildir-0.24.1_2.3.0.bb6
-rw-r--r--packages/sylpheed/sylpheed-claws-plugin-rssyl-0.5_2.3.0.bb6
-rw-r--r--packages/sylpheed/sylpheed-claws_2.3.1.bb35
-rw-r--r--packages/wireless-tools/wireless-tools_29-pre10.bb42
-rw-r--r--packages/wlan-ng/wlan-ng-modules-0.2.3/config.in6
-rw-r--r--packages/wlan-ng/wlan-ng-modules-0.2.3/modules-symvers.patch75
-rw-r--r--packages/wlan-ng/wlan-ng-modules.inc1
-rw-r--r--packages/wlan-ng/wlan-ng-modules_0.2.3.bb3
-rw-r--r--packages/wview/files/.mtn2git_empty0
-rw-r--r--packages/wview/files/Makefile.am.patch24
-rw-r--r--packages/wview/wview-common.inc5
-rw-r--r--packages/wview/wview-sim_3.1.3.bb2
-rw-r--r--packages/wview/wview-vpro_3.1.3.bb2
-rw-r--r--packages/wview/wview-wxt510_3.1.3.bb2
-rw-r--r--packages/xinetd/xinetd/service.c.patch24
-rw-r--r--packages/xinetd/xinetd_2.3.13.bb3
-rw-r--r--packages/zile/zile_2.2.15.bb11
-rw-r--r--site/arm-linux6
-rw-r--r--site/armeb-linux3
-rw-r--r--site/armeb-linux-uclibc3
-rw-r--r--site/sh4-linux-uclibc5
355 files changed, 20684 insertions, 1471 deletions
diff --git a/classes/opie.bbclass b/classes/opie.bbclass
index 47f364a644..6430d46d6a 100644
--- a/classes/opie.bbclass
+++ b/classes/opie.bbclass
@@ -18,7 +18,7 @@ inherit palmtop
# Note that when CVS changes to 1.2.2, the dash
# should be removed from OPIE_CVS_PV to convert
# to the standardised version format
-OPIE_CVS_PV = "1.2.1+cvs-${SRCDATE}"
+OPIE_CVS_PV = "1.2.2+cvs-${SRCDATE}"
DEPENDS_prepend = "${@["libopie2 ", ""][(bb.data.getVar('PN', d, 1) == 'libopie2')]}"
diff --git a/conf/distro/angstrom-2006.9.conf b/conf/distro/angstrom-2006.9.conf
index 86f3eaa1fb..be7241b0de 100644
--- a/conf/distro/angstrom-2006.9.conf
+++ b/conf/distro/angstrom-2006.9.conf
@@ -22,8 +22,8 @@ FEED_URIS += " \
# ${MACHINE}##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${MACHINE} \
# updates##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/updates"
-SRCDATE = "20060518"
-SRCDATE_handhelds-pxa-2.6 = "20060622"
+SRCDATE = "20060630"
+#SRCDATE_handhelds-pxa-2.6 = "20060622"
CVS_TARBALL_STASH = "\
http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/sources/ \
diff --git a/conf/distro/angstrom.conf b/conf/distro/angstrom.conf
index d30fcd3cca..b368405939 100644
--- a/conf/distro/angstrom.conf
+++ b/conf/distro/angstrom.conf
@@ -23,7 +23,7 @@ ENABLE_BINARY_LOCALE_GENERATION ?= ""
#Use the ARM EABI when building for an ARM cpu. We can't use overrides
#here because this breaks all places where ":=" is used.
#if you want to build using uclibc, specify "-uclibcgnueabi"
-TARGET_VENDOR = "${@['','-angstrom'][bb.data.getVar('TARGET_ARCH',d,1)=='arm']}"
+TARGET_VENDOR = "-angstrom"
TARGET_OS = "linux${@['','-gnueabi'][bb.data.getVar('TARGET_ARCH',d,1)=='arm']}"
#uclibc (needs gcc 4.1.1 or newer)
#TARGET_OS = "linux${@['','-uclibcgnueabi'][bb.data.getVar('TARGET_ARCH',d,1)=='arm']}"
diff --git a/conf/distro/jlime-donkey.conf b/conf/distro/jlime-donkey.conf
index c351d841d0..a103ddaf7c 100644
--- a/conf/distro/jlime-donkey.conf
+++ b/conf/distro/jlime-donkey.conf
@@ -6,24 +6,28 @@
DISTRO_NAME = "jlime"
DISTRO_VERSION = "donkey"
-export FEED_URLS_jlime = "donkey##http://www.jlime.com/downloads/Releases/donkey/${TARGET_ARCH}/feed/"
+export FEED_URLS_jlime = "donkey##http://www.jlime.com/downloads/releases/donkey/${TARGET_ARCH}/feed/"
#<>
#<> We will set CVS DATE when things are known to work.
#<>
-#SRCDATE = "20060516"
+SRCDATE = "20060627"
PREFERRED_PROVIDERS = "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}libc-for-gcc:glibc"
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}g++:gcc-cross"
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}libc-for-gcc:glibc"
+
+#<> We want this so we can crosscompile the kernel using gcc 3.4.3
+#<> Also, select version of modules (and kernel)
+#<>
+PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc-3.4.4:gcc-cross-kernel"
PREFERRED_PROVIDER_virtual/kernel = "linux-jlime-${TARGET_ARCH}"
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-PREFERRED_VERSION_kernel-modules = "2.6.16.20"
#<>
#<>We want kdrive as our default X-Server.
#<>
-PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
#<>
#<>Setting Preferred Binutils,gcc,glibc and linux-libc-headers
@@ -67,9 +71,9 @@ TARGET_OS = "linux"
#<>
#<>
BOOTSTRAP_EXTRA_RDEPENDS += "pcmciautils ncurses nano wireless-tools console-tools coreutils udev \
- e2tools e2fsprogs"
+ e2tools e2fsprogs kernel-modules"
BOOTSTRAP_EXTRA_DEPENDS += "pcmciautils ncurses nano wireless-tools console-tools coreutils udev \
- e2tools e2fsprogs"
+ e2tools e2fsprogs kernel-modules"
#<>
#<>What Opie version should we use.
diff --git a/conf/machine/include/handheld-common.conf b/conf/machine/include/handheld-common.conf
index f8767d2ddf..9ac43d84e9 100644
--- a/conf/machine/include/handheld-common.conf
+++ b/conf/machine/include/handheld-common.conf
@@ -18,6 +18,6 @@ input uinput \
# Configuration bits for "generic handheld"
BOOTSTRAP_EXTRA_RDEPENDS += "${PCMCIA_MANAGER} apm apmd network-suspend-scripts"
-BOOTSTRAP_EXTRA_RRECOMMENDS += "ppp wireless-tools irda-utils openswan wpa-supplicant-nossl lrzsz ppp-dialin ${@linux_module_packages('${HANDHELD_MODULES}', d)}"
+BOOTSTRAP_EXTRA_RRECOMMENDS += "ppp wireless-tools irda-utils wpa-supplicant-nossl lrzsz ppp-dialin ${@linux_module_packages('${HANDHELD_MODULES}', d)}"
INHERIT += "linux_modules"
diff --git a/conf/machine/include/zaurus-clamshell-2.4.conf b/conf/machine/include/zaurus-clamshell-2.4.conf
index b2ca8370e7..5c8fce4398 100644
--- a/conf/machine/include/zaurus-clamshell-2.4.conf
+++ b/conf/machine/include/zaurus-clamshell-2.4.conf
@@ -11,7 +11,7 @@ PREFERRED_VERSION_orinoco-modules = "0.13e"
BOOTSTRAP_EXTRA_RDEPENDS += "kernel hostap-modules-cs orinoco-modules-cs sharp-sdmmc-support \
pcmcia-cs apmd apm wireless-tools keymaps irda-utils hostap-utils prism3-firmware prism3-support \
-wpa-supplicant-nossl ppp ppp-dialin openswan"
+wpa-supplicant-nossl ppp ppp-dialin "
# Misc Modules
BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-net-fd kernel-module-registers"
diff --git a/conf/machine/include/zaurus-clamshell-2.6.conf b/conf/machine/include/zaurus-clamshell-2.6.conf
index 97030e66a7..8c91a7b29a 100644
--- a/conf/machine/include/zaurus-clamshell-2.6.conf
+++ b/conf/machine/include/zaurus-clamshell-2.6.conf
@@ -8,7 +8,7 @@ PCMCIA_MANAGER ?= "pcmciautils"
BOOTSTRAP_EXTRA_RDEPENDS += "kernel udev sysfsutils spectrum-fw \
${PCMCIA_MANAGER} apm wireless-tools irda-utils udev-utils keymaps hostap-utils prism3-firmware prism3-support \
-ppp ppp-dialin openswan wpa-supplicant-nossl alsa-utils-alsactl alsa-utils-alsamixer module-init-tools alsa-conf zaurusd"
+ppp ppp-dialin wpa-supplicant-nossl alsa-utils-alsactl alsa-utils-alsamixer module-init-tools alsa-conf zaurusd"
# Ethernet modules
BOOTSTRAP_EXTRA_RDEPENDS += "kernel-module-pcnet-cs"
diff --git a/files/device_table-jlime.txt b/files/device_table-jlime.txt
new file mode 100644
index 0000000000..c0a219f006
--- /dev/null
+++ b/files/device_table-jlime.txt
@@ -0,0 +1,21 @@
+/dev/initctl p 600 0 0 - - - -
+/dev/dsp c 644 0 0 14 3 - - -
+/dev/apm_bios c 660 0 46 10 134 - - -
+/dev/fb0 c 600 0 0 29 0 - - -
+/dev/hda b 660 0 6 3 0 - - -
+/dev/hda b 660 0 6 3 1 1 1 20
+/dev/kmem c 640 0 15 1 2 - - -
+/dev/mem c 640 0 15 1 1 - - -
+/dev/null c 666 0 0 1 3 - - -
+/dev/ram b 640 0 0 1 0 0 1 4
+/dev/tty c 662 0 5 5 0 - - -
+/dev/tty c 666 0 5 4 0 0 1 9
+/dev/ttyS c 640 0 5 4 64 0 1 1
+/dev/ttySA c 640 0 5 204 5 0 1 1
+/dev/zero c 644 0 0 1 5 - -
+/dev/mtd c 660 0 6 90 0 0 2 8
+/dev/mtdblock b 640 0 0 31 0 0 1 8
+/dev/console c 662 0 5 5 1 - -
+/bin/tinylogin f 4755 0 0 - - - -
+/bin/mount f 4755 0 0 - - - -
+/bin/umount f 4755 0 0 - - - -
diff --git a/packages/angstrom/task-angstrom.bb b/packages/angstrom/task-angstrom.bb
new file mode 100644
index 0000000000..c7323314db
--- /dev/null
+++ b/packages/angstrom/task-angstrom.bb
@@ -0,0 +1,112 @@
+DESCRIPTION = "Task packages for the Angstrom distribution"
+PR = "r0"
+ALLOW_EMPTY = "1"
+
+PACKAGES = "\
+ angstrom-X-base-depends \
+ angsgrom-gpe-task-base \
+ angstrom-gpe-task-settings \
+ angstrom-gpe-task-pim \
+ angstrom-gpe-task-apps \
+ angstgrom-gpe-task-games \
+ angstrom-task-office \
+ angstrom-task-printing \
+ angstrom-task-sectest"
+
+RDEPENDS_angstrom-X-base-depends := "\
+ diet-x11 \
+ virtual/xserver"
+
+RDEPENDS_angstrom-gpe-task-base := "\
+ matchbox \
+ xcursor-transparent-theme \
+ rxvt-unicode \
+ matchbox-themes-gtk \
+ xst \
+ xhost \
+ xrdb \
+ gpe-soundserver \
+ ttf-dejavu \
+ gpe-dm \
+ gpe-login \
+ gpe-session-scripts \
+ gpe-icons \
+ gpe-confd \
+ gpe-autostarter \
+ libgtkstylus \
+ libgtkinput \
+ suspend-desktop \
+ teleport \
+ xauth \
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-xpm \
+ gdk-pixbuf-loader-jpeg \
+ pango-module-basic-x \
+ pango-module-basic-fc"
+
+RDEPENDS_angstrom-gpe-task-pim := "\
+ gpe-timesheet \
+ gpe-todo \
+ gpe-calendar \
+ gpe-contacts \
+ gpesyncd"
+
+RDEPENDS_angstrom-gpe-task-settings := "\
+ matchbox-panel-manager \
+ gpe-su \
+ gpe-conf \
+ gpe-package \
+ gpe-shield \
+ gpe-taskmanager \
+ minilite \
+ minimix \
+ xmonobut"
+
+RDEPENDS_angstrom-gpe-task-apps := "\
+ gpe-edit \
+ gpe-gallery \
+ gpe-calculator \
+ gpe-clock \
+ gpe-plucker \
+ gpe-terminal \
+ gpe-watch \
+ gpe-what \
+ matchbox-panel-hacks \
+ gpe-aerial \
+ gpe-soundbite \
+ rosetta \
+ gpe-screenshot \
+ gpe-windowlist"
+
+RDEPENDS_angstrom-gpe-task-games := "\
+ gpe-go \
+ gpe-lights \
+ gpe-othello \
+ gpe-tetris \
+ gsoko \
+ xdemineur"
+
+RDEPENDS_angstrom-task-office := "\
+ gnumeric \
+ abiword \
+ imposter \
+ evince \
+ gqview"
+
+RDEPENDS_angstrom-task-printing := "\
+ cups \
+ gnome-cups-manager"
+
+RDEPENDS_angstrom-task-sectest := "\
+ nmap \
+ ettercap \
+ stunnel \
+ curl \
+ dsniff \
+ prismstumbler \
+ tcpdump \
+ kismet \
+ hydra \
+ thcrut \
+ driftnet \
+ miniclipboard"
diff --git a/packages/autoconf/autoconf-2.59/sizeof_types.patch b/packages/autoconf/autoconf-2.59/sizeof_types.patch
index 9a6e47453e..0f1e0d1fee 100644
--- a/packages/autoconf/autoconf-2.59/sizeof_types.patch
+++ b/packages/autoconf/autoconf-2.59/sizeof_types.patch
@@ -36,7 +36,7 @@
+[
+if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$3])],
-+ [static const $1 x[[256]];])],
++ [extern void dummy($1); static const $1 x[[256]]; dummy(x);])],
+ [
+ AS_TR_SH([ac_cv_sizeof_$1])=`$SIZE conftest.$ac_objext | tail -n 1 | $AWK '{print [$]3/256}'`
+ ],
diff --git a/packages/autoconf/autoconf-native_2.59.bb b/packages/autoconf/autoconf-native_2.59.bb
index 21a2002453..aac4b67ada 100644
--- a/packages/autoconf/autoconf-native_2.59.bb
+++ b/packages/autoconf/autoconf-native_2.59.bb
@@ -2,7 +2,7 @@ SECTION = "devel"
include autoconf_${PV}.bb
DEPENDS = "m4-native gnu-config-native"
RDEPENDS_${PN} = "m4-native gnu-config-native"
-RRECOMMENDS_${PN} = "automake-native"
+RRECOMMENDS_${PN} = ""
S = "${WORKDIR}/autoconf-${PV}"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/autoconf-${PV}"
diff --git a/packages/autoconf/autoconf_2.59.bb b/packages/autoconf/autoconf_2.59.bb
index 3cc962da01..505b2bec9e 100644
--- a/packages/autoconf/autoconf_2.59.bb
+++ b/packages/autoconf/autoconf_2.59.bb
@@ -6,7 +6,7 @@ SECTION = "devel"
DEPENDS += "m4-native"
RDEPENDS_${PN} = "m4 gnu-config"
RRECOMMENDS_${PN} = "automake"
-PR = "r4"
+PR = "r5"
SRC_URI = "${GNU_MIRROR}/autoconf/autoconf-${PV}.tar.bz2 \
file://program_prefix.patch;patch=1 \
diff --git a/packages/ctorrent/ctorrent.inc b/packages/ctorrent/ctorrent.inc
index 67f270c0ba..a6a2f8bc35 100644
--- a/packages/ctorrent/ctorrent.inc
+++ b/packages/ctorrent/ctorrent.inc
@@ -1,5 +1,6 @@
DESCRIPTION = "CTorrent is a console BitTorrent client written in the C \
-programming language."
+programming language. This version is with the extensions from \
+http://www.rahul.net/dholmes/ctorrent/ (dnh2 + vfat patch)"
DEPENDS = "openssl"
LICENSE = "GPL"
SECTION = "network"
diff --git a/packages/ctorrent/ctorrent_1.3.4.bb b/packages/ctorrent/ctorrent_1.3.4.bb
index d2b02e8748..561bd0d432 100644
--- a/packages/ctorrent/ctorrent_1.3.4.bb
+++ b/packages/ctorrent/ctorrent_1.3.4.bb
@@ -1,4 +1,4 @@
include ctorrent.inc
-PR = "r5"
+PR = "r6"
SRC_URI += "file://extended_ctorrent.diff;patch=1"
diff --git a/packages/ctorrent/files/extended_ctorrent.diff b/packages/ctorrent/files/extended_ctorrent.diff
index d35c434d07..ca016fe037 100644
--- a/packages/ctorrent/files/extended_ctorrent.diff
+++ b/packages/ctorrent/files/extended_ctorrent.diff
@@ -1,17 +1,1531 @@
-Only in ctorrent-1.3.4: README-DNH.TXT
-diff -u ctorrent-1.3.4.orig/btconfig.cpp ctorrent-1.3.4/btconfig.cpp
---- ctorrent-1.3.4.orig/btconfig.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btconfig.cpp 2005-08-11 23:45:29.424694440 +0200
-@@ -1,6 +1,7 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/aclocal.m4 ctorrent-1.3.4/aclocal.m4
+--- ctorrent-1.3.4.sav/aclocal.m4 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/aclocal.m4 2006-06-28 19:30:02.000000000 +0200
+@@ -1,6 +1,6 @@
+-# generated automatically by aclocal 1.7.6 -*- Autoconf -*-
++# generated automatically by aclocal 1.9.1 -*- Autoconf -*-
+
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+ # Free Software Foundation, Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+@@ -11,132 +11,9 @@
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+
+-# Do all the work for Automake. -*- Autoconf -*-
+-
+-# This macro actually does too much some checks are only needed if
+-# your package does certain things. But this isn't really a big deal.
+-
+-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+-# Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 10
+-
+-AC_PREREQ([2.54])
+-
+-# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
+-# the ones we care about.
+-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+-
+-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+-# AM_INIT_AUTOMAKE([OPTIONS])
+-# -----------------------------------------------
+-# The call with PACKAGE and VERSION arguments is the old style
+-# call (pre autoconf-2.50), which is being phased out. PACKAGE
+-# and VERSION should now be passed to AC_INIT and removed from
+-# the call to AM_INIT_AUTOMAKE.
+-# We support both call styles for the transition. After
+-# the next Automake release, Autoconf can make the AC_INIT
+-# arguments mandatory, and then we can depend on a new Autoconf
+-# release and drop the old call support.
+-AC_DEFUN([AM_INIT_AUTOMAKE],
+-[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+- AC_REQUIRE([AC_PROG_INSTALL])dnl
+-# test to see if srcdir already configured
+-if test "`cd $srcdir && pwd`" != "`pwd`" &&
+- test -f $srcdir/config.status; then
+- AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+-fi
+-
+-# test whether we have cygpath
+-if test -z "$CYGPATH_W"; then
+- if (cygpath --version) >/dev/null 2>/dev/null; then
+- CYGPATH_W='cygpath -w'
+- else
+- CYGPATH_W=echo
+- fi
+-fi
+-AC_SUBST([CYGPATH_W])
+-
+-# Define the identity of the package.
+-dnl Distinguish between old-style and new-style calls.
+-m4_ifval([$2],
+-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+- AC_SUBST([PACKAGE], [$1])dnl
+- AC_SUBST([VERSION], [$2])],
+-[_AM_SET_OPTIONS([$1])dnl
+- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+-
+-_AM_IF_OPTION([no-define],,
+-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+-
+-# Some tools Automake needs.
+-AC_REQUIRE([AM_SANITY_CHECK])dnl
+-AC_REQUIRE([AC_ARG_PROGRAM])dnl
+-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+-AM_MISSING_PROG(AUTOCONF, autoconf)
+-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+-AM_MISSING_PROG(AUTOHEADER, autoheader)
+-AM_MISSING_PROG(MAKEINFO, makeinfo)
+-AM_MISSING_PROG(AMTAR, tar)
+-AM_PROG_INSTALL_SH
+-AM_PROG_INSTALL_STRIP
+-# We need awk for the "check" target. The system "awk" is bad on
+-# some platforms.
+-AC_REQUIRE([AC_PROG_AWK])dnl
+-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+-
+-_AM_IF_OPTION([no-dependencies],,
+-[AC_PROVIDE_IFELSE([AC_PROG_CC],
+- [_AM_DEPENDENCIES(CC)],
+- [define([AC_PROG_CC],
+- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+-AC_PROVIDE_IFELSE([AC_PROG_CXX],
+- [_AM_DEPENDENCIES(CXX)],
+- [define([AC_PROG_CXX],
+- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+-])
+-])
+-
+-
+-# When config.status generates a header, we must update the stamp-h file.
+-# This file resides in the same directory as the config header
+-# that is generated. The stamp files are numbered to have different names.
+-
+-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+-# loop where config.status creates the headers, so we can generate
+-# our stamp files there.
+-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+-[# Compute $1's index in $config_headers.
+-_am_stamp_count=1
+-for _am_header in $config_headers :; do
+- case $_am_header in
+- $1 | $1:* )
+- break ;;
+- * )
+- _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+- esac
+-done
+-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+-
+-# Copyright 2002 Free Software Foundation, Inc.
++# -*- Autoconf -*-
++# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++# Generated from amversion.in; do not edit by hand.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -156,18 +33,18 @@
+ # ----------------------------
+ # Automake X.Y traces this macro to ensure aclocal.m4 has been
+ # generated from the m4 files accompanying Automake X.Y.
+-AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
++AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+ # AM_SET_CURRENT_AUTOMAKE_VERSION
+ # -------------------------------
+ # Call AM_AUTOMAKE_VERSION so it can be traced.
+ # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+- [AM_AUTOMAKE_VERSION([1.7.6])])
++ [AM_AUTOMAKE_VERSION([1.9.1])])
+
+-# Helper functions for option handling. -*- Autoconf -*-
++# AM_AUX_DIR_EXPAND
+
+-# Copyright 2001, 2002 Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -184,36 +61,54 @@
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+
+-# serial 2
+-
+-# _AM_MANGLE_OPTION(NAME)
+-# -----------------------
+-AC_DEFUN([_AM_MANGLE_OPTION],
+-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+-
+-# _AM_SET_OPTION(NAME)
+-# ------------------------------
+-# Set option NAME. Presently that only means defining a flag for this option.
+-AC_DEFUN([_AM_SET_OPTION],
+-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+-
+-# _AM_SET_OPTIONS(OPTIONS)
+-# ----------------------------------
+-# OPTIONS is a space-separated list of Automake options.
+-AC_DEFUN([_AM_SET_OPTIONS],
+-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+-
+-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+-# -------------------------------------------
+-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+-AC_DEFUN([_AM_IF_OPTION],
+-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+-
++# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
++# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
++# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+ #
+-# Check to make sure that the build environment is sane.
++# Of course, Automake must honor this variable whenever it calls a
++# tool from the auxiliary directory. The problem is that $srcdir (and
++# therefore $ac_aux_dir as well) can be either absolute or relative,
++# depending on how configure is run. This is pretty annoying, since
++# it makes $ac_aux_dir quite unusable in subdirectories: in the top
++# source directory, any form will work fine, but in subdirectories a
++# relative path needs to be adjusted first.
++#
++# $ac_aux_dir/missing
++# fails when called from a subdirectory if $ac_aux_dir is relative
++# $top_srcdir/$ac_aux_dir/missing
++# fails if $ac_aux_dir is absolute,
++# fails when called from a subdirectory in a VPATH build with
++# a relative $ac_aux_dir
++#
++# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
++# are both prefixed by $srcdir. In an in-source build this is usually
++# harmless because $srcdir is `.', but things will broke when you
++# start a VPATH build or use an absolute $srcdir.
++#
++# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
++# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
++# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
++# and then we would define $MISSING as
++# MISSING="\${SHELL} $am_aux_dir/missing"
++# This will work as long as MISSING is not called from configure, because
++# unfortunately $(top_srcdir) has no meaning in configure.
++# However there are other variables, like CC, which are often used in
++# configure, and could therefore not use this "fixed" $ac_aux_dir.
+ #
++# Another solution, used here, is to always expand $ac_aux_dir to an
++# absolute PATH. The drawback is that using absolute paths prevent a
++# configured tree to be moved without reconfiguration.
++
++AC_DEFUN([AM_AUX_DIR_EXPAND],
++[dnl Rely on autoconf to set up CDPATH properly.
++AC_PREREQ([2.50])dnl
++# expand $ac_aux_dir to an absolute path
++am_aux_dir=`cd $ac_aux_dir && pwd`
++])
+
+-# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
++# AM_CONDITIONAL -*- Autoconf -*-
++
++# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -230,53 +125,34 @@
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+
+-# serial 3
+-
+-# AM_SANITY_CHECK
+-# ---------------
+-AC_DEFUN([AM_SANITY_CHECK],
+-[AC_MSG_CHECKING([whether build environment is sane])
+-# Just in case
+-sleep 1
+-echo timestamp > conftest.file
+-# Do `set' in a subshell so we don't clobber the current shell's
+-# arguments. Must try -L first in case configure is actually a
+-# symlink; some systems play weird games with the mod time of symlinks
+-# (eg FreeBSD returns the mod time of the symlink's containing
+-# directory).
+-if (
+- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+- if test "$[*]" = "X"; then
+- # -L didn't work.
+- set X `ls -t $srcdir/configure conftest.file`
+- fi
+- rm -f conftest.file
+- if test "$[*]" != "X $srcdir/configure conftest.file" \
+- && test "$[*]" != "X conftest.file $srcdir/configure"; then
+-
+- # If neither matched, then we have a broken ls. This can happen
+- # if, for instance, CONFIG_SHELL is bash and it inherits a
+- # broken ls alias from the environment. This has actually
+- # happened. Such a system could not be considered "sane".
+- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+-alias in your environment])
+- fi
++# serial 6
+
+- test "$[2]" = conftest.file
+- )
+-then
+- # Ok.
+- :
++# AM_CONDITIONAL(NAME, SHELL-CONDITION)
++# -------------------------------------
++# Define a conditional.
++AC_DEFUN([AM_CONDITIONAL],
++[AC_PREREQ(2.52)dnl
++ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
++ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
++AC_SUBST([$1_TRUE])
++AC_SUBST([$1_FALSE])
++if $2; then
++ $1_TRUE=
++ $1_FALSE='#'
+ else
+- AC_MSG_ERROR([newly created file is older than distributed files!
+-Check your system clock])
++ $1_TRUE='#'
++ $1_FALSE=
+ fi
+-AC_MSG_RESULT(yes)])
+-
+-# -*- Autoconf -*-
++AC_CONFIG_COMMANDS_PRE(
++[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
++ AC_MSG_ERROR([[conditional "$1" was never defined.
++Usually this means the macro was only invoked conditionally.]])
++fi])])
+
++# serial 7 -*- Autoconf -*-
+
+-# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++# Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -293,220 +169,12 @@
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+
+-# serial 3
+
+-# AM_MISSING_PROG(NAME, PROGRAM)
+-# ------------------------------
+-AC_DEFUN([AM_MISSING_PROG],
+-[AC_REQUIRE([AM_MISSING_HAS_RUN])
+-$1=${$1-"${am_missing_run}$2"}
+-AC_SUBST($1)])
+-
+-
+-# AM_MISSING_HAS_RUN
+-# ------------------
+-# Define MISSING if not defined so far and test if it supports --run.
+-# If it does, set am_missing_run to use it, otherwise, to nothing.
+-AC_DEFUN([AM_MISSING_HAS_RUN],
+-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+-# Use eval to expand $SHELL
+-if eval "$MISSING --run true"; then
+- am_missing_run="$MISSING --run "
+-else
+- am_missing_run=
+- AC_MSG_WARN([`missing' script is too old or missing])
+-fi
+-])
+-
+-# AM_AUX_DIR_EXPAND
+-
+-# Copyright 2001 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+-#
+-# Of course, Automake must honor this variable whenever it calls a
+-# tool from the auxiliary directory. The problem is that $srcdir (and
+-# therefore $ac_aux_dir as well) can be either absolute or relative,
+-# depending on how configure is run. This is pretty annoying, since
+-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+-# source directory, any form will work fine, but in subdirectories a
+-# relative path needs to be adjusted first.
+-#
+-# $ac_aux_dir/missing
+-# fails when called from a subdirectory if $ac_aux_dir is relative
+-# $top_srcdir/$ac_aux_dir/missing
+-# fails if $ac_aux_dir is absolute,
+-# fails when called from a subdirectory in a VPATH build with
+-# a relative $ac_aux_dir
+-#
+-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+-# are both prefixed by $srcdir. In an in-source build this is usually
+-# harmless because $srcdir is `.', but things will broke when you
+-# start a VPATH build or use an absolute $srcdir.
+-#
+-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+-# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+-# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+-# and then we would define $MISSING as
+-# MISSING="\${SHELL} $am_aux_dir/missing"
+-# This will work as long as MISSING is not called from configure, because
+-# unfortunately $(top_srcdir) has no meaning in configure.
+-# However there are other variables, like CC, which are often used in
+-# configure, and could therefore not use this "fixed" $ac_aux_dir.
+-#
+-# Another solution, used here, is to always expand $ac_aux_dir to an
+-# absolute PATH. The drawback is that using absolute paths prevent a
+-# configured tree to be moved without reconfiguration.
+-
+-# Rely on autoconf to set up CDPATH properly.
+-AC_PREREQ([2.50])
+-
+-AC_DEFUN([AM_AUX_DIR_EXPAND], [
+-# expand $ac_aux_dir to an absolute path
+-am_aux_dir=`cd $ac_aux_dir && pwd`
+-])
+-
+-# AM_PROG_INSTALL_SH
+-# ------------------
+-# Define $install_sh.
+-
+-# Copyright 2001 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-AC_DEFUN([AM_PROG_INSTALL_SH],
+-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+-install_sh=${install_sh-"$am_aux_dir/install-sh"}
+-AC_SUBST(install_sh)])
+-
+-# AM_PROG_INSTALL_STRIP
+-
+-# Copyright 2001 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# One issue with vendor `install' (even GNU) is that you can't
+-# specify the program used to strip binaries. This is especially
+-# annoying in cross-compiling environments, where the build's strip
+-# is unlikely to handle the host's binaries.
+-# Fortunately install-sh will honor a STRIPPROG variable, so we
+-# always use install-sh in `make install-strip', and initialize
+-# STRIPPROG with the value of the STRIP variable (set by the user).
+-AC_DEFUN([AM_PROG_INSTALL_STRIP],
+-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+-# Installed binaries are usually stripped using `strip' when the user
+-# run `make install-strip'. However `strip' might not be the right
+-# tool to use in cross-compilation environments, therefore Automake
+-# will honor the `STRIP' environment variable to overrule this program.
+-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+-if test "$cross_compiling" != no; then
+- AC_CHECK_TOOL([STRIP], [strip], :)
+-fi
+-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+-AC_SUBST([INSTALL_STRIP_PROGRAM])])
+-
+-# -*- Autoconf -*-
+-# Copyright (C) 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-# serial 1
+-
+-# Check whether the underlying file-system supports filenames
+-# with a leading dot. For instance MS-DOS doesn't.
+-AC_DEFUN([AM_SET_LEADING_DOT],
+-[rm -rf .tst 2>/dev/null
+-mkdir .tst 2>/dev/null
+-if test -d .tst; then
+- am__leading_dot=.
+-else
+- am__leading_dot=_
+-fi
+-rmdir .tst 2>/dev/null
+-AC_SUBST([am__leading_dot])])
+-
+-# serial 5 -*- Autoconf -*-
+-
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+-
+-# This program is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2, or (at your option)
+-# any later version.
+-
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-# GNU General Public License for more details.
+-
+-# You should have received a copy of the GNU General Public License
+-# along with this program; if not, write to the Free Software
+-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+-# 02111-1307, USA.
+-
+-
+-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+-# written in clear, in which case automake, when reading aclocal.m4,
+-# will think it sees a *use*, and therefore will trigger all it's
+-# C support machinery. Also note that it means that autoscan, seeing
+-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
++# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
++# written in clear, in which case automake, when reading aclocal.m4,
++# will think it sees a *use*, and therefore will trigger all it's
++# C support machinery. Also note that it means that autoscan, seeing
++# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+@@ -568,7 +236,9 @@
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+- : > sub/conftst$i.h
++ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++ # Solaris 8's {/usr,}/bin/sh.
++ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+@@ -596,9 +266,14 @@
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+- # (even with -Werror). So we grep stderr for any message
+- # that says an option was ignored.
+- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
++ # or remarks (even with -Werror). So we grep stderr for any message
++ # that says an option was ignored or not supported.
++ # When given -MP, icc 7.0 and 7.1 complain thusly:
++ # icc: Command line warning: ignoring option '-M'; no argument required
++ # The diagnosis changed in icc 8.0:
++ # icc: Command line remark: option '-MP' not supported
++ if (grep 'ignoring option' conftest.err ||
++ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+@@ -632,8 +307,8 @@
+ # ------------
+ AC_DEFUN([AM_DEP_TRACK],
+ [AC_ARG_ENABLE(dependency-tracking,
+-[ --disable-dependency-tracking Speeds up one-time builds
+- --enable-dependency-tracking Do not reject slow dependency extractors])
++[ --disable-dependency-tracking speeds up one-time build
++ --enable-dependency-tracking do not reject slow dependency extractors])
+ if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+@@ -644,7 +319,8 @@
+
+ # Generate code to set up dependency tracking. -*- Autoconf -*-
+
+-# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
++# Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -680,27 +356,21 @@
+ else
+ continue
+ fi
+- grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+- # Extract the definition of DEP_FILES from the Makefile without
+- # running `make'.
+- DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
++ # Extract the definition of DEPDIR, am__include, and am__quote
++ # from the Makefile without running `make'.
++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
++ am__include=`sed -n 's/^am__include = //p' < "$mf"`
++ test -z "am__include" && continue
++ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+- U=`sed -n -e '/^U = / s///p' < "$mf"`
+- test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+- # We invoke sed twice because it is the simplest approach to
+- # changing $(DEPDIR) to its actual value in the expansion.
+- for file in `sed -n -e '
+- /^DEP_FILES = .*\\\\$/ {
+- s/^DEP_FILES = //
+- :loop
+- s/\\\\$//
+- p
+- n
+- /\\\\$/ b loop
+- p
+- }
+- /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
++ U=`sed -n 's/^U = //p' < "$mf"`
++ # Find all dependency output files, they are included files with
++ # $(DEPDIR) in their names. We invoke sed twice because it is the
++ # simplest approach to changing $(DEPDIR) to its actual value in the
++ # expansion.
++ for file in `sed -n "
++ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+@@ -726,9 +396,13 @@
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+ ])
+
+-# Check to see how 'make' treats includes. -*- Autoconf -*-
++# Do all the work for Automake. -*- Autoconf -*-
+
+-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++# This macro actually does too much some checks are only needed if
++# your package does certain things. But this isn't really a big deal.
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
++# Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -745,43 +419,223 @@
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+
+-# serial 2
++# serial 11
+
+-# AM_MAKE_INCLUDE()
+-# -----------------
+-# Check to see how make treats includes.
+-AC_DEFUN([AM_MAKE_INCLUDE],
+-[am_make=${MAKE-make}
+-cat > confinc << 'END'
+-am__doit:
+- @echo done
+-.PHONY: am__doit
+-END
+-# If we don't find an include directive, just comment out the code.
+-AC_MSG_CHECKING([for style of include used by $am_make])
+-am__include="#"
+-am__quote=
+-_am_result=none
+-# First try GNU make style include.
+-echo "include confinc" > confmf
+-# We grep out `Entering directory' and `Leaving directory'
+-# messages which can occur if `w' ends up in MAKEFLAGS.
+-# In particular we don't look at `^make:' because GNU make might
+-# be invoked under some other name (usually "gmake"), in which
+-# case it prints its new name instead of `make'.
+-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+- am__include=include
+- am__quote=
+- _am_result=GNU
+-fi
+-# Now try BSD make style include.
+-if test "$am__include" = "#"; then
+- echo '.include "confinc"' > confmf
+- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+- am__include=.include
+- am__quote="\""
+- _am_result=BSD
+- fi
++# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
++# AM_INIT_AUTOMAKE([OPTIONS])
++# -----------------------------------------------
++# The call with PACKAGE and VERSION arguments is the old style
++# call (pre autoconf-2.50), which is being phased out. PACKAGE
++# and VERSION should now be passed to AC_INIT and removed from
++# the call to AM_INIT_AUTOMAKE.
++# We support both call styles for the transition. After
++# the next Automake release, Autoconf can make the AC_INIT
++# arguments mandatory, and then we can depend on a new Autoconf
++# release and drop the old call support.
++AC_DEFUN([AM_INIT_AUTOMAKE],
++[AC_PREREQ([2.58])dnl
++dnl Autoconf wants to disallow AM_ names. We explicitly allow
++dnl the ones we care about.
++m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
++AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
++AC_REQUIRE([AC_PROG_INSTALL])dnl
++# test to see if srcdir already configured
++if test "`cd $srcdir && pwd`" != "`pwd`" &&
++ test -f $srcdir/config.status; then
++ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
++fi
++
++# test whether we have cygpath
++if test -z "$CYGPATH_W"; then
++ if (cygpath --version) >/dev/null 2>/dev/null; then
++ CYGPATH_W='cygpath -w'
++ else
++ CYGPATH_W=echo
++ fi
++fi
++AC_SUBST([CYGPATH_W])
++
++# Define the identity of the package.
++dnl Distinguish between old-style and new-style calls.
++m4_ifval([$2],
++[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
++ AC_SUBST([PACKAGE], [$1])dnl
++ AC_SUBST([VERSION], [$2])],
++[_AM_SET_OPTIONS([$1])dnl
++ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
++ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
++
++_AM_IF_OPTION([no-define],,
++[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
++ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
++
++# Some tools Automake needs.
++AC_REQUIRE([AM_SANITY_CHECK])dnl
++AC_REQUIRE([AC_ARG_PROGRAM])dnl
++AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
++AM_MISSING_PROG(AUTOCONF, autoconf)
++AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
++AM_MISSING_PROG(AUTOHEADER, autoheader)
++AM_MISSING_PROG(MAKEINFO, makeinfo)
++AM_PROG_INSTALL_SH
++AM_PROG_INSTALL_STRIP
++AC_REQUIRE([AM_PROG_MKDIR_P])dnl
++# We need awk for the "check" target. The system "awk" is bad on
++# some platforms.
++AC_REQUIRE([AC_PROG_AWK])dnl
++AC_REQUIRE([AC_PROG_MAKE_SET])dnl
++AC_REQUIRE([AM_SET_LEADING_DOT])dnl
++_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
++ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
++ [_AM_PROG_TAR([v7])])])
++_AM_IF_OPTION([no-dependencies],,
++[AC_PROVIDE_IFELSE([AC_PROG_CC],
++ [_AM_DEPENDENCIES(CC)],
++ [define([AC_PROG_CC],
++ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
++AC_PROVIDE_IFELSE([AC_PROG_CXX],
++ [_AM_DEPENDENCIES(CXX)],
++ [define([AC_PROG_CXX],
++ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
++])
++])
++
++
++# When config.status generates a header, we must update the stamp-h file.
++# This file resides in the same directory as the config header
++# that is generated. The stamp files are numbered to have different names.
++
++# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
++# loop where config.status creates the headers, so we can generate
++# our stamp files there.
++AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
++[# Compute $1's index in $config_headers.
++_am_stamp_count=1
++for _am_header in $config_headers :; do
++ case $_am_header in
++ $1 | $1:* )
++ break ;;
++ * )
++ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
++ esac
++done
++echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
++
++# AM_PROG_INSTALL_SH
++# ------------------
++# Define $install_sh.
++
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++AC_DEFUN([AM_PROG_INSTALL_SH],
++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
++install_sh=${install_sh-"$am_aux_dir/install-sh"}
++AC_SUBST(install_sh)])
++
++# -*- Autoconf -*-
++# Copyright (C) 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 1
++
++# Check whether the underlying file-system supports filenames
++# with a leading dot. For instance MS-DOS doesn't.
++AC_DEFUN([AM_SET_LEADING_DOT],
++[rm -rf .tst 2>/dev/null
++mkdir .tst 2>/dev/null
++if test -d .tst; then
++ am__leading_dot=.
++else
++ am__leading_dot=_
++fi
++rmdir .tst 2>/dev/null
++AC_SUBST([am__leading_dot])])
++
++# Check to see how 'make' treats includes. -*- Autoconf -*-
++
++# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 2
++
++# AM_MAKE_INCLUDE()
++# -----------------
++# Check to see how make treats includes.
++AC_DEFUN([AM_MAKE_INCLUDE],
++[am_make=${MAKE-make}
++cat > confinc << 'END'
++am__doit:
++ @echo done
++.PHONY: am__doit
++END
++# If we don't find an include directive, just comment out the code.
++AC_MSG_CHECKING([for style of include used by $am_make])
++am__include="#"
++am__quote=
++_am_result=none
++# First try GNU make style include.
++echo "include confinc" > confmf
++# We grep out `Entering directory' and `Leaving directory'
++# messages which can occur if `w' ends up in MAKEFLAGS.
++# In particular we don't look at `^make:' because GNU make might
++# be invoked under some other name (usually "gmake"), in which
++# case it prints its new name instead of `make'.
++if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
++ am__include=include
++ am__quote=
++ _am_result=GNU
++fi
++# Now try BSD make style include.
++if test "$am__include" = "#"; then
++ echo '.include "confinc"' > confmf
++ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
++ am__include=.include
++ am__quote="\""
++ _am_result=BSD
++ fi
+ fi
+ AC_SUBST([am__include])
+ AC_SUBST([am__quote])
+@@ -789,9 +643,10 @@
+ rm -f confinc confmf
+ ])
+
+-# AM_CONDITIONAL -*- Autoconf -*-
++# -*- Autoconf -*-
++
+
+-# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
++# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -808,28 +663,358 @@
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ # 02111-1307, USA.
+
+-# serial 5
++# serial 3
+
+-AC_PREREQ(2.52)
++# AM_MISSING_PROG(NAME, PROGRAM)
++# ------------------------------
++AC_DEFUN([AM_MISSING_PROG],
++[AC_REQUIRE([AM_MISSING_HAS_RUN])
++$1=${$1-"${am_missing_run}$2"}
++AC_SUBST($1)])
+
+-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+-# -------------------------------------
+-# Define a conditional.
+-AC_DEFUN([AM_CONDITIONAL],
+-[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+-AC_SUBST([$1_TRUE])
+-AC_SUBST([$1_FALSE])
+-if $2; then
+- $1_TRUE=
+- $1_FALSE='#'
++
++# AM_MISSING_HAS_RUN
++# ------------------
++# Define MISSING if not defined so far and test if it supports --run.
++# If it does, set am_missing_run to use it, otherwise, to nothing.
++AC_DEFUN([AM_MISSING_HAS_RUN],
++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
++test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
++# Use eval to expand $SHELL
++if eval "$MISSING --run true"; then
++ am_missing_run="$MISSING --run "
+ else
+- $1_TRUE='#'
+- $1_FALSE=
++ am_missing_run=
++ AC_MSG_WARN([`missing' script is too old or missing])
+ fi
+-AC_CONFIG_COMMANDS_PRE(
+-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+- AC_MSG_ERROR([conditional "$1" was never defined.
+-Usually this means the macro was only invoked conditionally.])
+-fi])])
++])
++
++# AM_PROG_MKDIR_P
++# ---------------
++# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
++
++# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
++# created by `make install' are always world readable, even if the
++# installer happens to have an overly restrictive umask (e.g. 077).
++# This was a mistake. There are at least two reasons why we must not
++# use `-m 0755':
++# - it causes special bits like SGID to be ignored,
++# - it may be too restrictive (some setups expect 775 directories).
++#
++# Do not use -m 0755 and let people choose whatever they expect by
++# setting umask.
++#
++# We cannot accept any implementation of `mkdir' that recognizes `-p'.
++# Some implementations (such as Solaris 8's) are not thread-safe: if a
++# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
++# concurrently, both version can detect that a/ is missing, but only
++# one can create it and the other will error out. Consequently we
++# restrict ourselves to GNU make (using the --version option ensures
++# this.)
++AC_DEFUN([AM_PROG_MKDIR_P],
++[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
++ # We used to keeping the `.' as first argument, in order to
++ # allow $(mkdir_p) to be used without argument. As in
++ # $(mkdir_p) $(somedir)
++ # where $(somedir) is conditionally defined. However this is wrong
++ # for two reasons:
++ # 1. if the package is installed by a user who cannot write `.'
++ # make install will fail,
++ # 2. the above comment should most certainly read
++ # $(mkdir_p) $(DESTDIR)$(somedir)
++ # so it does not work when $(somedir) is undefined and
++ # $(DESTDIR) is not.
++ # To support the latter case, we have to write
++ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
++ # so the `.' trick is pointless.
++ mkdir_p='mkdir -p --'
++else
++ # On NextStep and OpenStep, the `mkdir' command does not
++ # recognize any option. It will interpret all options as
++ # directories to create, and then abort because `.' already
++ # exists.
++ for d in ./-p ./--version;
++ do
++ test -d $d && rmdir $d
++ done
++ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
++ if test -f "$ac_aux_dir/mkinstalldirs"; then
++ mkdir_p='$(mkinstalldirs)'
++ else
++ mkdir_p='$(install_sh) -d'
++ fi
++fi
++AC_SUBST([mkdir_p])])
++
++# Helper functions for option handling. -*- Autoconf -*-
++
++# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 2
++
++# _AM_MANGLE_OPTION(NAME)
++# -----------------------
++AC_DEFUN([_AM_MANGLE_OPTION],
++[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
++
++# _AM_SET_OPTION(NAME)
++# ------------------------------
++# Set option NAME. Presently that only means defining a flag for this option.
++AC_DEFUN([_AM_SET_OPTION],
++[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
++
++# _AM_SET_OPTIONS(OPTIONS)
++# ----------------------------------
++# OPTIONS is a space-separated list of Automake options.
++AC_DEFUN([_AM_SET_OPTIONS],
++[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
++
++# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
++# -------------------------------------------
++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
++AC_DEFUN([_AM_IF_OPTION],
++[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
++
++#
++# Check to make sure that the build environment is sane.
++#
++
++# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 3
++
++# AM_SANITY_CHECK
++# ---------------
++AC_DEFUN([AM_SANITY_CHECK],
++[AC_MSG_CHECKING([whether build environment is sane])
++# Just in case
++sleep 1
++echo timestamp > conftest.file
++# Do `set' in a subshell so we don't clobber the current shell's
++# arguments. Must try -L first in case configure is actually a
++# symlink; some systems play weird games with the mod time of symlinks
++# (eg FreeBSD returns the mod time of the symlink's containing
++# directory).
++if (
++ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
++ if test "$[*]" = "X"; then
++ # -L didn't work.
++ set X `ls -t $srcdir/configure conftest.file`
++ fi
++ rm -f conftest.file
++ if test "$[*]" != "X $srcdir/configure conftest.file" \
++ && test "$[*]" != "X conftest.file $srcdir/configure"; then
++
++ # If neither matched, then we have a broken ls. This can happen
++ # if, for instance, CONFIG_SHELL is bash and it inherits a
++ # broken ls alias from the environment. This has actually
++ # happened. Such a system could not be considered "sane".
++ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
++alias in your environment])
++ fi
++
++ test "$[2]" = conftest.file
++ )
++then
++ # Ok.
++ :
++else
++ AC_MSG_ERROR([newly created file is older than distributed files!
++Check your system clock])
++fi
++AC_MSG_RESULT(yes)])
++
++# AM_PROG_INSTALL_STRIP
++
++# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# One issue with vendor `install' (even GNU) is that you can't
++# specify the program used to strip binaries. This is especially
++# annoying in cross-compiling environments, where the build's strip
++# is unlikely to handle the host's binaries.
++# Fortunately install-sh will honor a STRIPPROG variable, so we
++# always use install-sh in `make install-strip', and initialize
++# STRIPPROG with the value of the STRIP variable (set by the user).
++AC_DEFUN([AM_PROG_INSTALL_STRIP],
++[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
++# Installed binaries are usually stripped using `strip' when the user
++# run `make install-strip'. However `strip' might not be the right
++# tool to use in cross-compilation environments, therefore Automake
++# will honor the `STRIP' environment variable to overrule this program.
++dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
++if test "$cross_compiling" != no; then
++ AC_CHECK_TOOL([STRIP], [strip], :)
++fi
++INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
++AC_SUBST([INSTALL_STRIP_PROGRAM])])
++
++# Check how to create a tarball. -*- Autoconf -*-
++
++# Copyright (C) 2004 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++# 02111-1307, USA.
++
++# serial 1
++
++
++# _AM_PROG_TAR(FORMAT)
++# --------------------
++# Check how to create a tarball in format FORMAT.
++# FORMAT should be one of `v7', `ustar', or `pax'.
++#
++# Substitute a variable $(am__tar) that is a command
++# writing to stdout a FORMAT-tarball containing the directory
++# $tardir.
++# tardir=directory && $(am__tar) > result.tar
++#
++# Substitute a variable $(am__untar) that extract such
++# a tarball read from stdin.
++# $(am__untar) < result.tar
++AC_DEFUN([_AM_PROG_TAR],
++[# Always define AMTAR for backward compatibility.
++AM_MISSING_PROG([AMTAR], [tar])
++m4_if([$1], [v7],
++ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
++ [m4_case([$1], [ustar],, [pax],,
++ [m4_fatal([Unknown tar format])])
++AC_MSG_CHECKING([how to create a $1 tar archive])
++# Loop over all known methods to create a tar archive until one works.
++_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
++_am_tools=${am_cv_prog_tar_$1-$_am_tools}
++# Do not fold the above two line into one, because Tru64 sh and
++# Solaris sh will not grok spaces in the rhs of `-'.
++for _am_tool in $_am_tools
++do
++ case $_am_tool in
++ gnutar)
++ for _am_tar in tar gnutar gtar;
++ do
++ AM_RUN_LOG([$_am_tar --version]) && break
++ done
++ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
++ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
++ am__untar="$_am_tar -xf -"
++ ;;
++ plaintar)
++ # Must skip GNU tar: if it does not support --format= it doesn't create
++ # ustar tarball either.
++ (tar --version) >/dev/null 2>&1 && continue
++ am__tar='tar chf - "$$tardir"'
++ am__tar_='tar chf - "$tardir"'
++ am__untar='tar xf -'
++ ;;
++ pax)
++ am__tar='pax -L -x $1 -w "$$tardir"'
++ am__tar_='pax -L -x $1 -w "$tardir"'
++ am__untar='pax -r'
++ ;;
++ cpio)
++ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
++ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
++ am__untar='cpio -i -H $1 -d'
++ ;;
++ none)
++ am__tar=false
++ am__tar_=false
++ am__untar=false
++ ;;
++ esac
++
++ # If the value was cached, stop now. We just wanted to have am__tar
++ # and am__untar set.
++ test -n "${am_cv_prog_tar_$1}" && break
++
++ # tar/untar a dummy directory, and stop if the command works
++ rm -rf conftest.dir
++ mkdir conftest.dir
++ echo GrepMe > conftest.dir/file
++ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
++ rm -rf conftest.dir
++ if test -s conftest.tar; then
++ AM_RUN_LOG([$am__untar <conftest.tar])
++ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
++ fi
++done
++rm -rf conftest.dir
++
++AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
++AC_MSG_RESULT([$am_cv_prog_tar_$1])])
++AC_SUBST([am__tar])
++AC_SUBST([am__untar])
++]) # _AM_PROG_TAR
+
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bencode.cpp ctorrent-1.3.4/bencode.cpp
+--- ctorrent-1.3.4.sav/bencode.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bencode.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -1,6 +1,6 @@
++#include "./def.h"
+ #include <sys/types.h>
+
+-#include "./def.h"
+ #include "bencode.h"
+
+ #ifndef WINDOWS
+@@ -29,7 +29,7 @@
+ return keylen;
+ }
+
+-size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi)
++size_t buf_long(const char *b,size_t len,char beginchar,char endchar,int64_t *pi)
+ {
+ const char *p = b;
+ const char *psave;
+@@ -46,12 +46,26 @@
+ if(!len || MAX_INT_SIZ < (p - psave) || *p != endchar) return 0;
+
+ if( pi ){
+- if( beginchar ) *pi = (size_t)strtol(b + 1,(char**) 0,10);
+- else *pi=(size_t)strtol(b,(char**) 0,10);
++ if( beginchar ) *pi = strtoll(b + 1,(char**) 0,10);
++ else *pi=strtoll(b,(char**) 0,10);
+ }
+ return (size_t)( p - b + 1 );
+ }
+
++size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi)
++{
++ size_t r;
++
++ if( pi ){
++ int64_t pl;
++ r = buf_long(b,len,beginchar,endchar,&pl);
++ *pi = (size_t) pl;
++ }else{
++ r = buf_long(b,len,beginchar,endchar,(int64_t*) 0);
++ }
++ return r;
++}
++
+ size_t buf_str(const char *b,size_t len,const char **pstr,size_t* slen)
+ {
+ size_t rl,sl;
+@@ -69,7 +83,7 @@
+
+ size_t decode_int(const char *b,size_t len)
+ {
+- return(buf_int(b,len,'i','e',(size_t*) 0));
++ return(buf_long(b,len,'i','e',(int64_t*) 0));
+ }
+
+ size_t decode_str(const char *b,size_t len)
+@@ -136,7 +150,7 @@
+ }
+ }
+
+-size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int method)
++size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int64_t *pl,int method)
+ {
+ size_t pos;
+ char kl[KEYNAME_LISTSIZ];
+@@ -147,8 +161,9 @@
+ case QUERY_STR: return(buf_str(b + pos,len - pos, ps, pi));
+ case QUERY_INT: return(buf_int(b + pos,len - pos, 'i', 'e', pi));
+ case QUERY_POS:
+- if(pi) *pi = decode_rev(b + pos, len - pos, (const char*) 0);
+- return pos;
++ if(pi) *pi = decode_rev(b + pos, len - pos, (const char*) 0);
++ return pos;
++ case QUERY_LONG: return(buf_long(b + pos,len - pos, 'i', 'e', pl));
+ default: return 0;
+ }
+ }
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bencode.h ctorrent-1.3.4/bencode.h
+--- ctorrent-1.3.4.sav/bencode.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bencode.h 2006-06-28 19:30:02.000000000 +0200
+@@ -13,7 +13,9 @@
+ #define QUERY_STR 0
+ #define QUERY_INT 1
+ #define QUERY_POS 2
++#define QUERY_LONG 3
+
++size_t buf_long(const char *b,size_t len,char beginchar,char endchar,int64_t *pi);
+ size_t buf_int(const char *b,size_t len,char beginchar,char endchar,size_t *pi);
+ size_t buf_str(const char *b,size_t len,const char **pstr,size_t* slen);
+ size_t decode_int(const char *b,size_t len);
+@@ -21,7 +23,7 @@
+ size_t decode_dict(const char *b,size_t len,const char *keylist);
+ size_t decode_list(const char *b,size_t len,const char *keylist);
+ size_t decode_rev(const char *b,size_t len,const char *keylist);
+-size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int method);
++size_t decode_query(const char *b,size_t len,const char *keylist,const char **ps,size_t *pi,int64_t *pl,int method);
+ size_t decode_list2path(const char *b, size_t n, char *pathname);
+ size_t bencode_buf(const char *str,size_t len,FILE *fp);
+ size_t bencode_str(const char *str, FILE *fp);
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bitfield.cpp ctorrent-1.3.4/bitfield.cpp
+--- ctorrent-1.3.4.sav/bitfield.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bitfield.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -143,8 +143,8 @@
+ size_t s = nset;
+ for( ; i < nbytes - 1; i++ ) b[i] = ~b[i];
+
+- if( nbits % nbytes ){
+- for( i = 8 * (nbytes - 1); i < nbits; i++ ) if( _isset(i) ) UnSet(i); else Set(i);
++ if( nbits % 8 ){
++ for( i = 8 * (nbytes - 1); i < nbits; i++ ) if( _isset(i) ) UnSet(i); else _set(i);
+ }else
+ b[nbytes - 1] = ~b[nbytes - 1];
+
+@@ -152,6 +152,16 @@
+ }
+ }
+
++// _set() sets the bit but doesn't increment nset or set the isfull case.
++// Use instead of Set() when you know nset is incorrect and will be corrected
++// afterward (as in Invert or by _recalc),
++// and either bitfield won't get full or you'll _recalc() afterward to fix it.
++void BitField::_set(size_t idx)
++{
++ if( idx < nbits && !_isfull() && !_isset(idx) )
++ b[idx / 8] |= BIT_HEX[idx % 8];
++}
++
+ void BitField::Comb(const BitField &bf)
+ {
+ size_t i;
+@@ -167,7 +177,10 @@
+ {
+ size_t i;
+ char c;
+- if( bf.nset != 0 ){
++ if( _isfull_sp(bf) ){
++ SetAll();
++ Invert();
++ }else if( bf.nset != 0 ){
+ if( nset >= nbits ){
+ b = new unsigned char[nbytes];
+ #ifndef WINDOWS
+@@ -184,6 +197,26 @@
+ }
+ }
+
++void BitField::And(const BitField &bf)
++{
++ size_t i;
++
++ if( bf.nset == 0 ){
++ SetAll();
++ Invert();
++ }else if( !_isfull_sp(bf) ){
++ if( nset >= nbits ){
++ b = new unsigned char[nbytes];
++#ifndef WINDOWS
++ if( !b ) throw 9;
++#endif
++ _setall(b);
++ }
++ for(i = 0; i < nbytes; i++) b[i] &= bf.b[i];
++ _recalc();
++ }
++}
++
+ size_t BitField::Random() const
+ {
+ size_t idx;
+@@ -300,3 +333,4 @@
+ fclose(fp);
+ return -1;
+ }
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bitfield.h ctorrent-1.3.4/bitfield.h
+--- ctorrent-1.3.4.sav/bitfield.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bitfield.h 2006-06-28 19:30:02.000000000 +0200
+@@ -14,6 +14,7 @@
+
+ inline void _recalc();
+ inline void _setall(unsigned char* buf);
++ inline void _set(size_t idx);
+
+ public:
+ BitField();
+@@ -40,6 +41,7 @@
+ void Comb(const BitField &bf);
+ void Except(const BitField &bf);
+ void Invert();
++ void And(const BitField &bf);
+
+ int WriteToFile(const char *fname);
+ int SetReferFile(const char *fname);
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btconfig.cpp ctorrent-1.3.4/btconfig.cpp
+--- ctorrent-1.3.4.sav/btconfig.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btconfig.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -1,19 +1,23 @@
#include <sys/types.h>
-size_t cfg_req_slice_size = 32768;
-+//size_t cfg_req_slice_size = 32768;
+size_t cfg_req_slice_size = 16384;
++size_t cfg_req_queue_length = 74;
size_t cfg_cache_size = 16;
-@@ -11,7 +12,8 @@
+ size_t cfg_max_peers = 100;
+-size_t cfg_min_peers = 40;
++size_t cfg_min_peers = 1;
+
++unsigned long cfg_listen_ip = 0;
+ int cfg_listen_port = 0;
int cfg_max_listen_port = 2706;
int cfg_min_listen_port = 2106;
@@ -20,21 +1534,55 @@ diff -u ctorrent-1.3.4.orig/btconfig.cpp ctorrent-1.3.4/btconfig.cpp
+int cfg_max_bandwidth_up = -1;
time_t cfg_seed_hours = 72;
++double cfg_seed_ratio = 0;
-@@ -25,6 +27,8 @@
+ // arguments global value
+ char *arg_metainfo_file = (char*) 0;
+@@ -25,6 +29,12 @@
unsigned char arg_flg_check_only = 0;
unsigned char arg_flg_exam_only = 0;
unsigned char arg_flg_make_torrent = 0;
-+unsigned char arg_file_to_download = 0;
++size_t arg_file_to_download = 0;
+unsigned char arg_verbose = 0;
size_t arg_piece_length = 262144;
char *arg_announce = (char*) 0;
-diff -u ctorrent-1.3.4.orig/btconfig.h ctorrent-1.3.4/btconfig.h
---- ctorrent-1.3.4.orig/btconfig.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btconfig.h 2005-08-11 23:45:29.425694288 +0200
-@@ -22,6 +22,8 @@
++
++char *arg_ctcs = (char*) 0;
++int cfg_exit_zero_peers = 0;
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btconfig.h ctorrent-1.3.4/btconfig.h
+--- ctorrent-1.3.4.sav/btconfig.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btconfig.h 2006-06-28 19:30:02.000000000 +0200
+@@ -4,24 +4,32 @@
+ extern size_t cfg_req_slice_size;
+
+ #define MAX_METAINFO_FILESIZ 4194304
+-#define cfg_max_slice_size 131072
+-#define cfg_req_queue_length 64
++// According to specs the max slice size is 128K. But most clients do not
++// accept a value that large, so we limit to 64K. Note that there is a
++// comparison in RequestQueue::IsValidRequest() (see btrequest.cpp) that
++// doubles the value so that we will accept a request for 128K.
++#define cfg_max_slice_size 65536
++extern size_t cfg_req_queue_length;
+ #define MAX_PF_LEN 8
+ #define PEER_ID_LEN 20
+-#define PEER_PFX "-CT1304-"
++#define PEER_PFX "-CD0200-"
+
+ extern size_t cfg_cache_size;
+
+ extern size_t cfg_max_peers;
+ extern size_t cfg_min_peers;
+
++extern unsigned long cfg_listen_ip;
+ extern int cfg_listen_port;
+ extern int cfg_max_listen_port;
+ extern int cfg_min_listen_port;
+
extern time_t cfg_seed_hours;
++extern double cfg_seed_ratio;
extern int cfg_max_bandwidth;
+extern int cfg_max_bandwidth_down;
@@ -42,27 +1590,76 @@ diff -u ctorrent-1.3.4.orig/btconfig.h ctorrent-1.3.4/btconfig.h
// arguments global value
extern char *arg_metainfo_file;
-@@ -33,6 +35,8 @@
+@@ -33,7 +41,12 @@
extern unsigned char arg_flg_check_only;
extern unsigned char arg_flg_exam_only;
extern unsigned char arg_flg_make_torrent;
-+extern unsigned char arg_file_to_download;
++extern size_t arg_file_to_download;
+extern unsigned char arg_verbose;
extern size_t arg_piece_length;
extern char *arg_announce;
-diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
---- ctorrent-1.3.4.orig/btcontent.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btcontent.cpp 2005-08-11 23:45:29.425694288 +0200
-@@ -23,6 +23,7 @@
++
++extern char *arg_ctcs;
++extern int cfg_exit_zero_peers;
+ #endif
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
+--- ctorrent-1.3.4.sav/btcontent.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btcontent.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -9,8 +9,12 @@
+ #else
+ #include <unistd.h>
+ #include <sys/param.h>
++#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBMD) || defined(HAVE_LIBCRYPTO)
++#include <sha.h>
++#elif defined(HAVE_LIBSSL)
+ #include <openssl/sha.h>
+ #endif
++#endif
+
+ #include <time.h>
+ #include <sys/stat.h>
+@@ -23,10 +27,15 @@
#include "bencode.h"
#include "peer.h"
#include "httpencode.h"
+#include "tracker.h"
++
++#if defined(USE_STANDALONE_SHA1)
++#include "sha1.h"
++#endif
+
+-#define meta_str(keylist,pstr,pint) decode_query(b,flen,(keylist),(pstr),(pint),QUERY_STR)
+-#define meta_int(keylist,pint) decode_query(b,flen,(keylist),(const char**) 0,(pint),QUERY_INT)
+-#define meta_pos(keylist) decode_query(b,flen,(keylist),(const char**) 0,(size_t*) 0,QUERY_POS)
++#define meta_str(keylist,pstr,pint) decode_query(b,flen,(keylist),(pstr),(pint),(int64_t*) 0,QUERY_STR)
++#define meta_int(keylist,pint) decode_query(b,flen,(keylist),(const char**) 0,(pint),(int64_t*) 0,QUERY_INT)
++#define meta_pos(keylist) decode_query(b,flen,(keylist),(const char**) 0,(size_t*) 0,(int64_t*) 0,QUERY_POS)
- #define meta_str(keylist,pstr,pint) decode_query(b,flen,(keylist),(pstr),(pint),QUERY_STR)
- #define meta_int(keylist,pint) decode_query(b,flen,(keylist),(const char**) 0,(pint),QUERY_INT)
-@@ -53,6 +54,7 @@
+ #define CACHE_FIT(ca,roff,rlen) \
+ (max_u_int64_t((ca)->bc_off,(roff)) <= \
+@@ -38,6 +47,12 @@
+
+ static void Sha1(char *ptr,size_t len,unsigned char *dm)
+ {
++#if defined(USE_STANDALONE_SHA1)
++ SHA1_CTX context;
++ SHA1Init(&context);
++ SHA1Update(&context,(unsigned char*)ptr,len);
++ SHA1Final(dm,&context);
++#else
+ #ifdef WINDOWS
+ ;
+ #else
+@@ -46,6 +61,7 @@
+ SHA1_Update(&context,(unsigned char*)ptr,len);
+ SHA1_Final(dm,&context);
+ #endif
++#endif
+ }
+
+ btContent::btContent()
+@@ -53,6 +69,7 @@
m_announce = global_piece_buffer = (char*) 0;
m_hash_table = (unsigned char *) 0;
pBF = (BitField*) 0;
@@ -70,15 +1667,54 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
m_create_date = m_seed_timestamp = (time_t) 0;
time(&m_start_timestamp);
m_cache = (BTCACHE*) 0;
-@@ -226,6 +228,7 @@
+@@ -121,7 +138,8 @@
+ m_piece_length *= 65536;
+ }
+
+- if( !m_piece_length || m_piece_length > cfg_req_queue_length * cfg_req_slice_size )
++ // This is really just a sanity check on the piece length to create.
++ if( !m_piece_length || m_piece_length > 4096*1024 )
+ m_piece_length = 262144;
+
+ m_announce = ann_url;
+@@ -209,26 +227,24 @@
+ if(!meta_int("info|piece length",&m_piece_length)) ERR_RETURN();
+ m_npieces = m_hashtable_length / 20;
+
+- if( m_piece_length > cfg_max_slice_size * cfg_req_queue_length ){
+- fprintf(stderr,"error, piece length too long[%u]. please recompile CTorrent with a larger cfg_max_slice_size in <btconfig.h>.\n", m_piece_length);
+- ERR_RETURN();
+- }
++ cfg_req_queue_length = (m_piece_length / cfg_req_slice_size) * 2 - 1;
+
+ if( m_piece_length < cfg_req_slice_size )
+ cfg_req_slice_size = m_piece_length;
+- else{
+- for( ;(m_piece_length / cfg_req_slice_size) >= cfg_req_queue_length; ){
+- cfg_req_slice_size *= 2;
+- if( cfg_req_slice_size > cfg_max_slice_size ) ERR_RETURN();
+- }
+- }
+
if( m_btfiles.BuildFromMI(b, flen, saveas) < 0) ERR_RETURN();
delete []b;
+- PrintOut();
+ b = (char *)0;
- PrintOut();
- if( arg_flg_exam_only ) return 0;
-@@ -242,6 +245,17 @@
+- if( arg_flg_exam_only ) return 0;
++ if( arg_flg_exam_only ){
++ PrintOut();
++ return 0;
++ }else{
++ arg_flg_exam_only = 1;
++ PrintOut();
++ arg_flg_exam_only = 0;
++ }
+
+ if( ( r = m_btfiles.CreateFiles() ) < 0) ERR_RETURN();
+
+@@ -242,6 +258,17 @@
if( !pBF ) ERR_RETURN();
#endif
@@ -96,7 +1732,54 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
m_left_bytes = m_btfiles.GetTotalLength() / m_piece_length;
if( m_btfiles.GetTotalLength() % m_piece_length ) m_left_bytes++;
if( m_left_bytes != m_npieces ) ERR_RETURN();
-@@ -309,7 +323,8 @@
+@@ -252,13 +279,13 @@
+
+ if( !arg_flg_check_only ){
+ if( pBF->SetReferFile(arg_bitfield_file) >= 0){
+- size_t idx;
+- r = 0;
+- for( idx = 0; idx < m_npieces; idx++ )
+- if( pBF->IsSet(idx) ) m_left_bytes -= GetPieceLength(idx);
++ size_t idx;
++ r = 0;
++ for( idx = 0; idx < m_npieces; idx++ )
++ if( pBF->IsSet(idx) ) m_left_bytes -= GetPieceLength(idx);
+ }
+ else{
+- fprintf(stderr,"warn, couldn't set bit field refer file %s.\n",arg_bitfield_file);
++ fprintf(stderr,"warn, couldn't set bit field refer file %s.\n",arg_bitfield_file);
+ }
+ }
+
+@@ -271,7 +298,9 @@
+ CheckExist();
+ }
+
+- printf("Already/Total: %u/%u\n",pBF->Count(),m_npieces);
++ PrintOut();
++ printf("Already/Total: %u/%u (%d%%)\n",pBF->Count(),m_npieces,
++ 100 * pBF->Count() / m_npieces);
+
+ if( arg_flg_check_only ){
+ if( arg_bitfield_file ) pBF->WriteToFile(arg_bitfield_file);
+@@ -285,11 +314,11 @@
+ memset(ptr,0,8); // reserved set zero.
+
+ { // peer id
+- char *sptr = arg_user_agent;
+- char *dptr = (char *)m_shake_buffer + 48;
+- char *eptr = dptr + PEER_ID_LEN;
+- while (*sptr) *dptr++ = *sptr++;
+- while (dptr < eptr) *dptr++ = (unsigned char)random();
++ char *sptr = arg_user_agent;
++ char *dptr = (char *)m_shake_buffer + 48;
++ char *eptr = dptr + PEER_ID_LEN;
++ while (*sptr) *dptr++ = *sptr++;
++ while (dptr < eptr) *dptr++ = (unsigned char)random();
+ }
+ return 0;
+ }
+@@ -309,7 +338,8 @@
ssize_t btContent::ReadSlice(char *buf,size_t idx,size_t off,size_t len)
{
@@ -106,7 +1789,62 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
if( !m_cache_size ) return m_btfiles.IO(buf, offset, len, 0);
else{
-@@ -405,7 +420,11 @@
+@@ -322,16 +352,16 @@
+ for( ; len && p && CACHE_FIT(p, offset, len);){
+ flg_rescan = 0;
+ if( offset < p->bc_off ){
+- len2 = p->bc_off - offset;
+- if( CacheIO(buf, offset, len2, 0) < 0) return -1;
+- flg_rescan = 1;
++ len2 = p->bc_off - offset;
++ if( CacheIO(buf, offset, len2, 0) < 0) return -1;
++ flg_rescan = 1;
+ }else if( offset > p->bc_off ){
+- len2 = p->bc_off + p->bc_len - offset;
+- if( len2 > len ) len2 = len;
+- memcpy(buf, p->bc_buf + offset - p->bc_off, len2);
++ len2 = p->bc_off + p->bc_len - offset;
++ if( len2 > len ) len2 = len;
++ memcpy(buf, p->bc_buf + offset - p->bc_off, len2);
+ }else{
+- len2 = (len > p->bc_len) ? p->bc_len : len;
+- memcpy(buf, p->bc_buf, len2);
++ len2 = (len > p->bc_len) ? p->bc_len : len;
++ memcpy(buf, p->bc_buf, len2);
+ }
+
+ buf += len2;
+@@ -339,14 +369,14 @@
+ len -= len2;
+
+ if( len ){
+- if( flg_rescan ){
+- for( p = m_cache;
+- p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len);
+- p = p->bc_next) ;
+- }else{
+- time(&p->bc_last_timestamp);
+- p = p->bc_next;
+- }
++ if( flg_rescan ){
++ for( p = m_cache;
++ p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len);
++ p = p->bc_next) ;
++ }else{
++ time(&p->bc_last_timestamp);
++ p = p->bc_next;
++ }
+ }
+ }// end for;
+
+@@ -399,13 +429,17 @@
+ if( p->bc_f_flush ){
+ p->bc_f_flush = 0;
+ if(m_btfiles.IO(p->bc_buf, p->bc_off, p->bc_len, 1) < 0)
+- fprintf(stderr,"warn, write file failed while flush cache.\n");
++ fprintf(stderr,"warn, write file failed while flush cache.\n");
+ }
+ }
ssize_t btContent::WriteSlice(char *buf,size_t idx,size_t off,size_t len)
{
@@ -119,20 +1857,73 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
if( !m_cache_size ) return m_btfiles.IO(buf, offset, len, 1);
else{
-@@ -514,9 +533,9 @@
+@@ -418,18 +452,18 @@
+ for( ; len && p && CACHE_FIT(p, offset, len);){
+ flg_rescan = 0;
+ if( offset < p->bc_off ){
+- len2 = p->bc_off - offset;
+- if( CacheIO(buf, offset, len2, 1) < 0) return -1;
+- flg_rescan = 1;
++ len2 = p->bc_off - offset;
++ if( CacheIO(buf, offset, len2, 1) < 0) return -1;
++ flg_rescan = 1;
+ }else if( offset > p->bc_off ){
+- len2 = p->bc_off + p->bc_len - offset;
+- if( len2 > len ) len2 = len;
+- memcpy(p->bc_buf + offset - p->bc_off, buf, len2);
+- p->bc_f_flush = 1;
++ len2 = p->bc_off + p->bc_len - offset;
++ if( len2 > len ) len2 = len;
++ memcpy(p->bc_buf + offset - p->bc_off, buf, len2);
++ p->bc_f_flush = 1;
+ }else{
+- len2 = (len > p->bc_len) ? p->bc_len : len;
+- memcpy(p->bc_buf, buf, len2);
+- p->bc_f_flush = 1;
++ len2 = (len > p->bc_len) ? p->bc_len : len;
++ memcpy(p->bc_buf, buf, len2);
++ p->bc_f_flush = 1;
+ }
+
+ buf += len2;
+@@ -437,12 +471,12 @@
+ len -= len2;
+
+ if( len ){
+- if( flg_rescan ){
+- for( p = m_cache; p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); p = p->bc_next) ;
+- }else{
+- time(&p->bc_last_timestamp);
+- p = p->bc_next;
+- }
++ if( flg_rescan ){
++ for( p = m_cache; p && (offset + len) > p->bc_off && !CACHE_FIT(p,offset,len); p = p->bc_next) ;
++ }else{
++ time(&p->bc_last_timestamp);
++ p = p->bc_next;
++ }
+ }
+ }// end for;
+
+@@ -514,12 +548,12 @@
if( !percent ) percent = 1;
for( ; idx < m_npieces; idx++){
- if( GetHashValue(idx, md) == 0 && memcmp(md, m_hash_table + idx * 20, 20) == 0){
- m_left_bytes -= GetPieceLength(idx);
- pBF->Set(idx);
-+ if( GetHashValue(idx, md) == 0 && memcmp(md, m_hash_table + idx * 20, 20) == 0){
++ if( GetHashValue(idx, md) == 0 && memcmp(md, m_hash_table + idx * 20, 20) == 0){
+ m_left_bytes -= GetPieceLength(idx);
+ pBF->Set(idx);
}
- if(idx % percent == 0){
- printf("\rCheck exist: %d/%d",idx,pBF->NBits());
-@@ -575,7 +594,6 @@
+- if(idx % percent == 0){
+- printf("\rCheck exist: %d/%d",idx,pBF->NBits());
++ if(idx % percent == 0 || idx == m_npieces-1){
++ printf("\rCheck exist: %d/%d",idx+1,pBF->NBits());
+ fflush(stdout);
+ }
+ }
+@@ -575,7 +609,6 @@
fprintf(stderr,"warn,piece %d hash check failed.\n",idx);
return 0;
}
@@ -140,21 +1931,39 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
pBF->Set(idx);
m_left_bytes -= GetPieceLength(idx);
return 1;
-@@ -592,6 +610,7 @@
+@@ -590,8 +623,10 @@
+
+ int btContent::SeedTimeout(const time_t *pnow)
{
++ u_int64_t dl;
if( pBF->IsFull() ){
if( !m_seed_timestamp ){
-+ Tracker.Reset(15);
++ Tracker.Reset(1);
Self.ResetDLTimer();
Self.ResetULTimer();
ReleaseHashTable();
-@@ -605,3 +624,13 @@
+@@ -599,9 +634,27 @@
+ FlushCache();
+ printf("\nDownload complete.\n");
+ printf("Total time used: %lu minutes.\n",(*pnow - m_start_timestamp) / 60);
+- printf("Seed for other %lu hours.\n\n", cfg_seed_hours);
++ printf("Seed for other %lu hours", cfg_seed_hours);
++ if(cfg_seed_ratio) printf(" or to ratio of %f", cfg_seed_ratio);
++ printf(".\n\n");
+ }
+- if( (*pnow - m_seed_timestamp) >= (cfg_seed_hours * 60 * 60) ) return 1;
++ dl = (Self.TotalDL() > 0) ? Self.TotalDL() : GetTotalFilesLength();
++ if( (cfg_seed_ratio == 0 && cfg_seed_hours == 0) ||
++ (cfg_seed_hours > 0 &&
++ (*pnow - m_seed_timestamp) >= (cfg_seed_hours * 60 * 60)) ||
++ (cfg_seed_ratio > 0 &&
++ cfg_seed_ratio <= Self.TotalUL() / dl) ) return 1;
}
return 0;
}
+
+
-+size_t btContent::getFilePieces(unsigned char nfile){
++size_t btContent::getFilePieces(size_t nfile){
+ return m_btfiles.getFilePieces(nfile);
+}
+
@@ -162,10 +1971,22 @@ diff -u ctorrent-1.3.4.orig/btcontent.cpp ctorrent-1.3.4/btcontent.cpp
+void btContent::SetFilter(){
+ m_btfiles.SetFilter(arg_file_to_download,pBFilter,m_piece_length);
+}
-diff -u ctorrent-1.3.4.orig/btcontent.h ctorrent-1.3.4/btcontent.h
---- ctorrent-1.3.4.orig/btcontent.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btcontent.h 2005-08-11 23:45:29.426694136 +0200
-@@ -60,6 +60,7 @@
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btcontent.h ctorrent-1.3.4/btcontent.h
+--- ctorrent-1.3.4.sav/btcontent.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btcontent.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,9 +1,8 @@
+ #ifndef BTCONTENT_H
+ #define BTCONTENT_H
+
+-#include <sys/types.h>
+-
+ #include "def.h"
++#include <sys/types.h>
+
+ #include <stdio.h>
+ #include "bitfield.h"
+@@ -60,6 +59,7 @@
public:
BitField *pBF;
@@ -173,30 +1994,90 @@ diff -u ctorrent-1.3.4.orig/btcontent.h ctorrent-1.3.4/btcontent.h
char *global_piece_buffer;
btContent();
-@@ -93,6 +94,11 @@
+@@ -93,6 +93,15 @@
int PrintOut();
int SeedTimeout(const time_t *pnow);
+
+
-+ void SetFilter();
-+ size_t getFilePieces(unsigned char nfile);
++ void SetFilter();
++ void SetTmpFilter(int nfile, BitField *pFilter) { m_btfiles.SetFilter(nfile, pFilter, m_piece_length); }
++ size_t getFilePieces(size_t nfile);
+
++ BTFILE *GetNextFile(BTFILE *file) { return m_btfiles.GetNextFile(file); }
++ time_t GetStartTime() { return m_start_timestamp; }
++ time_t GetSeedTime() { return m_seed_timestamp; }
};
extern btContent BTCONTENT;
-diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
---- ctorrent-1.3.4.orig/btfiles.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btfiles.cpp 2005-08-11 23:45:29.426694136 +0200
-@@ -105,6 +105,7 @@
- pos = (size_t) (off - (n - pbf->bf_length));
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
+--- ctorrent-1.3.4.sav/btfiles.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btfiles.cpp 2006-06-28 19:30:13.000000000 +0200
+@@ -8,8 +8,12 @@
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <sys/param.h>
++#if defined(HAVE_LIBCRYPT) || defined(HAVE_LIBMD) || defined(HAVE_LIBCRYPTO)
++#include <sha.h>
++#elif defined(HAVE_LIBSSL)
+ #include <openssl/sha.h>
+ #endif
++#endif
+
+ #include <time.h>
+ #include <sys/stat.h>
+@@ -19,6 +23,9 @@
+ #include <errno.h>
+
+ #include "bencode.h"
++#include "btconfig.h"
++#include "btcontent.h"
++#include "bitfield.h"
+
+ #define MAX_OPEN_FILES 20
+
+@@ -66,7 +73,7 @@
+ for(pbf_n = m_btfhead; pbf_n ; pbf_n = pbf_n->bf_next){
+ if(!pbf_n->bf_flag_opened) continue; // file not been opened.
+ if( !pbf_close || pbf_n->bf_last_timestamp < pbf_close->bf_last_timestamp)
+- pbf_close = pbf_n;
++ pbf_close = pbf_n;
+ }
+ if(!pbf_close || fclose(pbf_close->bf_fp) < 0) return -1;
+ pbf_close->bf_flag_opened = 0;
+@@ -90,7 +97,7 @@
+ ssize_t btFiles::IO(char *buf, u_int64_t off, size_t len, const int iotype)
+ {
+ u_int64_t n = 0;
+- size_t pos,nio;
++ off_t pos,nio;
+ BTFILE *pbf = m_btfhead;
+
+ if( ( off + (u_int64_t)len ) > m_total_files_length) return -1;
+@@ -102,16 +109,21 @@
+
+ if( !pbf ) return -1;
+
+- pos = (size_t) (off - (n - pbf->bf_length));
++ pos = off - (n - pbf->bf_length);
for(; len ;){
+
if( !pbf->bf_flag_opened ){
if( _btf_open(pbf) < 0 ) return -1;
}
-@@ -119,6 +120,7 @@
+
+ if( m_flag_automanage ) time(&pbf->bf_last_timestamp);
+
++#ifdef HAVE_FSEEKO
++ if( fseeko(pbf->bf_fp,pos,SEEK_SET) < 0) return -1;
++#else
+ if( fseek(pbf->bf_fp,(long) pos,SEEK_SET) < 0) return -1;
++#endif
+
+ nio = (len < pbf->bf_length - pos) ? len : (pbf->bf_length - pos);
+
+@@ -119,6 +131,7 @@
if( 1 != fread(buf,nio,1,pbf->bf_fp) ) return -1;
}else{
if( 1 != fwrite(buf,nio,1,pbf->bf_fp) ) return -1;
@@ -204,7 +2085,31 @@ diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
}
len -= nio;
-@@ -169,7 +171,7 @@
+@@ -149,14 +162,21 @@
+ return 0;
+ }
+
+-int btFiles::_btf_ftruncate(int fd,size_t length)
++int btFiles::_btf_ftruncate(int fd,int64_t length)
+ {
+ #ifdef WINDOWS
+ char c = (char)0;
+ if(lseek(fd,length - 1, SEEK_SET) < 0 ) return -1;
+ return write(fd, &c, 1);
+ #else
+- return ftruncate(fd,length);
++ // ftruncate() not allowed on [v]fat under linux
++ int retval = ftruncate(fd,length);
++ if( retval < 0 ) {
++ char c = (char)0;
++ if(lseek(fd,length - 1, SEEK_SET) < 0 ) return -1;
++ return write(fd, &c, 1);
++ }
++ else return retval;
+ #endif
+ }
+
+@@ -169,7 +189,7 @@
DIR *dp;
BTFILE *pbf;
@@ -213,7 +2118,58 @@ diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
if( cur_path ){
strcpy(fn, full_cur);
-@@ -293,7 +295,7 @@
+@@ -185,12 +205,12 @@
+ while( (struct dirent*) 0 != (dirp = readdir(dp)) ){
+
+ if( 0 == strcmp(dirp->d_name, ".") ||
+- 0 == strcmp(dirp->d_name, "..") ) continue;
++ 0 == strcmp(dirp->d_name, "..") ) continue;
+
+ if( cur_path ){
+ if(MAXPATHLEN < snprintf(fn, MAXPATHLEN, "%s%c%s", cur_path, PATH_SP, dirp->d_name)){
+- fprintf(stderr,"error, pathname too long\n");
+- return -1;
++ fprintf(stderr,"error, pathname too long\n");
++ return -1;
+ }
+ }else{
+ strcpy(fn, dirp->d_name);
+@@ -232,7 +252,7 @@
+ return 0;
+ }
+
+-int btFiles::_btf_creat_by_path(const char *pathname, size_t file_length)
++int btFiles::_btf_creat_by_path(const char *pathname, int64_t file_length)
+ {
+ struct stat sb;
+ int fd;
+@@ -251,17 +271,17 @@
+ *p = '\0';
+ if(stat(sp,&sb) < 0){
+ if( ENOENT == errno ){
+- if( !last ){
++ if( !last ){
+ #ifdef WINDOWS
+- if(mkdir(sp) < 0) break;
++ if(mkdir(sp) < 0) break;
+ #else
+- if(mkdir(sp,0755) < 0) break;
++ if(mkdir(sp,0755) < 0) break;
+ #endif
+- }else{
+- if((fd = creat(sp,0644)) < 0) { last = 0; break; }
+- if(file_length && _btf_ftruncate(fd, file_length) < 0){close(fd); last = 0; break;}
+- close(fd);
+- }
++ }else{
++ if((fd = creat(sp,0644)) < 0) { last = 0; break; }
++ if(file_length && _btf_ftruncate(fd, file_length) < 0){close(fd); last = 0; break;}
++ close(fd);
++ }
+ }else{last = 0; break;}
+ }
+ if( !last ){ *p = PATH_SP; pnext = p + 1;}
+@@ -293,7 +313,7 @@
m_btfhead = pbf;
}else if( S_IFDIR & sb.st_mode ){
char wd[MAXPATHLEN];
@@ -222,7 +2178,135 @@ diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
m_directory = new char[strlen(pathname) + 1];
#ifndef WINDOWS
if( !m_directory ) return -1;
-@@ -488,3 +490,54 @@
+@@ -319,20 +339,21 @@
+ char path[MAXPATHLEN];
+ const char *s, *p;
+ size_t r,q,n;
+- if( !decode_query(metabuf, metabuf_len, "info|name",&s,&q,QUERY_STR) ||
++ int64_t t;
++ if( !decode_query(metabuf, metabuf_len, "info|name",&s,&q,(int64_t*) 0,QUERY_STR) ||
+ MAXPATHLEN <= q) return -1;
+
+ memcpy(path, s, q);
+ path[q] = '\0';
+
+- r = decode_query(metabuf,metabuf_len,"info|files",(const char**) 0, &q,QUERY_POS);
++ r = decode_query(metabuf,metabuf_len,"info|files",(const char**) 0, &q,(int64_t*) 0,QUERY_POS);
+
+ if( r ){
+ BTFILE *pbf_last = (BTFILE*) 0;
+ BTFILE *pbf = (BTFILE*) 0;
+ size_t dl;
+ if( decode_query(metabuf,metabuf_len,"info|length",
+- (const char**) 0,(size_t*) 0,QUERY_INT) )
++ (const char**) 0,(size_t*) 0,(int64_t*) 0,QUERY_LONG) )
+ return -1;
+
+ if( saveas ){
+@@ -355,14 +376,14 @@
+ for(; q && 'e' != *p; p += dl, q -= dl){
+ if(!(dl = decode_dict(p, q, (const char*) 0)) ) return -1;
+ if( !decode_query(p, dl, "length", (const char**) 0,
+- &r,QUERY_INT) ) return -1;
++ (size_t*) 0,&t,QUERY_LONG) ) return -1;
+ pbf = _new_bfnode();
+ #ifndef WINDOWS
+ if( !pbf ) return -1;
+ #endif
+- pbf->bf_length = r;
+- m_total_files_length += r;
+- r = decode_query(p, dl, "path", (const char **) 0, &n,QUERY_POS);
++ pbf->bf_length = t;
++ m_total_files_length += t;
++ r = decode_query(p, dl, "path", (const char **) 0, &n,(int64_t*) 0,QUERY_POS);
+ if( !r ) return -1;
+ if(!decode_list2path(p + r, n, path)) return -1;
+ pbf->bf_filename = new char[strlen(path) + 1];
+@@ -375,13 +396,13 @@
+ }
+ }else{
+ if( !decode_query(metabuf,metabuf_len,"info|length",
+- (const char**) 0,(size_t*) &q,QUERY_INT) )
++ (const char**) 0,(size_t*) 0,&t,QUERY_LONG) )
+ return -1;
+ m_btfhead = _new_bfnode();
+ #ifndef WINDOWS
+ if( !m_btfhead) return -1;
+ #endif
+- m_btfhead->bf_length = m_total_files_length = q;
++ m_btfhead->bf_length = m_total_files_length = t;
+ if( saveas ){
+ m_btfhead->bf_filename = new char[strlen(saveas) + 1];
+ #ifndef WINDOWS
+@@ -409,31 +430,31 @@
+ for(; pbt; pbt = pbt->bf_next){
+ if( m_directory ){
+ if( MAXPATHLEN <= snprintf(fn, MAXPATHLEN, "%s%c%s", m_directory, PATH_SP, pbt->bf_filename) )
+- return -1;
++ return -1;
+ }else{
+ strcpy(fn, pbt->bf_filename);
+ }
+
+ if(stat(fn ,&sb) < 0){
+ if(ENOENT == errno){
+- if( !_btf_creat_by_path(fn,pbt->bf_length)){
+- fprintf(stderr,"error, create file %s failed.\n",fn);
+- return -1;
+- }
++ if( !_btf_creat_by_path(fn,pbt->bf_length)){
++ fprintf(stderr,"error, create file %s failed.\n",fn);
++ return -1;
++ }
+ }else{
+- fprintf(stderr,"error, couldn't create file %s\n", fn);
+- return -1;
++ fprintf(stderr,"error, couldn't create file %s\n", fn);
++ return -1;
+ }
+ }else{
+ if( !check_exist) check_exist = 1;
+ if( !(S_IFREG & sb.st_mode) ){
+- fprintf(stderr,"error, file %s not a regular file.\n", fn);
+- return -1;
++ fprintf(stderr,"error, file %s not a regular file.\n", fn);
++ return -1;
+ }
+ if(sb.st_size != pbt->bf_length){
+- fprintf(stderr,"error, file %s 's size not match. must be %u\n",
+- fn, pbt->bf_length);
+- return -1;
++ fprintf(stderr,"error, file %s 's size not match. must be %u\n",
++ fn, pbt->bf_length);
++ return -1;
+ }
+ }
+ } //end for
+@@ -445,10 +466,21 @@
+ BTFILE *p = m_btfhead;
+ size_t id = 1;
+ printf("FILES INFO\n");
++ BitField tmpBitField, tmpFilter;
+ if(m_directory) printf("Directory: %s\n",m_directory);
+ for( ; p ; p = p->bf_next ){
+- printf("<%d> %c%s [%u]\n",id++,
+- m_directory ? '\t': ' ',p->bf_filename, p->bf_length);
++ printf("<%d> %c%s [%llu]",id,
++ m_directory ? '\t': ' ',p->bf_filename, p->bf_length);
++ if( !arg_flg_exam_only ){
++ BTCONTENT.SetTmpFilter(id, &tmpFilter);
++ tmpBitField = *BTCONTENT.pBF;
++ tmpBitField.Except(tmpFilter);
++ printf(" %u/%u (%d%%)",
++ tmpBitField.Count(), BTCONTENT.getFilePieces(id),
++ 100 * tmpBitField.Count() / BTCONTENT.getFilePieces(id));
++ }
++ ++id;
++ printf("\n");
+ }
+ printf("Total: %lu MB\n\n",(unsigned long)(m_total_files_length / 1024 / 1024));
+ }
+@@ -488,3 +520,73 @@
}
return 1;
}
@@ -244,22 +2328,25 @@ diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
+ size_t start,stop;
+ start = sizeBuffer/pieceLength;
+ stop = (sizeBuffer+p->bf_length)/pieceLength;
-+ printf ("\rDownloading file: <%d> %s \nPieces: %d - %d (%d)\n",nfile,p->bf_filename,start,stop,stop-start+1);
++ // This "if" cuts down on false prints with CTCS.
++ if(arg_file_to_download == nfile){
++ printf ("\rDownloading file: <%d> %s \nPieces: %d - %d (%d)\n",nfile,p->bf_filename,start,stop,stop-start+1);
++ }
+ p->bf_npieces = stop-start+1;
+ for(index=sizeBuffer/pieceLength;index<=(sizeBuffer+p->bf_length)/pieceLength;index++){
-+ pFilter->UnSet(index);
++ pFilter->UnSet(index);
+ }
+ }
+ sizeBuffer+=(u_int64_t) p->bf_length;
+ }
-+ if(nfile>=id){
++ if(nfile>=id || nfile==0){
+ printf("\nEnd of files list. Resuming normal behaviour\n");
+ pFilter->Invert();
+ arg_file_to_download = 0;
+ }
+}
+
-+size_t btFiles::getFilePieces(unsigned char nfile)
++size_t btFiles::getFilePieces(size_t nfile)
+{
+ //returns the pieces of the file already gotten
+
@@ -274,66 +2361,201 @@ diff -u ctorrent-1.3.4.orig/btfiles.cpp ctorrent-1.3.4/btfiles.cpp
+return 0;
+}
+
++BTFILE *btFiles::GetNextFile(BTFILE *file)
++{
++ static BTFILE *p = m_btfhead;
+
++ if( 0==file ) p = m_btfhead;
++ else if( p==file ){
++ p = p->bf_next;
++ }else{
++ for( p=m_btfhead; p && (p != file); p = p->bf_next);
++ if( 0==p ){
++ p = m_btfhead;
++ }else{
++ p = p->bf_next;
++ }
++ }
++ return p;
++}
+
+
-diff -u ctorrent-1.3.4.orig/btfiles.h ctorrent-1.3.4/btfiles.h
---- ctorrent-1.3.4.orig/btfiles.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btfiles.h 2005-08-11 23:45:29.427693984 +0200
-@@ -3,6 +3,10 @@
-
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btfiles.h ctorrent-1.3.4/btfiles.h
+--- ctorrent-1.3.4.sav/btfiles.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btfiles.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,18 +1,22 @@
+ #ifndef BTFILES_H
+ #define BTFILES_H
+
++#include "./def.h"
#include <sys/types.h>
#include <stdio.h>
+-#include "./def.h"
+
+#include "bitfield.h"
-+extern unsigned char arg_file_to_download;
-+
- #include "./def.h"
typedef struct _btfile{
-@@ -14,6 +18,8 @@
+ char *bf_filename; // full path of file.
+- size_t bf_length; //single file length limits to 4 GB
++ u_int64_t bf_length;
+ FILE *bf_fp;
- size_t bf_completed; // already downloaded length
+ time_t bf_last_timestamp; // last io timestamp.
-+ size_t bf_npieces; //number of pieces
+- size_t bf_completed; // already downloaded length
++ u_int64_t bf_completed; // already downloaded length
+
++ size_t bf_npieces; //number of pieces
+
unsigned char bf_flag_opened:1;
unsigned char bf_flag_need:1;
- unsigned char bf_reserved:6;
-@@ -53,6 +59,10 @@
+@@ -36,8 +40,8 @@
+
+ BTFILE* _new_bfnode();
+ int _btf_open(BTFILE *sbf_p);
+- int _btf_ftruncate(int fd,size_t length);
+- int _btf_creat_by_path(const char *pathname, size_t file_length);
++ int _btf_ftruncate(int fd,int64_t length);
++ int _btf_creat_by_path(const char *pathname, int64_t file_length);
+ int _btf_destroy();
+ int _btf_recurses_directory(const char *cur_path, BTFILE *lastnode);
+
+@@ -53,9 +57,14 @@
u_int64_t GetTotalLength() const { return m_total_files_length; }
ssize_t IO(char *buf, u_int64_t off, size_t len, const int iotype);
size_t FillMetaInfo(FILE* fp);
+
+ void SetFilter(int nfile, BitField *pFilter,size_t pieceLength);
-+ size_t getFilePieces(unsigned char nfile);
++ size_t getFilePieces(size_t nfile);
+
#ifndef WINDOWS
void PrintOut();
#endif
-diff -u ctorrent-1.3.4.orig/btrequest.cpp ctorrent-1.3.4/btrequest.cpp
---- ctorrent-1.3.4.orig/btrequest.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btrequest.cpp 2005-08-11 23:45:29.427693984 +0200
-@@ -44,6 +44,58 @@
- rq.rq_head = (PSLICE) 0;
++ BTFILE *GetNextFile(BTFILE *file);
+ };
+
+ #endif
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btrequest.cpp ctorrent-1.3.4/btrequest.cpp
+--- ctorrent-1.3.4.sav/btrequest.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btrequest.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -24,24 +24,179 @@
+ RequestQueue::RequestQueue()
+ {
+ rq_head = (PSLICE) 0;
++ rq_send = rq_head;
+ }
+
+ void RequestQueue::Empty()
+ {
+ if(rq_head) _empty_slice_list(&rq_head);
++ rq_send = rq_head;
}
-+int RequestQueue::CopyShuffle(RequestQueue &rq)
+ void RequestQueue::SetHead(PSLICE ps)
+ {
+ if( rq_head ) _empty_slice_list(&rq_head);
+ rq_head = ps;
++ rq_send = rq_head;
+ }
+
+ void RequestQueue::operator=(RequestQueue &rq)
+ {
++ PSLICE n, u = (PSLICE) 0;
++ size_t idx;
++ int flag = 0;
++
+ if( rq_head ) _empty_slice_list(&rq_head);
+ rq_head = rq.rq_head;
+- rq.rq_head = (PSLICE) 0;
++ rq_send = rq_head;
++
++ // Reassign only the first piece represented in the queue.
++ n = rq_head;
++ idx = n->index;
++ for( ; n ; u = n,n = u->next){
++ if( rq.rq_send == n ) flag = 1;
++ if( n->index != idx ) break;
++ }
++ if(n){
++ u->next = (PSLICE) 0;
++ rq.rq_head = n;
++ if(flag) rq.rq_send = rq.rq_head;
++ }else{
++ rq.rq_head = (PSLICE) 0;
++ rq.rq_send = rq.rq_head;
++ }
++}
++
++int RequestQueue::Copy(RequestQueue *prq)
+{
-+ PSLICE ps;
++ PSLICE n, u=(PSLICE)0, ps;
++ size_t idx;
+
-+ if( rq_head ) _empty_slice_list(&rq_head);
-+
-+ if( rq.IsEmpty() ) return 0;
-+ for (ps = rq.GetHead(); ps; ps = ps->next) {
-+ if (random()&01) {
-+ if (Add(ps->index, ps->offset, ps->length) < 0) return -1;
++ if( prq->IsEmpty() ) return 0;
++
++ ps = prq->GetHead();
++ idx = ps->index;
++ for ( ; ps; ps = ps->next) {
++ if( ps->index != idx ) break;
++ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1;
++ }
++ return 0;
++}
++
++int RequestQueue::CopyShuffle(RequestQueue *prq, size_t piece)
++{
++ PSLICE n, u=(PSLICE)0, ps, start;
++ size_t idx;
++ unsigned long rndbits;
++ int i=0;
++
++ if( prq->IsEmpty() ) return 0;
++
++ n = rq_head;
++ for( ; n ; u = n,n = u->next); // move to end
++
++ ps = prq->GetHead();
++ for ( ; ps && ps->index != piece; ps = ps->next);
++ start = ps;
++
++ idx = ps->index;
++
++ // First, skip to the slices that haven't been sent to the original peer.
++ if( prq->rq_send && prq->rq_send->index == idx ){
++ ps = prq->rq_send;
++ for ( ; ps; ps = ps->next){
++ if( ps->index != idx ) break;
++ if( !i-- ){
++ rndbits = random();
++ i = 30;
++ }
++ if( (rndbits>>=1)&01 ){
++ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1;
++ }
++ else if( Insert(u, ps->index, ps->offset, ps->length) < 0 ) return -1;
+ }
-+ else if (Insert(ps->index, ps->offset, ps->length) < 0) return -1;
++ if(u) n = u->next;
++ else n = rq_head;
++ for( ; n ; u = n,n = u->next); // move to end
++ }
++
++ // Now put the already-requested slices at the end.
++ ps = start;
++ for ( ; ps && ps != prq->rq_send; ps = ps->next){
++ if( ps->index != idx ) break;
++ if( !i-- ){
++ rndbits = random();
++ i = 30;
++ }
++ if( (rndbits>>=1)&01 ){
++ if( Add(ps->index, ps->offset, ps->length) < 0 ) return -1;
++ }
++ else if( Insert(u, ps->index, ps->offset, ps->length) < 0 ) return -1;
+ }
+ return 0;
+}
+
++// Counts all queued slices.
+size_t RequestQueue::Qsize()
+{
+ size_t cnt = 0;
@@ -344,7 +2566,25 @@ diff -u ctorrent-1.3.4.orig/btrequest.cpp ctorrent-1.3.4/btrequest.cpp
+ return cnt;
+}
+
-+int RequestQueue::Insert(size_t idx,size_t off,size_t len)
++// Counts only slices from one piece.
++size_t RequestQueue::Qlen(size_t piece)
++{
++ size_t cnt = 0;
++ PSLICE n = rq_head;
++ PSLICE u = (PSLICE) 0;
++ size_t idx;
++
++ for ( ; n && n->index != piece; n = n->next);
++
++ if(n) idx = n->index;
++ for( ; n ; u = n,n = u->next){
++ if( n->index != idx ) break;
++ cnt++;
++ }
++ return cnt;
++}
++
++int RequestQueue::Insert(PSLICE ps,size_t idx,size_t off,size_t len)
+{
+ size_t cnt = 0;
+ PSLICE n = rq_head;
@@ -360,31 +2600,230 @@ diff -u ctorrent-1.3.4.orig/btrequest.cpp ctorrent-1.3.4/btrequest.cpp
+ if( !n ) return -1;
+#endif
+
-+ n->next = rq_head;
+ n->index = idx;
+ n->offset = off;
+ n->length = len;
+
-+ rq_head = n;
++ // ps is the slice to insert after; if 0, insert at the head.
++ if(ps){
++ n->next = ps->next;
++ ps->next = n;
++ if( rq_send == n->next ) rq_send = n;
++ }else{
++ n->next = rq_head;
++ rq_head = n;
++ rq_send = rq_head;
++ }
++
++ return 0;
+ }
+
+ int RequestQueue::Add(size_t idx,size_t off,size_t len)
+@@ -64,8 +219,33 @@
+ n->index = idx;
+ n->offset = off;
+ n->length = len;
++ n->reqtime = (time_t) 0;
++
++ if( u ) u->next = n;
++ else{
++ rq_head = n;
++ rq_send = rq_head;
++ }
+
+- if( u ) u->next = n; else rq_head = n;
++ if( !rq_send ) rq_send = n;
+
+ return 0;
+}
+
- int RequestQueue::Add(size_t idx,size_t off,size_t len)
++int RequestQueue::Append(PSLICE ps)
++{
++ size_t cnt = 0;
++ PSLICE n = rq_head;
++ PSLICE u = (PSLICE) 0;
++
++ for( ; n ; u = n,n = u->next) cnt++; // move to end
++
++ if( cnt >= cfg_req_queue_length ) return -1; // already full
++
++ if(u) u->next = ps;
++ else rq_head = ps;
++
++ if( !rq_send ) rq_send = ps;
+
+ return 0;
+ }
+@@ -82,11 +262,41 @@
+ if( !n ) return -1; /* not found */
+
+ if( u ) u->next = n->next; else rq_head = n->next;
++ if( rq_send == n ) rq_send = n->next;
+ delete n;
+
+ return 0;
+ }
+
++int RequestQueue::HasIdx(size_t idx)
++{
++ PSLICE n = rq_head;
++
++ for( ; n ; n = n->next){
++ if(n->index == idx) break;
++ }
++
++ return n ? 1 : 0;
++}
++
++time_t RequestQueue::GetReqTime(size_t idx,size_t off,size_t len)
++{
++ PSLICE n = rq_head;
++
++ for( ; n ; n = n->next){
++ if(n->index == idx && n->offset == off && n->length == len ) break;
++ }
++
++ if( !n ) return -1; /* not found */
++
++ return n->reqtime;
++}
++
++void RequestQueue::SetReqTime(PSLICE n,time_t t)
++{
++ n->reqtime = t;
++}
++
+ int RequestQueue::Pop(size_t *pidx,size_t *poff,size_t *plen)
+ {
+ PSLICE n;
+@@ -99,6 +309,7 @@
+ if(poff) *poff = rq_head->offset;
+ if(plen) *plen = rq_head->length;
+
++ if( rq_send == rq_head ) rq_send = n;
+ delete rq_head;
+
+ rq_head = n;
+@@ -121,8 +332,6 @@
+ {
+ size_t i,off,len,ns;
+
+- if( rq_head ) _empty_slice_list(&rq_head);
+-
+ ns = NSlices(idx);
+
+ for( i = off = 0; i < ns; i++){
+@@ -154,9 +363,11 @@
+ int RequestQueue::IsValidRequest(size_t idx,size_t off,size_t len)
{
- size_t cnt = 0;
-@@ -231,3 +283,33 @@
+ return ( idx < BTCONTENT.GetNPieces() &&
+- len &&
+- (off + len) <= BTCONTENT.GetPieceLength(idx) &&
+- len <= cfg_max_slice_size) ?
++ len &&
++ (off + len) <= BTCONTENT.GetPieceLength(idx) &&
++// len <= cfg_max_slice_size) ?
++ // See note for cfg_max_slice_size in btconfig.h
++ len <= 2 * cfg_max_slice_size) ?
+ 1 : 0;
+ }
+
+@@ -196,20 +407,51 @@
+
+ int PendingQueue::Pending(RequestQueue *prq)
+ {
+- int i = 0;
++ int i = 0, j = 0;
++ PSLICE n, u = (PSLICE) 0;
++ size_t idx, off, len;
++ RequestQueue tmprq;
+
+ if( pq_count >= PENDING_QUEUE_SIZE ){
+ prq->Empty();
+ return -1;
}
++ if( prq->Qlen(prq->GetRequestIdx()) >=
++ BTCONTENT.GetPieceLength() / cfg_req_slice_size ){
++ // This shortcut relies on the fact that we don't add to a queue if it
++ // already contains a full piece.
++ prq->Empty();
++ return 0;
++ }
+
+- for( ; i < PENDING_QUEUE_SIZE; i++)
++ for( ; i < PENDING_QUEUE_SIZE; i++){
+ if(pending_array[i] == (PSLICE) 0){
+- pending_array[i] = prq->GetHead();
+- prq->Release();
+- pq_count++;
+- break;
++ // Don't add a piece to Pending more than once.
++ if(!j) j = i;
++ }else if(prq->GetRequestIdx() == pending_array[i]->index){
++ while( !prq->IsEmpty() &&
++ prq->GetRequestIdx() == pending_array[i]->index )
++ prq->Pop(&idx,&off,&len);
++ if( prq->IsEmpty() ) return 0;
++ i = 0;
+ }
++ }
++ i = j;
++ pending_array[i] = prq->GetHead();
++ prq->Release();
++ pq_count++;
++
++ // If multiple pieces are queued, break up the queue separately.
++ n = pending_array[i];
++ idx = n->index;
++ for( ; n ; u = n, n = u->next)
++ if( n->index != idx ) break;
++ if(n){
++ u->next = (PSLICE) 0;
++ tmprq.SetHead(n);
++ Pending(&tmprq);
++ tmprq.Release();
++ }
+
return 0;
}
+@@ -218,16 +460,57 @@
+ {
+ int i = 0;
+ size_t sc = pq_count;
++ size_t idx;
+ for( ; i < PENDING_QUEUE_SIZE && sc; i++){
+ if( pending_array[i] != (PSLICE) 0){
++ if( bf.IsSet(pending_array[i]->index) &&
++ !prq->HasIdx(pending_array[i]->index) ){
++ idx = pending_array[i]->index;
++ prq->Append(pending_array[i]);
++ pending_array[i] = (PSLICE) 0;
++ pq_count--;
++ Delete(idx); // delete any copies from Pending
++ break;
++ }
+ sc--;
+- if( bf.IsSet(pending_array[i]->index) ){
+- prq->SetHead(pending_array[i]);
+- pending_array[i] = (PSLICE) 0;
+- pq_count--;
+- break;
++ }
++ }
++ // Return value now indicates whether a piece was assigned.
++ return sc;
++}
+
++// This routine should no longer be necessary, but keeping it as a failsafe.
+int PendingQueue::Delete(size_t idx)
+{
+ int i = 0;
+ for ( ; i < PENDING_QUEUE_SIZE && pq_count; i++){
+ if( (PSLICE) 0 != pending_array[i] && idx == pending_array[i]->index){
-+ delete pending_array[i];
-+ pending_array[i] = (PSLICE) 0;
++ if(arg_verbose) fprintf(stderr, "PQD found %d\n", (int)idx);
++ _empty_slice_list(&(pending_array[i]));
++ pq_count--;
++ break;
+ }
+ }
+ return 0;
@@ -399,31 +2838,77 @@ diff -u ctorrent-1.3.4.orig/btrequest.cpp ctorrent-1.3.4/btrequest.cpp
+ //check if off & len match any slice
+ //remove the slice if so
+ rq.SetHead(pending_array[i]);
-+ if( rq.Remove(idx, off, len) == 0 )
++ if( rq.Remove(idx, off, len) == 0 ){
+ pending_array[i] = rq.GetHead();
++ if( (PSLICE) 0 == pending_array[i] ) pq_count--;
++ i = PENDING_QUEUE_SIZE; // exit loop
+ }
+ rq.Release();
-+ }
-+ }
-+ return 0;
-+}
+ }
+ }
+ return 0;
+ }
+
-diff -u ctorrent-1.3.4.orig/btrequest.h ctorrent-1.3.4/btrequest.h
---- ctorrent-1.3.4.orig/btrequest.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btrequest.h 2005-08-11 23:45:29.427693984 +0200
-@@ -31,9 +31,12 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btrequest.h ctorrent-1.3.4/btrequest.h
+--- ctorrent-1.3.4.sav/btrequest.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btrequest.h 2006-06-28 19:30:02.000000000 +0200
+@@ -2,6 +2,7 @@
+ #define SLICE_H
+
+ #include <sys/types.h>
++#include <time.h>
+ #include "btcontent.h"
+ #include "bitfield.h"
+
+@@ -9,6 +10,7 @@
+ size_t index;
+ size_t offset;
+ size_t length;
++ time_t reqtime;
+ struct _slice *next;
+ }SLICE,*PSLICE;
+
+@@ -17,6 +19,7 @@
+ private:
+ PSLICE rq_head;
+ public:
++ PSLICE rq_send; // next slice to request
+
+ RequestQueue();
+ ~RequestQueue();
+@@ -24,18 +27,30 @@
+ void Empty();
+
+ void SetHead(PSLICE ps);
++ void SetNextSend(PSLICE ps) { rq_send = ps; }
+ PSLICE GetHead() const { return rq_head; }
++ PSLICE NextSend() const { return rq_send; }
+ size_t GetRequestIdx(){ return rq_head ? rq_head->index : BTCONTENT.GetNPieces(); }
+ size_t GetRequestLen(){ return rq_head ? rq_head->length : 0; }
+- void Release(){ rq_head = (PSLICE) 0; }
++ void Release(){ rq_head = rq_send = (PSLICE) 0; }
int IsValidRequest(size_t idx,size_t off,size_t len);
void operator=(RequestQueue &rq);
-+ int CopyShuffle(RequestQueue &rq);
++ int Copy(RequestQueue *prq);
++ int CopyShuffle(RequestQueue *prq, size_t piece);
+ size_t Qsize();
++ size_t Qlen(size_t piece);
int IsEmpty() const { return rq_head ? 0 : 1; }
-+ int Insert(size_t idx,size_t off,size_t len);
++ int Insert(PSLICE ps,size_t idx,size_t off,size_t len);
int Add(size_t idx,size_t off,size_t len);
++ int Append(PSLICE ps);
int Remove(size_t idx,size_t off,size_t len);
++ int HasIdx(size_t idx);
++ time_t GetReqTime(size_t idx,size_t off,size_t len);
++ void SetReqTime(PSLICE n,time_t t);
++
-@@ -60,6 +63,8 @@
+ int Pop(size_t *pidx,size_t *poff,size_t *plen);
+ int Peek(size_t *pidx,size_t *poff,size_t *plen) const;
+@@ -60,6 +75,8 @@
int Pending(RequestQueue *prq);
int ReAssign(RequestQueue *prq, BitField &bf);
int Exist(size_t idx);
@@ -432,9 +2917,9 @@ diff -u ctorrent-1.3.4.orig/btrequest.h ctorrent-1.3.4/btrequest.h
};
extern PendingQueue PENDINGQUEUE;
-diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
---- ctorrent-1.3.4.orig/btstream.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/btstream.cpp 2005-08-11 23:45:29.428693832 +0200
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/btstream.cpp ctorrent-1.3.4/btstream.cpp
+--- ctorrent-1.3.4.sav/btstream.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/btstream.cpp 2006-06-28 19:30:02.000000000 +0200
@@ -1,5 +1,6 @@
#include <arpa/inet.h>
#include "btstream.h"
@@ -442,7 +2927,7 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
#include "msgencode.h"
#include "btconfig.h"
-@@ -11,7 +12,8 @@
+@@ -11,22 +12,21 @@
ssize_t btStream::Send_State(unsigned char state)
{
char msg[H_BASE_LEN + 4];
@@ -450,9 +2935,10 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
+
+ set_nl(msg, H_BASE_LEN);
msg[4] = (char)state;
- return out_buffer.PutFlush(sock,msg,H_BASE_LEN + 4);
+- return out_buffer.PutFlush(sock,msg,H_BASE_LEN + 4);
++ return out_buffer.Put(sock,msg,H_BASE_LEN + 4);
}
-@@ -19,12 +21,10 @@
+
ssize_t btStream::Send_Have(size_t idx)
{
char msg[H_HAVE_LEN + 4];
@@ -465,9 +2951,19 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
- *p = htonl(idx);
+ set_nl(msg + 5, idx);
- return out_buffer.PutFlush(sock,msg,H_HAVE_LEN + 4);
+- return out_buffer.PutFlush(sock,msg,H_HAVE_LEN + 4);
++ return out_buffer.Put(sock,msg,H_HAVE_LEN + 4);
}
-@@ -43,14 +43,12 @@
+
+ ssize_t btStream::Send_Bitfield(char *bit_buf,size_t len)
+@@ -37,20 +37,18 @@
+ if(r < 0) return r;
+ r = out_buffer.Put(sock,(char*)&t,1);
+ if(r < 0) return r;
+- return out_buffer.PutFlush(sock,bit_buf,len);
++ return out_buffer.Put(sock,bit_buf,len);
+ }
+
ssize_t btStream::Send_Cancel(size_t idx,size_t off,size_t len)
{
char msg[H_CANCEL_LEN + 4];
@@ -486,7 +2982,7 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
return out_buffer.Put(sock,msg,H_CANCEL_LEN + 4);
}
-@@ -72,14 +70,12 @@
+@@ -72,21 +70,19 @@
ssize_t btStream::Send_Request(size_t idx, size_t off,size_t len)
{
char msg[H_REQUEST_LEN + 4];
@@ -505,6 +3001,14 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
return out_buffer.Put(sock,msg,H_REQUEST_LEN + 4);
}
+ ssize_t btStream::Send_Keepalive()
+ {
+ size_t i = 0;
+- return out_buffer.PutFlush(sock,(char*)&i,4);
++ return out_buffer.Put(sock,(char*)&i,4);
+ }
+
+ int btStream::HaveMessage()
@@ -94,7 +90,7 @@
// if message arrived.
size_t r;
@@ -514,14 +3018,4710 @@ diff -u ctorrent-1.3.4.orig/btstream.cpp ctorrent-1.3.4/btstream.cpp
if( (cfg_max_slice_size + H_PIECE_LEN + 4) < r) return -1; //message too long
if( (r + 4) <= in_buffer.Count() ) return 1;
}
-diff -u ctorrent-1.3.4.orig/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp
---- ctorrent-1.3.4.orig/ctorrent.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/ctorrent.cpp 2005-08-11 23:45:29.428693832 +0200
-@@ -87,9 +87,13 @@
- Tracker.Initial();
+@@ -113,5 +109,5 @@
+
+ ssize_t btStream::Send_Buffer(char *buf, size_t len)
+ {
+- return out_buffer.PutFlush(sock,buf,len);
++ return out_buffer.Put(sock,buf,len);
+ }
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bttime.h ctorrent-1.3.4/bttime.h
+--- ctorrent-1.3.4.sav/bttime.h 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/bttime.h 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,7 @@
++#ifndef BTTIME_H
++#define BTTIME_H
++
++extern time_t now;
++
++#endif
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bufio.cpp ctorrent-1.3.4/bufio.cpp
+--- ctorrent-1.3.4.sav/bufio.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bufio.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -61,7 +61,7 @@
+ #ifndef WINDOWS
+ if(errno == EINTR) continue;
+ #endif
+- return (EWOULDBLOCK == errno) ? (ssize_t)t : -1;
++ return (EWOULDBLOCK == errno || EAGAIN == errno) ? (ssize_t)t : -1;
+ }else if( 0 == r ){
+ return t; // no possible???
+ }else{
+@@ -83,7 +83,7 @@
+ #ifndef WINDOWS
+ if(errno == EINTR) continue;
+ #endif
+- return (EWOULDBLOCK == errno) ? (ssize_t)t : -1;
++ return (EWOULDBLOCK == errno || EAGAIN == errno) ? (ssize_t)t : -1;
+ }else if( 0 == r ){
+ f_socket_remote_closed = 1;
+ return t; //connection closed by remote.
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/bufio.h ctorrent-1.3.4/bufio.h
+--- ctorrent-1.3.4.sav/bufio.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/bufio.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,8 +1,8 @@
+ #ifndef BUFIO_H
+ #define BUFIO_H
+
+-#include <sys/types.h>
+ #include "def.h"
++#include <sys/types.h>
+
+ #ifdef WINDOWS
+ #include <Winsock2.h>
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ChangeLog ctorrent-1.3.4/ChangeLog
+--- ctorrent-1.3.4.sav/ChangeLog 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/ChangeLog 2006-06-28 19:30:02.000000000 +0200
+@@ -1 +1,379 @@
+-*EMPTY*
++
++ Enhanced CTorrent Change Log
++ _________________________________________________________________
++
++ Changes for "dnh2" Release
++
++ Patches
++ * The following patches or their functionality are incorporated:
++ 1380164 [dnh1.2]
++ 1357832 [invert] (included in dnh1.2)
++ 1352866 [dnh1.1]
++ 1266767 [passkey2]
++ 1239547 [dnh1]
++ 1170457 [standalone-sha1] Added as a fallback case in configure if
++ OpenSSL is not found. To force it to be used, define
++ USE_STANDALONE_SHA1 in config.h (after running configure).
++ 1164454 [ip]
++ 1119610 [vfat] This bug appears to be linux-specific; I've tried
++ to handle it in a more general way that may apply to similar
++ situations on other platforms and filesystems, but I have limited
++ capability to test this.
++ 1067196 [lfs] This is the large-file support that many have asked
++ for.
++
++ Optimization
++ * Use fewer call to random() by shifting the previously unused bits.
++ * Time() calls have been greatly reduced; a global timestamp
++ variable "now" is set once per main loop interation and referenced
++ in functions that need a timestamp (except the caching I/O
++ routines which were left alone).
++ * Overall current bandwidth rates are now computed only once per
++ main loop and referenced in any routines that evaluate or control
++ bandwidth.
++ * Avoid flushing peer output buffers except in SendModule. This
++ allows for some consolidation of messages to reduce network
++ overhead.
++
++ Code Fixes
++ * Fixed use of cfg_req_queue_length to be the actual queue size
++ (queue was half of this value).
++ * Fixed: "peer is" verbose output could fubar the terminal.
++ * Formatting: Replaced indentation tabs with spaces for consistency.
++
++ Operational Enhancements
++ * Improved piece selection methods to include rarity as a factor.
++ This is not strictly "rarest-first", as we do not make a
++ comprehensive effort to find the "rarest" piece or rank pieces by
++ rarity. Rather, we use a more efficient compromise and try to find
++ the set of pieces that have "trade value" (another peer needs
++ them) and make a random choice from that set. Here is the current
++ preference order used in each mode:
++ Trade Value is defined as:
++ 1. Piece that only this peer has (not considering other
++ seeders), that a peer in which we're interested needs.
++ 2. Piece that not every peer in which we're interested has.
++ 3. Piece that only this peer has (not considering other
++ seeders).
++ 4. Piece that not every peer has.
++ Normal Mode
++ 1. Piece we tried to get from another peer but stopped due to
++ choking or lost connection. (We have part of the piece
++ already.)
++ 2. Piece most recently acquired by the peer (possibly/probably
++ rare).
++ 3. Piece with trade value.
++ 4. Any piece not yet requested.
++ Initial-piece Mode
++ 1. Piece with trade value which is already in progress.
++ 2. Piece with trade value that more than one peer has.
++ 3. Piece with trade value.
++ 4. Any piece not yet requested.
++ Endgame Mode
++ 1. Piece with trade value which is already in progress, of which
++ we have the least amount.
++ 2. Piece already in progress of which we have the least amount.
++ * Advanced request queueing system.
++ + Instead of requesting all of the slices for a piece at one
++ time, we now measure latency to the peer and send requests
++ based on how long it takes the data to arrive. This avoids
++ wasting upload banwidth by having too many outstanding
++ requests: If we get choked or lose the connection, the extra
++ requests were wasted; in initial or endgame modes, more
++ requests would have to be cancelled when we completed the
++ piece.
++ + A new piece will be queued for download when there is space
++ in the queue and we've requested the slices that have been
++ queued already. We also don't wait for the current piece to
++ complete before sending requests for a new piece. This helps
++ to maintain a continuous flow of data in the download
++ pipeline.
++ + When duplicating a request in initial or endgame mode, slices
++ that have already been requested are queued last.
++ * Don't send HAVE messages to seeders (to save UL bandwidth).
++ + Since we maintain interested state, and know the peer is a
++ seeder, we'll do the right thing when we become a seeder.
++ + Not sending HAVE to all peers (leechers) that already have
++ the piece is a bad idea IMO. If everyone takes the same
++ attitude, none of us will know when another becomes a seeder
++ and connections will remain open/occupied.
++ + We do send a HAVE to seeders upon completing our first piece
++ so that we don't continue to appear empty.
++ * Endgame strategy is used in get1file mode to complete the file.
++ * Queue management:
++ + Don't accept requests from choked peers.
++ + Discard peer's reponse_q when we choke them.
++ + Don't send cancels when we get choked (according to spec &
++ discussions).
++ + Don't put full piece queues in pending.
++ + Move closing peer's request queue to pending instead of
++ discarding it.
++ * Prefer uploading to or downloading from a peer after we skip them
++ due to bandwidth limiting. This is done via the g_next_up and
++ g_defer_up global variables in peer.cpp (for UL; s/up/dn for the
++ DL versions). The peerlist Sort() function and peer "click"
++ variables have been removed since they are not needed with this
++ feature.
++
++ Options & Features
++ * The -c option now reports file completion status.
++ + As a side effect the metainfo details are printed twice. This
++ allows you to view the torrent contents while pieces are
++ being verified.
++ + Total percentage completion is also added to the output.
++ * "-E" option to seed to a specified UL:DL ratio. Seeding will stop
++ when this ratio or the timeout (-e) is reached. If CTorrent starts
++ as a seeder, the ratio is interpreted as UL:[torrent size].
++ * If "-e 0" is specified (explicitly) and -E is used, there will be
++ no timeout; seeding will continue until the ratio is reached.
++ * The "-m" option previously didn't do anything, and it isn't clear
++ what it was originally going to do. Now the default value is 1,
++ and CTorrent will try to maintain at least this many peers by
++ contacting the tracker early if the peer count falls below this
++ value. This feature was present in release dnh1 but the value was
++ not changeable.
++ Actually it seems likely that this was to be number of peers that
++ the client would try to obtain (by initiating connections), as the
++ "official" client does; this is mentioned as a note in the online
++ specification. I don't really see the value in that though. That
++ said, the option as implemented here should rarely be used. It
++ might be useful only with torrents that have significantly more
++ than max_peers total peers and use a long tracker update interval
++ (such that you tend to drop a lot of peers betwen updates).
++ * "-z" option to set the slice size (the unit of a request, i.e. the
++ discrete amount of data that will be requested from a peer at one
++ time). The slice size now defaults to 16K regardless of the piece
++ length. Request queue size is computed and set based on the slice
++ size, as it now affects only system resources (though not a lot)
++ and not the way that requests are sent.
++ * Add support for "key" and "trackerid" tracker interaction
++ parameters.
++ * Support/display tracker warning message
++ * Now able to handle torrents with more than 255 files.
++ * Support for [1]CTorrent Control Server, an application and
++ protocol for monitoring and managing multiple Enhanced CTorrent
++ clients. The "-S" option is used to connect to CTCS, as in "-S
++ localhost:2780" if CTCS is listening at port 2780 on the local
++ system. Appending a colon ("-S localhost:2780:") will prompt for a
++ password to authenticate with CTCS.
++
++ Peer Handling
++ * Count immediate choke-unchoke (either order) as an error (two
++ errors actually, since it's so wasteful).
++ It may be that some clients do this to stimulate the peer when
++ they think it hasn't responded to their last unchoke (due to high
++ latency). It would be better for them to just repeat the unchoke
++ rather than choke-unchoke, as by choking they will cause the peer
++ to send the requests again.
++ * Detect unresponsive peer connections and try to fix them or
++ disconnect them. Basically, if a peer doesn't respond to our
++ request in a reasonable time then we first assume that our request
++ was lost in transmission; if it happens again then we assume the
++ connection is unreliable.
++ * Handle peers that suppress HAVE messages so we don't always think
++ that they're empty (and thus give them preferential treatment for
++ uploading). If we've sent the peer an amount of data equivalent to
++ two pieces, assume that they now have at least one complete piece.
++ _________________________________________________________________
++
++ Changes for "dnh1.2" Release
++
++ These are just corrections to the previous release that I felt were
++ necessary. Much more improvement is coming in the dnh2 release.
++
++ Bug/code fixes
++ * Bitfield::Invert patch [1357832 on sourceforge] described below.
++ * Fixed "piece length too long" check to reflect the actual queue
++ length used.
++ * Accept 128K slice size for peer requests.
++ * "Return" keyword in Random_init() removed due to potential compile
++ error.
++ * Modified longer-wait test in the optimistic unchoke routine to
++ consider whether the peer is currently choked.
++ _________________________________________________________________
++
++ Bitfield::Invert bug
++
++ There is a bug in the Bitfield::Invert() function that affects the
++ ctorrent-1.3.4 base code as well as releases dnh1 and dnh1.1. This can
++ cause the application to fail (segmentation fault) or may affect
++ downloading of all pieces of the torrent. A patch is available in the
++ Download secion.
++ _________________________________________________________________
++
++ Changes for "dnh1.1" Release
++
++ These are just corrections to the previous release that I felt were
++ necessary. Much more improvement is coming in the next release.
++
++ Bug/code fixes
++ * Peer count would increase on each tracker update if there were no
++ seeders.
++ * RequestQueue::CopyShuffle() changed to use a pointer argument.
++ * Fixed some incorrectness in PendingQueue::Delete() and
++ PendingQueue::DeleteSlice() which could cause a memory leak.
++ * Fixed random-chance inversion bug in PeerList::UnChokeCheck()
++ affecting choice for optimistic unchoking.
++
++ Improvements
++ * Move StopDLTimer() call from RequestPiece() to RequestCheck(),
++ which could occasionally affect peer download rate measurement.
++ * Most clients do not like a slice size of 128K even though it is
++ the max allowed by the BT specification. Changed max slice size to
++ 64K. Note that the maximum piece length is 2MB (2097152); if you
++ need to download a torrent with a larger piece size you can change
++ the value of cfg_req_queue_length in btconfig.h from 64 to 128.
++ * Contact tracker immediately upon becoming (or starting as) a
++ seeder.
++ * Changed SendModule() to send only one slice at a time. This will
++ help with fairly distributing upload bandwidth among the unchoked
++ peers.
++ * Changed default peer ID prefix to '-CD0101-', indicating
++ CTorrent-dnh1.1 release.
++ _________________________________________________________________
++
++ Changes for "dnh1" Release
++
++ This is the first release. "dnh" identifies this patchset, and "1"
++ indicates release version 1 of the patchset.
++
++ Patches
++ * Incorporates the following patches. The number is the Request ID
++ from the [2]SourceForge patches page, which you can reference for
++ the details of each patch. The name in brackets is the name of the
++ patch file or a name I chose to refer to the patch. Some of these
++ names are used below (in brackets) to describe a fix or change to
++ a particular patch.
++ 1042808 [getcwd] (incorporated in get1file patch)
++ 1084776 [passkey] (incorporated in udlimit patch)
++ 1109266 [align]
++ 1109287 [tracker/tracker2]
++ 1114197 [fmt] (incorporated in get1file patch)
++ 1114364 [resetdl]
++ 1116448 [get1file]
++ 1118597 [crash]
++ 1119467 [stall]
++ 1119492 [rate]
++ 1119497 [flush]
++ 1119519 [opt]
++ 1119689 [status]
++ 1124342 [udlimit]
++
++ Download performance
++ * If a peer socket is ready for reading and writing, perform both.
++ Previously the cases were exclusive, with preference given to
++ reading.
++ * Download requests are now made to peers when they are ready for
++ writing (in addition to the existing event-driven cases). This
++ fixes peer stalls when a request couldn't be sent in an
++ event-triggered case due to bandwidth limiting or other
++ circumstances.
++ * Additional tests added so that the above request checking doesn't
++ create hard loops.
++
++ Bandwidth measurement/management
++ * [rate] Bandwidth reporting is now not capped. Also, only the time
++ used for the samples taken is used in the calculation rather than
++ the maximum interval (this affects rate calculation for individual
++ peers).
++ * Additional upload and download bandwidth limit checks added so
++ that bw management is more accurate.
++ * Corrected condition inversion bug in Rate::StopTimer(), which
++ affects peer rate calculations.
++
++ Peer count
++ * Request our max number of peers from the tracker each time rather
++ than just taking the tracker's default, so we can try to fill up.
++ * The tracker will be contacted early if all peers disconnect so
++ that we can actively try to establish some more peer connections.
++ To avoid hammering the tracker, we must have at least one peer for
++ 15 seconds in order for this to be invoked.
++ * Some clients use nonzero bytes in the "reserved" part of the
++ handshake. Added code to ignore the reserved bytes if the rest of
++ the handshake is as expected. This includes Azureus 2300 thru 2304
++ (latest) which gives 0x80 as the first reserved byte and BitComet
++ which gives 0x6578 ("ex") as the first two bytes.
++ * Update peer's timestamp on any message, not just keepalives. Any
++ receipt of data from a peer now resets its timeout, preventing
++ early disconnect.
++
++ Parallel requests
++ * Initial-piece and endgame cases have been improved so that pieces
++ will be requested from multiple peers. Cancels are sent as slices
++ (subpieces) are received. This endgame strategy is described in
++ the BitTorrent online spec. The startup strategy is also described
++ in posts and facilitates obtaining a single piece more rapidly in
++ order to obtain some trade value. In initial mode, the piece of
++ which we need the least parts is targeted. In endgame mode, the
++ piece of which we need the most parts is targeted. Slices that are
++ cancelled are also removed from the "pending" queue, as are pieces
++ that are completed.
++ * When duplicating a piece request, the slice request order is also
++ shuffled in order to minimize duplication of effort.
++
++ Tracker info
++ * [status] Seems to be missing tracker.cpp diff. Added code to get
++ tracker's total peers, but not all trackers report these fields in
++ the normal response. Also added code to count successful updates
++ from the tracker.
++ * Added tracker connection state to status line (when
++ connecting/connected).
++
++ Tracker contact
++ * When interrupting (ctrl-C), connect to the tracker immediately
++ rather than waiting 15 seconds.
++ * Contact tracker "soon" after transitioning to seeder state.
++
++ Peer interaction
++ * Manage our interested state for each peer dynamically as content
++ changes.
++ * Unchoking
++ + Use the peer's interested state (confirming via the bitfield
++ that it needs our data) to consider unchoking. Using only the
++ bitfield could cause us to waste an upload slot on a peer
++ that doesn't have all content but isn't interested (like a
++ single-file downloader).
++ + Choke peers that become uninterested or don't need our data.
++ + Try unchoking new peers only as slots open or the optimistic
++ unchoke rotates. Unchoking too many peers can temporarily
++ reduce per-peer upload rates, which would make uploading to
++ us unappealing for good peers.
++ + In a tie for download speed, prefer to unchoke the peer to
++ whom we've uploaded the least data relative to what we've
++ downloaded from him.
++ * Optimistic unchoking
++ + Fixed condition inversion bug causing opt unchoking to occur
++ too often.
++ + A peer who has no pieces is now preferred 75% vs. a peer who
++ already has at least one piece, in order to help the new peer
++ become productive. This is documented in the online spec.
++ + Set peer's last-unchoke-time when choking the peer to get
++ better rotation of the optimistic unchoke. The value is now
++ the last time that a peer was in the unchoked state rather
++ than the time of the last unchoke event.
++
++ Miscellaneous items
++ * [tracker] Fixed normal program end (stop) process, which was
++ crashing.
++ * [get1file] Restore compact tracker response support.
++ * [get1file] Made display of the status line info dependent on
++ whether the option is in use.
++ * [get1file] Apply the filter when checking for what we need from a
++ peer instead of when recording what the peer has; this prevents
++ stalls when we move on to the next file. Update interested state
++ for each peer when we begin a new file. Also move the file-done
++ check into the piece completion code and check whether the next
++ file(s) has also been completed.
++ * Reduced the slice size from 32K to 16K (same as BT & Azureus).
++ This provides more precise DL rate measurement, and helps insure
++ that we receive a productive amount of data (i.e. a complete
++ slice) even if we are unchoked by a peer for only one cycle. See
++ [3]http://groups.yahoo.com/group/BitTorrent/message/1260 for more
++ discussion/analysis on this.
++ * Added -v (verbose) option for additional debugging output.
++
++References
++
++ 1. http://www.rahul.net/dholmes/ctorrent/ctcs.html
++ 2. http://sourceforge.net/tracker/?atid=598034&group_id=91688&func=browse
++ 3. http://groups.yahoo.com/group/BitTorrent/message/1260
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/config.h.in ctorrent-1.3.4/config.h.in
+--- ctorrent-1.3.4.sav/config.h.in 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/config.h.in 2006-06-28 19:30:02.000000000 +0200
+@@ -10,6 +10,9 @@
+ /* Define to 1 if you have the <fcntl.h> header file. */
+ #undef HAVE_FCNTL_H
+
++/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
++#undef HAVE_FSEEKO
++
+ /* Define to 1 if you have the `ftruncate' function. */
+ #undef HAVE_FTRUNCATE
+
+@@ -31,6 +34,9 @@
+ /* Define to 1 if you have the `crypt' library (-lcrypt). */
+ #undef HAVE_LIBCRYPT
+
++/* Define to 1 if you have the `crypto' library (-lcrypto). */
++#undef HAVE_LIBCRYPTO
++
+ /* Define to 1 if you have the `md' library (-lmd). */
+ #undef HAVE_LIBMD
+
+@@ -107,6 +113,9 @@
+ /* Define to 1 if you have the `strtol' function. */
+ #undef HAVE_STRTOL
+
++/* Define to 1 if you have the `strtoll' function. */
++#undef HAVE_STRTOLL
++
+ /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+ */
+ #undef HAVE_SYS_DIR_H
+@@ -164,15 +173,29 @@
+ /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+ #undef TIME_WITH_SYS_TIME
+
++/* Define to 1 to use the Steve Reid's public-domain SHA-1 code. */
++#undef USE_STANDALONE_SHA1
++
+ /* Version number of package */
+ #undef VERSION
+
++/* Number of bits in a file offset, on hosts where this is settable. */
++#undef _FILE_OFFSET_BITS
++
++/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
++#undef _LARGEFILE_SOURCE
++
++/* Define for large files, on AIX-style hosts. */
++#undef _LARGE_FILES
++
+ /* Define to empty if `const' does not conform to ANSI C. */
+ #undef const
+
+-/* Define as `__inline' if that's what the C compiler calls it, or to nothing
+- if it is not supported. */
++/* Define to `__inline__' or `__inline' if that's what the C compiler
++ calls it, or to nothing if 'inline' is not supported under any name. */
++#ifndef __cplusplus
+ #undef inline
++#endif
+
+ /* Define to `unsigned' if <sys/types.h> does not define. */
+ #undef size_t
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/configure ctorrent-1.3.4/configure
+--- ctorrent-1.3.4.sav/configure 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/configure 2006-06-28 19:30:02.000000000 +0200
+@@ -1,11 +1,10 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.57 for CTorrent devel.
++# Generated by GNU Autoconf 2.59 for CTorrent dnh2.
+ #
+-# Report bugs to <bsdi@sina.com>.
++# Report bugs to <dholmes@ct.boxmail.com>.
+ #
+-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+-# Free Software Foundation, Inc.
++# Copyright (C) 2003 Free Software Foundation, Inc.
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## --------------------- ##
+@@ -22,9 +21,10 @@
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+ fi
++DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Support unset when possible.
+-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+ else
+ as_unset=false
+@@ -43,7 +43,7 @@
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+ do
+- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
++ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+@@ -220,16 +220,17 @@
+ if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+ else
++ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+ fi
+
+ as_executable_p="test -f"
+
+ # Sed expression to map a string onto a valid CPP name.
+-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+ # Sed expression to map a string onto a valid variable name.
+-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+ # IFS
+@@ -268,9 +269,9 @@
+ # Identity of this package.
+ PACKAGE_NAME='CTorrent'
+ PACKAGE_TARNAME='ctorrent'
+-PACKAGE_VERSION='devel'
+-PACKAGE_STRING='CTorrent devel'
+-PACKAGE_BUGREPORT='bsdi@sina.com'
++PACKAGE_VERSION='dnh2'
++PACKAGE_STRING='CTorrent dnh2'
++PACKAGE_BUGREPORT='dholmes@ct.boxmail.com'
+
+ ac_unique_file="ctorrent.cpp"
+ # Factoring default headers for most tests.
+@@ -310,7 +311,7 @@
+ # include <unistd.h>
+ #endif"
+
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOBJS LTLIBOBJS'
+ ac_subst_files=''
+
+ # Initialize some variables set by options.
+@@ -669,7 +670,7 @@
+
+ # Be sure to have absolute paths.
+ for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+- localstatedir libdir includedir oldincludedir infodir mandir
++ localstatedir libdir includedir oldincludedir infodir mandir
+ do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+@@ -709,10 +710,10 @@
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+ $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$0" : 'X\(//\)[^/]' \| \
+- X"$0" : 'X\(//\)$' \| \
+- X"$0" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$0" : 'X\(//\)[^/]' \| \
++ X"$0" : 'X\(//\)$' \| \
++ X"$0" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -787,7 +788,7 @@
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+-\`configure' configures CTorrent devel to adapt to many kinds of systems.
++\`configure' configures CTorrent dnh2 to adapt to many kinds of systems.
+
+ Usage: $0 [OPTION]... [VAR=VALUE]...
+
+@@ -812,9 +813,9 @@
+ cat <<_ACEOF
+ Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+- [$ac_default_prefix]
++ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+- [PREFIX]
++ [PREFIX]
+
+ By default, \`make install' will install all the files in
+ \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+@@ -849,15 +850,16 @@
+
+ if test -n "$ac_init_help"; then
+ case $ac_init_help in
+- short | recursive ) echo "Configuration of CTorrent devel:";;
++ short | recursive ) echo "Configuration of CTorrent dnh2:";;
+ esac
+ cat <<\_ACEOF
+
+ Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+- --disable-dependency-tracking Speeds up one-time builds
+- --enable-dependency-tracking Do not reject slow dependency extractors
++ --disable-dependency-tracking speeds up one-time build
++ --enable-dependency-tracking do not reject slow dependency extractors
++ --disable-largefile omit support for large files
+
+ Some influential environment variables:
+ CXX C++ compiler command
+@@ -873,7 +875,7 @@
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+
+-Report bugs to <bsdi@sina.com>.
++Report bugs to <dholmes@ct.boxmail.com>.
+ _ACEOF
+ fi
+
+@@ -907,12 +909,45 @@
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+-# absolute.
+-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
++
++# Do not use `cd foo && pwd` to compute absolute paths, because
++# the directories may not exist.
++case `pwd` in
++.) ac_abs_builddir="$ac_dir";;
++*)
++ case "$ac_dir" in
++ .) ac_abs_builddir=`pwd`;;
++ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
++ *) ac_abs_builddir=`pwd`/"$ac_dir";;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_builddir=${ac_top_builddir}.;;
++*)
++ case ${ac_top_builddir}. in
++ .) ac_abs_top_builddir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
++ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_srcdir=$ac_srcdir;;
++*)
++ case $ac_srcdir in
++ .) ac_abs_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
++ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_srcdir=$ac_top_srcdir;;
++*)
++ case $ac_top_srcdir in
++ .) ac_abs_top_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
++ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
++ esac;;
++esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+@@ -923,7 +958,7 @@
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+- test -f $ac_srcdir/configure.in; then
++ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+@@ -936,11 +971,10 @@
+ test -n "$ac_init_help" && exit 0
+ if $ac_init_version; then
+ cat <<\_ACEOF
+-CTorrent configure devel
+-generated by GNU Autoconf 2.57
++CTorrent configure dnh2
++generated by GNU Autoconf 2.59
+
+-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
+-Free Software Foundation, Inc.
++Copyright (C) 2003 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+@@ -951,8 +985,8 @@
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+
+-It was created by CTorrent $as_me devel, which was
+-generated by GNU Autoconf 2.57. Invocation command line was
++It was created by CTorrent $as_me dnh2, which was
++generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+@@ -1029,19 +1063,19 @@
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+- ac_must_keep_next=false # Got value, back to normal.
++ ac_must_keep_next=false # Got value, back to normal.
+ else
+- case $ac_arg in
+- *=* | --config-cache | -C | -disable-* | --disable-* \
+- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+- | -with-* | --with-* | -without-* | --without-* | --x)
+- case "$ac_configure_args0 " in
+- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+- esac
+- ;;
+- -* ) ac_must_keep_next=true ;;
+- esac
++ case $ac_arg in
++ *=* | --config-cache | -C | -disable-* | --disable-* \
++ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
++ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
++ | -with-* | --with-* | -without-* | --without-* | --x)
++ case "$ac_configure_args0 " in
++ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
++ esac
++ ;;
++ -* ) ac_must_keep_next=true ;;
++ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+@@ -1075,12 +1109,12 @@
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
++ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+ }
+@@ -1109,7 +1143,7 @@
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+- echo "$ac_var='"'"'$ac_val'"'"'"
++ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+@@ -1128,7 +1162,7 @@
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+- rm -f core core.* *.core &&
++ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+@@ -1208,7 +1242,7 @@
+ # value.
+ ac_cache_corrupted=false
+ for ac_var in `(set) 2>&1 |
+- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
++ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+@@ -1225,13 +1259,13 @@
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
++ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+ echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
++ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+ echo "$as_me: former value: $ac_old_val" >&2;}
+- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
++ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+ echo "$as_me: current value: $ac_new_val" >&2;}
+- ac_cache_corrupted=:
++ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+@@ -1287,7 +1321,7 @@
+
+
+
+-am__api_version="1.7"
++am__api_version="1.9"
+ ac_aux_dir=
+ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+@@ -1324,6 +1358,7 @@
+ # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+ echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+@@ -1340,6 +1375,7 @@
+ case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
++ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+@@ -1347,20 +1383,20 @@
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+- if test $ac_prog = install &&
+- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+- # AIX install. It has an incompatible calling convention.
+- :
+- elif test $ac_prog = install &&
+- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+- # program-specific install script used by HP pwplus--don't use.
+- :
+- else
+- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+- break 3
+- fi
+- fi
++ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
++ if test $ac_prog = install &&
++ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ :
++ elif test $ac_prog = install &&
++ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++ # program-specific install script used by HP pwplus--don't use.
++ :
++ else
++ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
++ break 3
++ fi
++ fi
+ done
+ done
+ ;;
+@@ -1448,7 +1484,6 @@
+ program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+ rm conftest.sed
+
+-
+ # expand $ac_aux_dir to an absolute path
+ am_aux_dir=`cd $ac_aux_dir && pwd`
+
+@@ -1462,6 +1497,39 @@
+ echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ fi
+
++if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
++ # We used to keeping the `.' as first argument, in order to
++ # allow $(mkdir_p) to be used without argument. As in
++ # $(mkdir_p) $(somedir)
++ # where $(somedir) is conditionally defined. However this is wrong
++ # for two reasons:
++ # 1. if the package is installed by a user who cannot write `.'
++ # make install will fail,
++ # 2. the above comment should most certainly read
++ # $(mkdir_p) $(DESTDIR)$(somedir)
++ # so it does not work when $(somedir) is undefined and
++ # $(DESTDIR) is not.
++ # To support the latter case, we have to write
++ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
++ # so the `.' trick is pointless.
++ mkdir_p='mkdir -p --'
++else
++ # On NextStep and OpenStep, the `mkdir' command does not
++ # recognize any option. It will interpret all options as
++ # directories to create, and then abort because `.' already
++ # exists.
++ for d in ./-p ./--version;
++ do
++ test -d $d && rmdir $d
++ done
++ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
++ if test -f "$ac_aux_dir/mkinstalldirs"; then
++ mkdir_p='$(mkinstalldirs)'
++ else
++ mkdir_p='$(install_sh) -d'
++ fi
++fi
++
+ for ac_prog in gawk mawk nawk awk
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+@@ -1504,7 +1572,7 @@
+
+ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+ echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
++set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+ if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1540,7 +1608,7 @@
+ fi
+ rmdir .tst 2>/dev/null
+
+- # test to see if srcdir already configured
++# test to see if srcdir already configured
+ if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+@@ -1560,7 +1628,7 @@
+
+ # Define the identity of the package.
+ PACKAGE=ctorrent
+- VERSION=devel
++ VERSION=dnh2
+
+
+ cat >>confdefs.h <<_ACEOF
+@@ -1588,9 +1656,6 @@
+
+ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
- signal(SIGPIPE,SIG_IGN);
+-
+-AMTAR=${AMTAR-"${am_missing_run}tar"}
+-
+ install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+ # Installed binaries are usually stripped using `strip' when the user
+@@ -1683,6 +1748,13 @@
+
+ # We need awk for the "check" target. The system "awk" is bad on
+ # some platforms.
++# Always define AMTAR for backward compatibility.
++
++AMTAR=${AMTAR-"${am_missing_run}tar"}
++
++am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
++
++
+
+
+
+@@ -1806,7 +1878,6 @@
+ (exit $ac_status); }
+
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -1826,8 +1897,8 @@
+ # Try to create an executable without -o first, disregard a.out.
+ # It will help us diagnose broken compilers, and finding out an intuition
+ # of exeext.
+-echo "$as_me:$LINENO: checking for C++ compiler default output" >&5
+-echo $ECHO_N "checking for C++ compiler default output... $ECHO_C" >&6
++echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
++echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+ if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+@@ -1847,23 +1918,23 @@
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+- ;;
++ ;;
+ conftest.$ac_ext )
+- # This is the source file.
+- ;;
++ # This is the source file.
++ ;;
+ [ab].out )
+- # We found the default executable, but exeext='' is most
+- # certainly right.
+- break;;
++ # We found the default executable, but exeext='' is most
++ # certainly right.
++ break;;
+ *.* )
+- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+- # FIXME: I believe we export ac_cv_exeext for Libtool,
+- # but it would be cool to find out if it's true. Does anybody
+- # maintain Libtool? --akim.
+- export ac_cv_exeext
+- break;;
++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++ # FIXME: I believe we export ac_cv_exeext for Libtool,
++ # but it would be cool to find out if it's true. Does anybody
++ # maintain Libtool? --akim.
++ export ac_cv_exeext
++ break;;
+ * )
+- break;;
++ break;;
+ esac
+ done
+ else
+@@ -1937,8 +2008,8 @@
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+- export ac_cv_exeext
+- break;;
++ export ac_cv_exeext
++ break;;
+ * ) break;;
+ esac
+ done
+@@ -1963,7 +2034,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2014,7 +2084,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2034,11 +2103,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_cxx_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2051,7 +2130,7 @@
+
+ ac_compiler_gnu=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+ fi
+@@ -2067,7 +2146,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2084,11 +2162,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_cxx_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2101,7 +2189,7 @@
+
+ ac_cv_prog_cxx_g=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+@@ -2121,8 +2209,7 @@
+ fi
+ fi
+ for ac_declaration in \
+- ''\
+- '#include <stdlib.h>' \
++ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+@@ -2130,14 +2217,13 @@
+ 'void exit (int);'
+ do
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-#include <stdlib.h>
+ $ac_declaration
++#include <stdlib.h>
+ int
+ main ()
+ {
+@@ -2148,11 +2234,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_cxx_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2165,9 +2261,8 @@
+
+ continue
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2184,11 +2279,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_cxx_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2200,7 +2305,7 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+@@ -2321,7 +2426,9 @@
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+- : > sub/conftst$i.h
++ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++ # Solaris 8's {/usr,}/bin/sh.
++ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+@@ -2349,9 +2456,14 @@
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+- # (even with -Werror). So we grep stderr for any message
+- # that says an option was ignored.
+- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
++ # or remarks (even with -Werror). So we grep stderr for any message
++ # that says an option was ignored or not supported.
++ # When given -MP, icc 7.0 and 7.1 complain thusly:
++ # icc: Command line warning: ignoring option '-M'; no argument required
++ # The diagnosis changed in icc 8.0:
++ # icc: Command line remark: option '-MP' not supported
++ if (grep 'ignoring option' conftest.err ||
++ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+@@ -2723,7 +2835,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2743,11 +2854,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2760,7 +2881,7 @@
+
+ ac_compiler_gnu=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+ fi
+@@ -2776,7 +2897,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2793,11 +2913,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2810,7 +2940,7 @@
+
+ ac_cv_prog_cc_g=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+ echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+@@ -2837,7 +2967,6 @@
+ ac_cv_prog_cc_stdc=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2865,6 +2994,16 @@
+ va_end (v);
+ return s;
+ }
++
++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
++ function prototypes and stuff, but not '\xHH' hex character constants.
++ These don't provoke an error unfortunately, instead are silently treated
++ as 'x'. The following induces an error, until -std1 is added to get
++ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
++ array size at least. It's necessary to write '\x00'==0 to get something
++ that's true only with -std1. */
++int osf4_cc_array ['\x00' == 0 ? 1 : -1];
++
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+@@ -2891,11 +3030,21 @@
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2908,7 +3057,7 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext
++rm -f conftest.err conftest.$ac_objext
+ done
+ rm -f conftest.$ac_ext conftest.$ac_objext
+ CC=$ac_save_CC
+@@ -2936,19 +3085,28 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+- ''\
+- '#include <stdlib.h>' \
++ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+@@ -2956,14 +3114,13 @@
+ 'void exit (int);'
+ do
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-#include <stdlib.h>
+ $ac_declaration
++#include <stdlib.h>
+ int
+ main ()
+ {
+@@ -2974,11 +3131,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -2991,9 +3158,8 @@
+
+ continue
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3010,11 +3176,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3026,7 +3202,7 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ rm -f conftest*
+ if test -n "$ac_declaration"; then
+@@ -3040,7 +3216,7 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+@@ -3088,7 +3264,9 @@
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+- : > sub/conftst$i.h
++ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++ # Solaris 8's {/usr,}/bin/sh.
++ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+@@ -3116,9 +3294,14 @@
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+- # (even with -Werror). So we grep stderr for any message
+- # that says an option was ignored.
+- if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
++ # or remarks (even with -Werror). So we grep stderr for any message
++ # that says an option was ignored or not supported.
++ # When given -MP, icc 7.0 and 7.1 complain thusly:
++ # icc: Command line warning: ignoring option '-M'; no argument required
++ # The diagnosis changed in icc 8.0:
++ # icc: Command line remark: option '-MP' not supported
++ if (grep 'ignoring option' conftest.err ||
++ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+@@ -3161,7 +3344,6 @@
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lssl $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3185,11 +3367,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3202,7 +3394,8 @@
+
+ ac_cv_lib_ssl_SHA1_Init=no
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SHA1_Init" >&5
+@@ -3224,7 +3417,6 @@
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lcrypt $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3248,11 +3440,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3265,7 +3467,8 @@
+
+ ac_cv_lib_crypt_SHA1_Init=no
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_crypt_SHA1_Init" >&5
+@@ -3279,6 +3482,79 @@
+
+ else
+
++echo "$as_me:$LINENO: checking for SHA1_Init in -lcrypto" >&5
++echo $ECHO_N "checking for SHA1_Init in -lcrypto... $ECHO_C" >&6
++if test "${ac_cv_lib_crypto_SHA1_Init+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lcrypto $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++/* Override any gcc2 internal prototype to avoid an error. */
++#ifdef __cplusplus
++extern "C"
++#endif
++/* We use char because int might match the return type of a gcc2
++ builtin and then its argument prototype would still apply. */
++char SHA1_Init ();
++int
++main ()
++{
++SHA1_Init ();
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ (eval $ac_link) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_lib_crypto_SHA1_Init=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_cv_lib_crypto_SHA1_Init=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_SHA1_Init" >&5
++echo "${ECHO_T}$ac_cv_lib_crypto_SHA1_Init" >&6
++if test $ac_cv_lib_crypto_SHA1_Init = yes; then
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_LIBCRYPTO 1
++_ACEOF
++
++ LIBS="-lcrypto $LIBS"
++
++else
++
+ echo "$as_me:$LINENO: checking for SHA1_Init in -lmd" >&5
+ echo $ECHO_N "checking for SHA1_Init in -lmd... $ECHO_C" >&6
+ if test "${ac_cv_lib_md_SHA1_Init+set}" = set; then
+@@ -3287,7 +3563,6 @@
+ ac_check_lib_save_LIBS=$LIBS
+ LIBS="-lmd $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3311,11 +3586,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3328,7 +3613,8 @@
+
+ ac_cv_lib_md_SHA1_Init=no
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_lib_md_SHA1_Init" >&5
+@@ -3341,9 +3627,13 @@
+ LIBS="-lmd $LIBS"
+
+ else
+- { { echo "$as_me:$LINENO: error: error, Please install OpenSSL first!" >&5
+-echo "$as_me: error: error, Please install OpenSSL first!" >&2;}
+- { (exit 1); exit 1; }; }
++
++cat >>confdefs.h <<\_ACEOF
++#define USE_STANDALONE_SHA1
++_ACEOF
++
++fi
++
+ fi
+
+ fi
+@@ -3366,7 +3656,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3386,11 +3675,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3403,7 +3702,7 @@
+
+ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+@@ -3426,7 +3725,6 @@
+ ac_func_search_save_LIBS=$LIBS
+ ac_cv_search_opendir=no
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3450,11 +3748,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3466,12 +3774,12 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in dir; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3495,11 +3803,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3512,7 +3830,8 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ done
+ fi
+ LIBS=$ac_func_search_save_LIBS
+@@ -3533,7 +3852,6 @@
+ ac_func_search_save_LIBS=$LIBS
+ ac_cv_search_opendir=no
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3557,11 +3875,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3573,12 +3901,12 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ if test "$ac_cv_search_opendir" = no; then
+ for ac_lib in x; do
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3602,11 +3930,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3619,7 +3957,8 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ done
+ fi
+ LIBS=$ac_func_search_save_LIBS
+@@ -3661,7 +4000,6 @@
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3672,7 +4010,7 @@
+ #else
+ # include <assert.h>
+ #endif
+- Syntax error
++ Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+@@ -3684,6 +4022,7 @@
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+@@ -3704,7 +4043,6 @@
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3722,6 +4060,7 @@
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+@@ -3768,7 +4107,6 @@
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3779,7 +4117,7 @@
+ #else
+ # include <assert.h>
+ #endif
+- Syntax error
++ Syntax error
+ _ACEOF
+ if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+@@ -3791,6 +4129,7 @@
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+@@ -3811,7 +4150,6 @@
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3829,6 +4167,7 @@
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+@@ -3889,7 +4228,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3910,11 +4248,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -3927,12 +4275,11 @@
+
+ ac_cv_header_stdc=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3954,7 +4301,6 @@
+ if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3979,7 +4325,6 @@
+ :
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3991,9 +4336,9 @@
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+ #else
+ # define ISLOWER(c) \
+- (('a' <= (c) && (c) <= 'i') \
+- || ('j' <= (c) && (c) <= 'r') \
+- || ('s' <= (c) && (c) <= 'z'))
++ (('a' <= (c) && (c) <= 'i') \
++ || ('j' <= (c) && (c) <= 'r') \
++ || ('s' <= (c) && (c) <= 'z'))
+ # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+ #endif
+
+@@ -4004,7 +4349,7 @@
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+- || toupper (i) != TOUPPER (i))
++ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+ }
+@@ -4029,7 +4374,7 @@
+ ( exit $ac_status )
+ ac_cv_header_stdc=no
+ fi
+-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ fi
+@@ -4054,7 +4399,7 @@
+
+
+ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+- inttypes.h stdint.h unistd.h
++ inttypes.h stdint.h unistd.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+@@ -4063,7 +4408,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4075,11 +4419,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4092,7 +4446,7 @@
+
+ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+@@ -4135,7 +4489,6 @@
+ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+ echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4146,16 +4499,26 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -4163,7 +4526,7 @@
+
+ ac_header_compiler=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+ echo "${ECHO_T}$ac_header_compiler" >&6
+
+@@ -4171,7 +4534,6 @@
+ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+ echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4189,6 +4551,7 @@
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+ else
+ ac_cpp_err=
+ fi
+@@ -4208,33 +4571,32 @@
+ echo "${ECHO_T}$ac_header_preproc" >&6
+
+ # So? What about this header?
+-case $ac_header_compiler:$ac_header_preproc in
+- yes:no )
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+ echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+- (
+- cat <<\_ASBOX
+-## ------------------------------------ ##
+-## Report this to bug-autoconf@gnu.org. ##
+-## ------------------------------------ ##
+-_ASBOX
+- ) |
+- sed "s/^/$as_me: WARNING: /" >&2
++ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++ ac_header_preproc=yes
+ ;;
+- no:yes )
++ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+ echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+-## ------------------------------------ ##
+-## Report this to bug-autoconf@gnu.org. ##
+-## ------------------------------------ ##
++## ------------------------------------- ##
++## Report this to dholmes@ct.boxmail.com ##
++## ------------------------------------- ##
+ _ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+@@ -4245,7 +4607,7 @@
+ if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- eval "$as_ac_Header=$ac_header_preproc"
++ eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+@@ -4268,7 +4630,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4331,11 +4692,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4348,7 +4719,7 @@
+
+ ac_cv_c_const=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+ echo "${ECHO_T}$ac_cv_c_const" >&6
+@@ -4368,7 +4739,6 @@
+ ac_cv_c_inline=no
+ for ac_kw in inline __inline__ __inline; do
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4383,11 +4753,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4399,23 +4779,27 @@
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+ echo "${ECHO_T}$ac_cv_c_inline" >&6
++
++
+ case $ac_cv_c_inline in
+ inline | yes) ;;
+- no)
+-cat >>confdefs.h <<\_ACEOF
+-#define inline
+-_ACEOF
+- ;;
+- *) cat >>confdefs.h <<_ACEOF
+-#define inline $ac_cv_c_inline
++ *)
++ case $ac_cv_c_inline in
++ no) ac_val=;;
++ *) ac_val=$ac_cv_c_inline;;
++ esac
++ cat >>confdefs.h <<_ACEOF
++#ifndef __cplusplus
++#define inline $ac_val
++#endif
+ _ACEOF
+- ;;
++ ;;
+ esac
+
+ echo "$as_me:$LINENO: checking for size_t" >&5
+@@ -4424,7 +4808,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4444,11 +4827,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4461,7 +4854,7 @@
+
+ ac_cv_type_size_t=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+ echo "${ECHO_T}$ac_cv_type_size_t" >&6
+@@ -4481,7 +4874,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4502,11 +4894,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4519,7 +4921,7 @@
+
+ ac_cv_header_time=no
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+ echo "${ECHO_T}$ac_cv_header_time" >&6
+@@ -4541,7 +4943,6 @@
+ else
+ ac_pattern="Autoconf.*'x'"
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4561,7 +4962,6 @@
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4594,13 +4994,12 @@
+ ac_cv_func_memcmp_working=no
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-
++$ac_includes_default
+ int
+ main ()
+ {
+@@ -4619,12 +5018,12 @@
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+- char *a = foo + i;
+- char *b = bar + i;
+- strcpy (a, "--------01111111");
+- strcpy (b, "--------10000000");
+- if (memcmp (a, b, 16) >= 0)
+- exit (1);
++ char *a = foo + i;
++ char *b = bar + i;
++ strcpy (a, "--------01111111");
++ strcpy (b, "--------10000000");
++ if (memcmp (a, b, 16) >= 0)
++ exit (1);
+ }
+ exit (0);
+ }
+@@ -4653,12 +5052,19 @@
+ ( exit $ac_status )
+ ac_cv_func_memcmp_working=no
+ fi
+-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+ echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6
+-test $ac_cv_func_memcmp_working = no && LIBOBJS="$LIBOBJS memcmp.$ac_objext"
++test $ac_cv_func_memcmp_working = no && case $LIBOBJS in
++ "memcmp.$ac_objext" | \
++ *" memcmp.$ac_objext" | \
++ "memcmp.$ac_objext "* | \
++ *" memcmp.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;;
++esac
++
+
+ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+ echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+@@ -4666,7 +5072,6 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4693,11 +5098,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext
+ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest.$ac_objext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4710,7 +5125,7 @@
+
+ ac_cv_type_signal=int
+ fi
+-rm -f conftest.$ac_objext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+ echo "${ECHO_T}$ac_cv_type_signal" >&6
+@@ -4732,7 +5147,6 @@
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4744,8 +5158,8 @@
+ {
+ struct stat sbuf;
+ /* Linux will dereference the symlink and fail.
+- That is better in the sense that it means we will not
+- have to compile and use the lstat wrapper. */
++ That is better in the sense that it means we will not
++ have to compile and use the lstat wrapper. */
+ exit (lstat ("conftest.sym/", &sbuf) ? 0 : 1);
+ ;
+ return 0;
+@@ -4771,7 +5185,7 @@
+ ( exit $ac_status )
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+ fi
+-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ else
+ # If the `ln -s' command failed, then we probably don't even
+@@ -4792,7 +5206,14 @@
+
+
+ if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+- LIBOBJS="$LIBOBJS lstat.$ac_objext"
++ case $LIBOBJS in
++ "lstat.$ac_objext" | \
++ *" lstat.$ac_objext" | \
++ "lstat.$ac_objext "* | \
++ *" lstat.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS lstat.$ac_objext" ;;
++esac
++
+ fi
+
+ echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5
+@@ -4804,7 +5225,6 @@
+ ac_cv_func_stat_empty_string_bug=yes
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -4840,13 +5260,20 @@
+ ( exit $ac_status )
+ ac_cv_func_stat_empty_string_bug=no
+ fi
+-rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+ fi
+ echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5
+ echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6
+ if test $ac_cv_func_stat_empty_string_bug = yes; then
+- LIBOBJS="$LIBOBJS stat.$ac_objext"
++ case $LIBOBJS in
++ "stat.$ac_objext" | \
++ *" stat.$ac_objext" | \
++ "stat.$ac_objext "* | \
++ *" stat.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS stat.$ac_objext" ;;
++esac
++
+
+ cat >>confdefs.h <<_ACEOF
+ #define HAVE_STAT_EMPTY_STRING_BUG 1
+@@ -4871,7 +5298,8 @@
+
+
+
+-for ac_func in ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strnstr
++
++for ac_func in ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strtoll strnstr
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ echo "$as_me:$LINENO: checking for $ac_func" >&5
+@@ -4880,21 +5308,28 @@
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+-#line $LINENO "configure"
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++ For example, HP-UX 11i <limits.h> declares gettimeofday. */
++#define $ac_func innocuous_$ac_func
++
+ /* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
++
+ #ifdef __STDC__
+ # include <limits.h>
+ #else
+ # include <assert.h>
+ #endif
++
++#undef $ac_func
++
+ /* Override any gcc2 internal prototype to avoid an error. */
+ #ifdef __cplusplus
+ extern "C"
+@@ -4925,11 +5360,21 @@
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+- { ac_try='test -s conftest$ac_exeext'
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -4942,7 +5387,8 @@
+
+ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
+ fi
+ echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+ echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+@@ -4955,6 +5401,547 @@
+ done
+
+
++# Enable/check large file support
++# Check whether --enable-largefile or --disable-largefile was given.
++if test "${enable_largefile+set}" = set; then
++ enableval="$enable_largefile"
++
++fi;
++if test "$enable_largefile" != no; then
++
++ echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
++echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6
++if test "${ac_cv_sys_largefile_CC+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_cv_sys_largefile_CC=no
++ if test "$GCC" != yes; then
++ ac_save_CC=$CC
++ while :; do
++ # IRIX 6.2 and later do not support large files by default,
++ # so use the C compiler's -n32 option if that helps.
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++ rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext
++ CC="$CC -n32"
++ rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_sys_largefile_CC=' -n32'; break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext
++ break
++ done
++ CC=$ac_save_CC
++ rm -f conftest.$ac_ext
++ fi
++fi
++echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
++echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6
++ if test "$ac_cv_sys_largefile_CC" != no; then
++ CC=$CC$ac_cv_sys_largefile_CC
++ fi
++
++ echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
++echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6
++if test "${ac_cv_sys_file_offset_bits+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ while :; do
++ ac_cv_sys_file_offset_bits=no
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#define _FILE_OFFSET_BITS 64
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_sys_file_offset_bits=64; break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ break
++done
++fi
++echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
++echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6
++if test "$ac_cv_sys_file_offset_bits" != no; then
++
++cat >>confdefs.h <<_ACEOF
++#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
++_ACEOF
++
++fi
++rm -f conftest*
++ echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
++echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6
++if test "${ac_cv_sys_large_files+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ while :; do
++ ac_cv_sys_large_files=no
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#define _LARGE_FILES 1
++#include <sys/types.h>
++ /* Check that off_t can represent 2**63 - 1 correctly.
++ We can't simply define LARGE_OFF_T to be 9223372036854775807,
++ since some C++ compilers masquerading as C compilers
++ incorrectly reject 9223372036854775807. */
++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
++ && LARGE_OFF_T % 2147483647 == 1)
++ ? 1 : -1];
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_sys_large_files=1; break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ break
++done
++fi
++echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
++echo "${ECHO_T}$ac_cv_sys_large_files" >&6
++if test "$ac_cv_sys_large_files" != no; then
++
++cat >>confdefs.h <<_ACEOF
++#define _LARGE_FILES $ac_cv_sys_large_files
++_ACEOF
++
++fi
++rm -f conftest*
++fi
++
++echo "$as_me:$LINENO: checking for _LARGEFILE_SOURCE value needed for large files" >&5
++echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6
++if test "${ac_cv_sys_largefile_source+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ while :; do
++ ac_cv_sys_largefile_source=no
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <stdio.h>
++int
++main ()
++{
++return !fseeko;
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#define _LARGEFILE_SOURCE 1
++#include <stdio.h>
++int
++main ()
++{
++return !fseeko;
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
++ (eval $ac_compile) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest.$ac_objext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_sys_largefile_source=1; break
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++fi
++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++ break
++done
++fi
++echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_source" >&5
++echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6
++if test "$ac_cv_sys_largefile_source" != no; then
++
++cat >>confdefs.h <<_ACEOF
++#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
++_ACEOF
++
++fi
++rm -f conftest*
++
++# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
++# in glibc 2.1.3, but that breaks too many other things.
++# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
++echo "$as_me:$LINENO: checking for fseeko" >&5
++echo $ECHO_N "checking for fseeko... $ECHO_C" >&6
++if test "${ac_cv_func_fseeko+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <stdio.h>
++int
++main ()
++{
++return fseeko && fseeko (stdin, 0, 0);
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
++ (eval $ac_link) 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } &&
++ { ac_try='test -z "$ac_c_werror_flag"
++ || test ! -s conftest.err'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; } &&
++ { ac_try='test -s conftest$ac_exeext'
++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++ (eval $ac_try) 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; }; then
++ ac_cv_func_fseeko=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ac_cv_func_fseeko=no
++fi
++rm -f conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++echo "$as_me:$LINENO: result: $ac_cv_func_fseeko" >&5
++echo "${ECHO_T}$ac_cv_func_fseeko" >&6
++if test $ac_cv_func_fseeko = yes; then
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_FSEEKO 1
++_ACEOF
++
++fi
++
++
+ ac_config_files="$ac_config_files Makefile"
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+@@ -4984,13 +5971,13 @@
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+- "s/'/'\\\\''/g;
+- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
++ "s/'/'\\\\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+ } |
+@@ -5020,13 +6007,13 @@
+ # trailing colons and then remove the whole line if VPATH becomes empty
+ # (actually we leave an empty line to preserve line numbers).
+ if test "x$srcdir" = x.; then
+- ac_vpsub='/^[ ]*VPATH[ ]*=/{
++ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+ s/:*\$(srcdir):*/:/;
+ s/:*\${srcdir}:*/:/;
+ s/:*@srcdir@:*/:/;
+-s/^\([^=]*=[ ]*\):*/\1/;
++s/^\([^=]*=[ ]*\):*/\1/;
+ s/:*$//;
+-s/^[^=]*=[ ]*$//;
++s/^[^=]*=[ ]*$//;
+ }'
+ fi
+
+@@ -5037,7 +6024,7 @@
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
++ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+@@ -5102,9 +6089,10 @@
+ elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+ fi
++DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Support unset when possible.
+-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+ else
+ as_unset=false
+@@ -5123,7 +6111,7 @@
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+ do
+- if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
++ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+@@ -5302,16 +6290,17 @@
+ if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+ else
++ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+ fi
+
+ as_executable_p="test -f"
+
+ # Sed expression to map a string onto a valid CPP name.
+-as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+ # Sed expression to map a string onto a valid variable name.
+-as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+ # IFS
+@@ -5337,8 +6326,8 @@
+ } >&5
+ cat >&5 <<_CSEOF
+
+-This file was extended by CTorrent $as_me devel, which was
+-generated by GNU Autoconf 2.57. Invocation command line was
++This file was extended by CTorrent $as_me dnh2, which was
++generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+@@ -5382,9 +6371,9 @@
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+- instantiate the configuration file FILE
++ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+- instantiate the configuration header FILE
++ instantiate the configuration header FILE
+
+ Configuration files:
+ $config_files
+@@ -5400,12 +6389,11 @@
+
+ cat >>$CONFIG_STATUS <<_ACEOF
+ ac_cs_version="\\
+-CTorrent config.status devel
+-configured by $0, generated by GNU Autoconf 2.57,
++CTorrent config.status dnh2
++configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+-Free Software Foundation, Inc.
++Copyright (C) 2003 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+ srcdir=$srcdir
+@@ -5610,14 +6598,17 @@
+ s,@AUTOMAKE@,$AUTOMAKE,;t t
+ s,@AUTOHEADER@,$AUTOHEADER,;t t
+ s,@MAKEINFO@,$MAKEINFO,;t t
+-s,@AMTAR@,$AMTAR,;t t
+ s,@install_sh@,$install_sh,;t t
+ s,@STRIP@,$STRIP,;t t
+ s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+ s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
++s,@mkdir_p@,$mkdir_p,;t t
+ s,@AWK@,$AWK,;t t
+ s,@SET_MAKE@,$SET_MAKE,;t t
+ s,@am__leading_dot@,$am__leading_dot,;t t
++s,@AMTAR@,$AMTAR,;t t
++s,@am__tar@,$am__tar,;t t
++s,@am__untar@,$am__untar,;t t
+ s,@CXX@,$CXX,;t t
+ s,@CXXFLAGS@,$CXXFLAGS,;t t
+ s,@LDFLAGS@,$LDFLAGS,;t t
+@@ -5673,9 +6664,9 @@
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
++ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
++ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+@@ -5693,21 +6684,21 @@
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+- cat >$tmp/stdin
+- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ cat >$tmp/stdin
++ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$ac_file" : 'X\(//\)[^/]' \| \
+- X"$ac_file" : 'X\(//\)$' \| \
+- X"$ac_file" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$ac_file" : 'X\(//\)[^/]' \| \
++ X"$ac_file" : 'X\(//\)$' \| \
++ X"$ac_file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -5723,10 +6714,10 @@
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -5764,12 +6755,45 @@
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+-# absolute.
+-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
++
++# Do not use `cd foo && pwd` to compute absolute paths, because
++# the directories may not exist.
++case `pwd` in
++.) ac_abs_builddir="$ac_dir";;
++*)
++ case "$ac_dir" in
++ .) ac_abs_builddir=`pwd`;;
++ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
++ *) ac_abs_builddir=`pwd`/"$ac_dir";;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_builddir=${ac_top_builddir}.;;
++*)
++ case ${ac_top_builddir}. in
++ .) ac_abs_top_builddir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
++ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_srcdir=$ac_srcdir;;
++*)
++ case $ac_srcdir in
++ .) ac_abs_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
++ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_srcdir=$ac_top_srcdir;;
++*)
++ case $ac_top_srcdir in
++ .) ac_abs_top_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
++ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
++ esac;;
++esac
+
+
+ case $INSTALL in
+@@ -5791,7 +6815,7 @@
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+- sed 's,.*/,,'` by configure."
++ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+@@ -5800,24 +6824,24 @@
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+- # Absolute (can't be DOS-style, as IFS=:)
+- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++ # Absolute (can't be DOS-style, as IFS=:)
++ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+- echo $f;;
++ echo "$f";;
+ *) # Relative
+- if test -f "$f"; then
+- # Build tree
+- echo $f
+- elif test -f "$srcdir/$f"; then
+- # Source tree
+- echo $srcdir/$f
+- else
+- # /dev/null tree
+- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++ if test -f "$f"; then
++ # Build tree
++ echo "$f"
++ elif test -f "$srcdir/$f"; then
++ # Source tree
++ echo "$srcdir/$f"
++ else
++ # /dev/null tree
++ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+- fi;;
++ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ _ACEOF
+@@ -5859,12 +6883,12 @@
+ # NAME is the cpp macro being defined and VALUE is the value it is being given.
+ #
+ # ac_d sets the value in "#define NAME VALUE" lines.
+-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+-ac_dB='[ ].*$,\1#\2'
++ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
++ac_dB='[ ].*$,\1#\2'
+ ac_dC=' '
+ ac_dD=',;t'
+ # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
++ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ ac_uB='$,\1#\2define\3'
+ ac_uC=' '
+ ac_uD=',;t'
+@@ -5873,11 +6897,11 @@
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+- cat >$tmp/stdin
+- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ cat >$tmp/stdin
++ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
++ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+@@ -5891,28 +6915,29 @@
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+- # Absolute (can't be DOS-style, as IFS=:)
+- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++ # Absolute (can't be DOS-style, as IFS=:)
++ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+- echo $f;;
++ # Do quote $f, to prevent DOS paths from being IFS'd.
++ echo "$f";;
+ *) # Relative
+- if test -f "$f"; then
+- # Build tree
+- echo $f
+- elif test -f "$srcdir/$f"; then
+- # Source tree
+- echo $srcdir/$f
+- else
+- # /dev/null tree
+- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
++ if test -f "$f"; then
++ # Build tree
++ echo "$f"
++ elif test -f "$srcdir/$f"; then
++ # Source tree
++ echo "$srcdir/$f"
++ else
++ # /dev/null tree
++ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+ echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+- fi;;
++ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
++ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+ _ACEOF
+
+@@ -5935,9 +6960,9 @@
+ s,[\\$`],\\&,g
+ t clear
+ : clear
+-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
++s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+ t end
+-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
++s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+ : end
+ _ACEOF
+ # If some macros were called several times there might be several times
+@@ -5951,13 +6976,13 @@
+ # example, in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ cat >>conftest.undefs <<\_ACEOF
+-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
++s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+ _ACEOF
+
+ # Break up conftest.defines because some shells have a limit on the size
+ # of here documents, and old seds have small limits too (100 cmds).
+ echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
++echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+ echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+ echo ' :' >>$CONFIG_STATUS
+ rm -f conftest.tail
+@@ -5966,7 +6991,7 @@
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
++ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+@@ -5993,7 +7018,7 @@
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
++ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+@@ -6027,10 +7052,10 @@
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$ac_file" : 'X\(//\)[^/]' \| \
+- X"$ac_file" : 'X\(//\)$' \| \
+- X"$ac_file" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$ac_file" : 'X\(//\)[^/]' \| \
++ X"$ac_file" : 'X\(//\)$' \| \
++ X"$ac_file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -6046,10 +7071,10 @@
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -6081,10 +7106,10 @@
+ done
+ echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+ $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X$ac_file : 'X\(//\)[^/]' \| \
+- X$ac_file : 'X\(//\)$' \| \
+- X$ac_file : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X$ac_file : 'X\(//\)[^/]' \| \
++ X$ac_file : 'X\(//\)$' \| \
++ X$ac_file : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -6103,16 +7128,41 @@
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+ $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$ac_dest" : 'X\(//\)[^/]' \| \
+- X"$ac_dest" : 'X\(//\)$' \| \
+- X"$ac_dest" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$ac_dest" : 'X\(//\)[^/]' \| \
++ X"$ac_dest" : 'X\(//\)$' \| \
++ X"$ac_dest" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
++ { if $as_mkdir_p; then
++ mkdir -p "$ac_dir"
++ else
++ as_dir="$ac_dir"
++ as_dirs=
++ while test ! -d "$as_dir"; do
++ as_dirs="$as_dir $as_dirs"
++ as_dir=`(dirname "$as_dir") 2>/dev/null ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
++echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
++ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
++ /^X\(\/\/\)$/{ s//\1/; q; }
++ /^X\(\/\).*/{ s//\1/; q; }
++ s/.*/./; q'`
++ done
++ test ! -n "$as_dirs" || mkdir $as_dirs
++ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
++echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
++ { (exit 1); exit 1; }; }; }
++
+ ac_builddir=.
+
+ if test "$ac_dir" != .; then
+@@ -6138,12 +7188,45 @@
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+ esac
+-# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+-# absolute.
+-ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+-ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+-ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+-ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
++
++# Do not use `cd foo && pwd` to compute absolute paths, because
++# the directories may not exist.
++case `pwd` in
++.) ac_abs_builddir="$ac_dir";;
++*)
++ case "$ac_dir" in
++ .) ac_abs_builddir=`pwd`;;
++ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
++ *) ac_abs_builddir=`pwd`/"$ac_dir";;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_builddir=${ac_top_builddir}.;;
++*)
++ case ${ac_top_builddir}. in
++ .) ac_abs_top_builddir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
++ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_srcdir=$ac_srcdir;;
++*)
++ case $ac_srcdir in
++ .) ac_abs_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
++ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
++ esac;;
++esac
++case $ac_abs_builddir in
++.) ac_abs_top_srcdir=$ac_top_srcdir;;
++*)
++ case $ac_top_srcdir in
++ .) ac_abs_top_srcdir=$ac_abs_builddir;;
++ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
++ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
++ esac;;
++esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+@@ -6161,10 +7244,10 @@
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+ $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$mf" : 'X\(//\)[^/]' \| \
+- X"$mf" : 'X\(//\)$' \| \
+- X"$mf" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$mf" : 'X\(//\)[^/]' \| \
++ X"$mf" : 'X\(//\)$' \| \
++ X"$mf" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -6174,36 +7257,30 @@
+ else
+ continue
+ fi
+- grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+- # Extract the definition of DEP_FILES from the Makefile without
+- # running `make'.
+- DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
++ # Extract the definition of DEPDIR, am__include, and am__quote
++ # from the Makefile without running `make'.
++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
++ am__include=`sed -n 's/^am__include = //p' < "$mf"`
++ test -z "am__include" && continue
++ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+- U=`sed -n -e '/^U = / s///p' < "$mf"`
+- test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+- # We invoke sed twice because it is the simplest approach to
+- # changing $(DEPDIR) to its actual value in the expansion.
+- for file in `sed -n -e '
+- /^DEP_FILES = .*\\\\$/ {
+- s/^DEP_FILES = //
+- :loop
+- s/\\\\$//
+- p
+- n
+- /\\\\$/ b loop
+- p
+- }
+- /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
++ U=`sed -n 's/^U = //p' < "$mf"`
++ # Find all dependency output files, they are included files with
++ # $(DEPDIR) in their names. We invoke sed twice because it is the
++ # simplest approach to changing $(DEPDIR) to its actual value in the
++ # expansion.
++ for file in `sed -n "
++ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`(dirname "$file") 2>/dev/null ||
+ $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$file" : 'X\(//\)[^/]' \| \
+- X"$file" : 'X\(//\)$' \| \
+- X"$file" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$file" : 'X\(//\)[^/]' \| \
++ X"$file" : 'X\(//\)$' \| \
++ X"$file" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+@@ -6219,10 +7296,10 @@
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| \
++ . : '\(.\)' 2>/dev/null ||
+ echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/configure.ac ctorrent-1.3.4/configure.ac
+--- ctorrent-1.3.4.sav/configure.ac 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/configure.ac 2006-06-28 19:30:02.000000000 +0200
+@@ -1,6 +1,6 @@
+ # Process this file with autoconf to produce a configure script.
+-AC_INIT([CTorrent], [devel], [bsdi@sina.com])
+-AM_INIT_AUTOMAKE(ctorrent,devel)
++AC_INIT([CTorrent], [dnh2], [dholmes@ct.boxmail.com])
++AM_INIT_AUTOMAKE(ctorrent,dnh2)
+ AC_CONFIG_HEADER([config.h])
+
+ AC_CONFIG_SRCDIR([ctorrent.cpp])
+@@ -14,7 +14,7 @@
+ [AC_CHECK_LIB([crypt],[SHA1_Init],,
+ [AC_CHECK_LIB([crypto],[SHA1_Init],,
+ [AC_CHECK_LIB([md],[SHA1_Init],,
+- [AC_MSG_ERROR([error, Please install OpenSSL first!])])])])])
++ [AC_DEFINE([USE_STANDALONE_SHA1],,[Define to 1 to use the Steve Reid's public-domain SHA-1 code.])])])])])
+
+ # Checks for header files.
+ AC_HEADER_DIRENT
+@@ -32,6 +32,10 @@
+ AC_FUNC_MEMCMP
+ AC_TYPE_SIGNAL
+ AC_FUNC_STAT
+-AC_CHECK_FUNCS([ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strnstr])
++AC_CHECK_FUNCS([ftruncate gethostbyname gettimeofday getwd inet_ntoa memchr memmove memset mkdir select socket strchr strerror strncasecmp strstr strtol strtoll strnstr])
++
++# Enable/check large file support
++AC_SYS_LARGEFILE
++AC_FUNC_FSEEKO
+
+ AC_OUTPUT(Makefile)
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctcs.cpp ctorrent-1.3.4/ctcs.cpp
+--- ctorrent-1.3.4.sav/ctcs.cpp 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/ctcs.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,540 @@
++#ifndef WINDOWS
++#include <unistd.h>
++#include <sys/time.h>
++#include <time.h>
++#include <netdb.h>
++#endif
++
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++
++#include <ctype.h>
++
++#include "ctcs.h"
++#include "btcontent.h"
++#include "setnonblock.h"
++#include "connect_nonb.h"
++#include "tracker.h"
++#include "peerlist.h"
++#include "peer.h"
++#include "btconfig.h"
++#include "bttime.h"
++
++#define compset(a,member) ( (a.member==member)? 0 : ((a.member = member)||1) )
++
++Ctcs CTCS;
++
++
++Ctcs::Ctcs()
++{
++ memset(m_host,0,MAXHOSTNAMELEN);
++
++ m_sock = INVALID_SOCKET;
++ m_port = 2780;
++ m_status = T_FREE;
++ m_interval = 1;
++
++ m_last_timestamp = m_sent_ctstatus_time = (time_t) 0;
++ m_sent_ctstatus = 0;
++ m_sent_ctbw = 0;
++}
++
++
++Ctcs::~Ctcs()
++{
++ if( m_sock != INVALID_SOCKET) CLOSE_SOCKET(m_sock);
++}
++
++
++void Ctcs::Reset(time_t new_interval)
++{
++ if(new_interval) m_interval = new_interval;
++
++ if( INVALID_SOCKET != m_sock ){
++ CLOSE_SOCKET(m_sock);
++ m_sock = INVALID_SOCKET;
++ }
++
++ in_buffer.Reset();
++ out_buffer.Reset();
++ m_last_timestamp = now;
++ m_sent_ctstatus = 0;
++ m_sent_ctbw = 0;
++ m_status = T_FREE;
++}
++
++
++// borrowed from tracker.cpp (with changes)
++int Ctcs:: _s2sin(char *h,int p,struct sockaddr_in *psin)
++{
++ psin->sin_family = AF_INET;
++ psin->sin_port = htons(p);
++ psin->sin_addr.s_addr = inet_addr(h);
++ if(psin->sin_addr.s_addr == INADDR_NONE){
++ struct hostent *ph = gethostbyname(h);
++ if( !ph || ph->h_addrtype != AF_INET){
++ memset(psin,0,sizeof(struct sockaddr_in));
++ return -1;
++ }
++ memcpy(&psin->sin_addr,ph->h_addr_list[0],sizeof(struct in_addr));
++ }
++ return ( psin->sin_addr.s_addr == INADDR_NONE ) ? -1 : 0;
++}
++
++
++int Ctcs::CheckMessage()
++{
++ ssize_t r;
++ size_t q;
++
++ r = in_buffer.FeedIn(m_sock);
++
++ if( r == 0 ) return 0; // no data
++ if( r < 0 ){ Reset(1); return -1; } // error
++
++ q = in_buffer.Count();
++
++ if( !q ){
++ int error = 0;
++ socklen_t n = sizeof(error);
++ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 ||
++ error != 0 ){
++ fprintf(stderr,"warn, received nothing from CTCS! %s\n",strerror(error));
++ }
++ Reset(0);
++ return -1;
++ }
++
++ char *s, *msgbuf;
++ while(in_buffer.Count() && (s=strchr(msgbuf=in_buffer.BasePointer(), '\n'))){
++// msgbuf = in_buffer.BasePointer();
++// if( s=strchr(msgbuf, '\n') ){ //have a complete message
++ *s = '\0';
++ if(arg_verbose) fprintf(stderr, "CTCS: %s\n", msgbuf);
++ if( !strncmp("SETDLIMIT",msgbuf,9) ){
++ cfg_max_bandwidth_down = (int)(strtod(msgbuf+10, NULL));
++ if(arg_verbose) fprintf(stderr, "DLimit=%d\n", cfg_max_bandwidth_down);
++ }else if( !strncmp("SETULIMIT",msgbuf,9) ){
++ cfg_max_bandwidth_up = (int)(strtod(msgbuf+10, NULL));
++ if(arg_verbose) fprintf(stderr, "ULimit=%d\n", cfg_max_bandwidth_up);
++ }else if( !strncmp("SENDPEERS",msgbuf,9) ){
++ Send_Peers();
++ }else if( !strncmp("SENDSTATUS",msgbuf,10) ){
++ Send_Status();
++ }else if( !strncmp("SENDCONF",msgbuf,8) ){
++ Send_Config();
++ }else if( !strncmp("CTCONFIG",msgbuf,8) ){
++ Set_Config(msgbuf);
++ }else if( !strncmp("SENDDETAIL",msgbuf,10) ){
++ Send_Detail();
++ }else if( !strncmp("CTQUIT",msgbuf,6) ){
++ printf("CTCS sent Quit command\n");
++ Tracker.SetStoped();
++ }else if( !strncmp("CTRESTART",msgbuf,9) ){
++ RestartTracker();
++ }else if( !strncmp("CTUPDATE",msgbuf,8) ){
++ Tracker.Reset(1);
++ }else if( !strncmp("PROTOCOL",msgbuf,8) ){
++ // nothing yet
++ }else{
++ if(arg_verbose) fprintf(stderr, "unknown CTCS message: %s", msgbuf);
++ }
++ in_buffer.PickUp(s-msgbuf + 1);
++ }
++ return 0;
++}
++
++
++int Ctcs::SendMessage(char *message)
++{
++ int len, r=0;
++ char buf[CTCS_BUFSIZE];
++
++ if( m_status == T_READY ){
++ len = strlen(message);
++ strncpy(buf, message, len);
++ if( len+1 < CTCS_BUFSIZE ){
++ buf[len] = '\n';
++ buf[len+1] = '\0';
++ }else{
++ buf[CTCS_BUFSIZE-2] = '\n';
++ buf[CTCS_BUFSIZE-1] = '\0';
++ }
++ r = out_buffer.Put(m_sock, buf, len+1);
++ if( r<0 ) Reset(1);
++ }
++ return r;
++}
++
++
++int Ctcs::Send_Auth()
++{
++ char message[CTCS_BUFSIZE];
++
++ if(!*m_pass) return 0;
++ snprintf(message, CTCS_BUFSIZE, "AUTH %s", m_pass);
++ return SendMessage(message);
++}
++
++
++int Ctcs::Send_Protocol()
++{
++ char message[CTCS_BUFSIZE];
++
++ snprintf(message, CTCS_BUFSIZE, "PROTOCOL %s", CTCS_PROTOCOL);
++ return SendMessage(message);
++}
++
++
++int Ctcs::Send_Torrent(unsigned char *peerid, char *torrent)
++{
++ char message[CTCS_BUFSIZE];
++ char txtid[PEER_ID_LEN*2+3];
++
++ TextPeerID(peerid, txtid);
++
++ snprintf(message, CTCS_BUFSIZE, "CTORRENT %s %ld %ld %s", txtid,
++ (long)(BTCONTENT.GetStartTime()), (long)now, torrent);
++ return SendMessage(message);
++}
++
++
++int Ctcs::Report_Status(size_t seeders, size_t leechers, size_t nhave,
++ size_t ntotal, size_t navail, size_t dlrate, size_t ulrate,
++ u_int64_t dltotal, u_int64_t ultotal, size_t dlimit, size_t ulimit)
++{
++ int changebw=0,change=0;
++ int r;
++ size_t nhad;
++
++ if( T_READY != m_status ) return 0;
++
++ nhad = m_ctstatus.nhave;
++
++ changebw = (
++ compset(m_ctstatus, dlrate) |
++ compset(m_ctstatus, ulrate) |
++ compset(m_ctstatus, dlimit) |
++ compset(m_ctstatus, ulimit) );
++ change = ( changebw |
++ compset(m_ctstatus, seeders) |
++ compset(m_ctstatus, leechers) |
++ compset(m_ctstatus, nhave) |
++ compset(m_ctstatus, ntotal) |
++ compset(m_ctstatus, navail) |
++ compset(m_ctstatus, dltotal) |
++ compset(m_ctstatus, ultotal) );
++
++ if( ( !m_sent_ctstatus || (nhad<nhave && nhave==ntotal) ||
++ (Tracker.GetStatus() && m_sent_ctstatus_time+30 > now) ) &&
++ (r=Send_Status()) != 0 ) return r;
++ else return (changebw || !m_sent_ctbw) ? Send_bw() : 0;
++}
++
++
++int Ctcs::Send_Status()
++{
++ char message[CTCS_BUFSIZE];
++
++ if( m_sent_ctstatus_time + 1 > now ) {
++ m_sent_ctstatus = 0;
++ return 0;
++ }
++ snprintf(message, CTCS_BUFSIZE, "CTSTATUS %u/%u %u/%u/%u %u,%u %llu,%llu %u,%u",
++ m_ctstatus.seeders, m_ctstatus.leechers,
++ m_ctstatus.nhave, m_ctstatus.ntotal, m_ctstatus.navail,
++ m_ctstatus.dlrate, m_ctstatus.ulrate,
++ m_ctstatus.dltotal, m_ctstatus.ultotal,
++ m_ctstatus.dlimit, m_ctstatus.ulimit );
++ m_sent_ctstatus = 1;
++ m_sent_ctstatus_time = now;
++ return SendMessage(message);
++}
++
++
++int Ctcs::Send_bw()
++{
++ char message[CTCS_BUFSIZE];
++
++ snprintf(message, CTCS_BUFSIZE, "CTBW %u,%u %u,%u",
++ m_ctstatus.dlrate, m_ctstatus.ulrate,
++ m_ctstatus.dlimit, m_ctstatus.ulimit );
++ m_sent_ctbw = 1;
++ return SendMessage(message);
++}
++
++
++int Ctcs::Send_Config()
++{
++ char message[CTCS_BUFSIZE];
++
++ snprintf(message, CTCS_BUFSIZE, "CTCONFIG %d %d %f %d %d %d %d %d %d",
++ (int)arg_verbose, (int)cfg_seed_hours, cfg_seed_ratio,
++ (int)cfg_max_peers, (int)cfg_min_peers, (int)arg_file_to_download,
++ (int)cfg_exit_zero_peers, Tracker.IsPaused(), Tracker.IsQuitting());
++ return SendMessage(message);
++}
++
++int Ctcs::Set_Config(char *msgbuf)
++{
++ unsigned char foo;
++
++ if(msgbuf[9] != '.') arg_verbose = atoi(msgbuf+9);
++ if(msgbuf[11] != '.') cfg_seed_hours = atoi(msgbuf+11);
++ msgbuf = strchr(msgbuf+11, ' ') + 1;
++ if(msgbuf[0] != '.') cfg_seed_ratio = atof(msgbuf);
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.') cfg_max_peers = atoi(msgbuf);
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.') cfg_min_peers = atoi(msgbuf);
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.'){
++ foo = atoi(msgbuf);
++ if(foo != arg_file_to_download){
++ arg_file_to_download = foo;
++ BTCONTENT.FlushCache();
++ BTCONTENT.SetFilter();
++ WORLD.CheckInterest();
++ }
++ }
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.') cfg_exit_zero_peers = atoi(msgbuf);
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.'){
++ if(atoi(msgbuf)){
++ if( !Tracker.IsPaused() ) Tracker.SetPause();
++ }else if( Tracker.IsPaused() ) Tracker.Resume();
++ }
++ msgbuf = strchr(msgbuf, ' ') + 1;
++ if(msgbuf[0] != '.'){
++ if(atoi(msgbuf)) Tracker.SoftQuit();
++ else Tracker.DontQuit();
++ if(atoi(msgbuf)){
++ if( !Tracker.IsQuitting() ) Tracker.SoftQuit();
++ }else if( Tracker.IsQuitting() ) Tracker.DontQuit();
++ }
++
++ return 0;
++}
++
++
++int Ctcs::Send_Detail()
++{
++ char message[CTCS_BUFSIZE];
++ int r=0;
++ size_t n=0;
++ BTFILE *file=0;
++ BitField tmpFilter;
++
++ snprintf( message, CTCS_BUFSIZE, "CTDETAIL %lld %d %ld %ld",
++ BTCONTENT.GetTotalFilesLength(),
++ (int)(BTCONTENT.GetPieceLength()), (long)now,
++ (long)(BTCONTENT.GetSeedTime()) );
++ r = SendMessage(message);
++
++ if(r==0) r = SendMessage("CTFILES");
++
++ while( r==0 && (file = BTCONTENT.GetNextFile(file)) ){
++ ++n;
++ BTCONTENT.SetTmpFilter(n, &tmpFilter);
++ BitField tmpBitField = *BTCONTENT.pBF;
++ tmpBitField.Except(tmpFilter);
++
++ snprintf( message, CTCS_BUFSIZE, "CTFILE %u %d %d %llu %s",
++ n, (int)(BTCONTENT.getFilePieces(n)),
++ (int)(tmpBitField.Count()),
++ file->bf_length, file->bf_filename );
++ r = SendMessage(message);
++ }
++ if(r==0) r = SendMessage("CTFDONE");
++ return r;
++}
++
++
++int Ctcs::Send_Peers()
++{
++ btPeer *peer=0;
++ char message[CTCS_BUFSIZE];
++ char txtid[PEER_ID_LEN*2+3];
++ struct sockaddr_in psin;
++ int r=0;
++
++ r=SendMessage("CTPEERS");
++ while( r==0 && (peer = WORLD.GetNextPeer(peer)) ){
++ TextPeerID(peer->id, txtid);
++ peer->GetAddress(&psin);
++
++ snprintf(message, CTCS_BUFSIZE, "CTPEER %s %s %c%c%c%c %d %d %llu %llu %d",
++ txtid, inet_ntoa(psin.sin_addr),
++ peer->Is_Remote_UnChoked() ? 'U' : 'C',
++ peer->Is_Local_Interested() ? 'i' : 'n',
++ peer->Is_Local_UnChoked() ? 'U' : 'C',
++ peer->Is_Remote_Interested() ? 'i' : 'n',
++ peer->RateDL(), peer->RateUL(),
++ peer->TotalDL(), peer->TotalUL(),
++ peer->bitfield.Count() );
++ r = SendMessage(message);
++ }
++ if(r==0) r = SendMessage("CTPDONE");
++ return r;
++}
++
++
++int Ctcs::Send_Info(const char *info)
++{
++ char message[CTCS_BUFSIZE];
++
++ snprintf(message, CTCS_BUFSIZE, "CTINFO %s", info);
++ return SendMessage(message);
++}
++
++
++int Ctcs::Initial()
++{
++ char *s;
++
++ strncpy(m_host, arg_ctcs, MAXHOSTNAMELEN-1);
++ m_host[MAXHOSTNAMELEN-1] = '\0';
++ if( s = strchr(m_host, ':') ) *s='\0';
++ m_port = atoi(s=(strchr(arg_ctcs, ':')+1));
++ if(strchr(s, ':')){
++ printf("Enter CTCS password: "); fflush(stdout);
++ fgets(m_pass, CTCS_PASS_SIZE, stdin);
++ } else *m_pass = '\0';
++
++ return 0;
++}
++
++
++int Ctcs::Connect()
++{
++ ssize_t r;
++ m_last_timestamp = now;
++
++ if(_s2sin(m_host,m_port,&m_sin) < 0) {
++ fprintf(stderr,"warn, get CTCS ip address failed.");
++ return -1;
++ }
++
++ m_sock = socket(AF_INET,SOCK_STREAM,0);
++ if(INVALID_SOCKET == m_sock) return -1;
++
++ if(setfd_nonblock(m_sock) < 0) {CLOSE_SOCKET(m_sock); return -1; }
++
++ r = connect_nonb(m_sock,(struct sockaddr*)&m_sin);
++
++ if( r == -1 ){ CLOSE_SOCKET(m_sock); return -1;}
++ else if( r == -2 ) m_status = T_CONNECTING;
++ else{
++ m_status = T_READY;
++ if( Send_Protocol() != 0 ){
++ fprintf(stderr,"warn, send protocol to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ if( Send_Auth() != 0) {
++ fprintf(stderr,"warn, send password to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ if( Send_Torrent(BTCONTENT.GetPeerId(), arg_metainfo_file) != 0 ){
++ fprintf(stderr,"warn, send torrent to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ }
++ return 0;
++}
++
++
++int Ctcs::IntervalCheck(const time_t *pnow, fd_set *rfdp, fd_set *wfdp)
++{
++ if( T_FREE == m_status ){
++ if(*pnow - m_last_timestamp >= m_interval){
++ if(Connect() < 0){ Reset(15); return -1; }
++
++ if( m_status == T_CONNECTING ){
++ FD_SET(m_sock, rfdp);
++ FD_SET(m_sock, wfdp);
++ }else{
++ FD_SET(m_sock, rfdp);
++ }
++ }
++ }else{
++ if( m_status == T_CONNECTING ){
++ FD_SET(m_sock, rfdp);
++ FD_SET(m_sock, wfdp);
++ }else if (INVALID_SOCKET != m_sock){
++ FD_SET(m_sock, rfdp);
++ if( out_buffer.Count() ) FD_SET(m_sock, wfdp);
++ }
++ }
++ return m_sock;
++}
++
++
++int Ctcs::SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds)
++{
++ if( T_FREE == m_status ) return 0;
++
++ if( T_CONNECTING == m_status && FD_ISSET(m_sock,wfdp) ){
++ int error = 0;
++ socklen_t n = sizeof(error);
++ (*nfds)--;
++ FD_CLR(m_sock, wfdp);
++ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 ||
++ error != 0 ){
++ if( ECONNREFUSED != error )
++ fprintf(stderr,"warn, connect to CTCS failed. %s\n",strerror(error));
++ Reset(15);
++ return -1;
++ }else{
++ m_status = T_READY;
++ if( Send_Protocol() != 0 ){
++ fprintf(stderr,"warn, send protocol to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ if( Send_Auth() != 0) {
++ fprintf(stderr,"warn, send password to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ if( Send_Torrent(BTCONTENT.GetPeerId(), arg_metainfo_file) == 0 ){
++ fprintf(stderr,"warn, send torrent to CTCS failed. %s\n",strerror(errno));
++ return -1;
++ }
++ }
++ }else if( T_CONNECTING == m_status && FD_ISSET(m_sock,rfdp) ){
++ int error = 0;
++ socklen_t n = sizeof(error);
++ (*nfds)--;
++ FD_CLR(m_sock, rfdp);
++ getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n);
++ fprintf(stderr,"warn, connect to CTCS failed. %s\n",strerror(error));
++ Reset(15);
++ return -1;
++ }else if( INVALID_SOCKET != m_sock ){
++ if( FD_ISSET(m_sock, rfdp) ){
++ (*nfds)--;
++ FD_CLR(m_sock,rfdp);
++ CheckMessage();
++ }
++ if( INVALID_SOCKET != m_sock && FD_ISSET(m_sock, wfdp) ){
++ (*nfds)--;
++ FD_CLR(m_sock,wfdp);
++ if( out_buffer.Count() && out_buffer.FlushOut(m_sock) < 0){
++ Reset(1);
++ return -1;
++ }
++ }
++ }
++ return 0;
++}
++
++
++void Ctcs::RestartTracker()
++{
++ Tracker.SetPause(); // prevents downloader from exiting
++ Tracker.SetStoped(); // finish the tracker
++ // Now we need to wait until the tracker updates (T_FINISHED == m_status),
++ // then Tracker.Resume().
++ Tracker.SetRestart();
++}
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctcs.h ctorrent-1.3.4/ctcs.h
+--- ctorrent-1.3.4.sav/ctcs.h 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/ctcs.h 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,78 @@
++#include "tracker.h" // for its includes/defines
++
++#define CTCS_PROTOCOL "0001"
++
++#define CTCS_BUFSIZE 200
++#define CTCS_PASS_SIZE 21
++
++#define C_TORRENT 1
++#define C_STATUS 2
++#define C_PEERS 3
++
++struct ctstatus {
++ public:
++ size_t seeders, leechers, nhave, ntotal, navail, dlrate, ulrate,
++ dlimit, ulimit;
++ u_int64_t dltotal, ultotal;
++ ctstatus() {
++ seeders=leechers=nhave=ntotal=navail=dlrate=ulrate=dltotal=
++ ultotal=dlimit=ulimit = 0;
++ }
++};
++
++class Ctcs
++{
++ private:
++ char m_host[MAXHOSTNAMELEN];
++ int m_port;
++ char m_pass[CTCS_PASS_SIZE];
++
++ struct sockaddr_in m_sin;
++
++ unsigned char m_status:2;
++
++ time_t m_interval;
++ time_t m_last_timestamp;
++ time_t m_sent_ctstatus_time;
++
++ SOCKET m_sock;
++ BufIo in_buffer;
++ BufIo out_buffer;
++ struct ctstatus m_ctstatus;
++ int m_sent_ctstatus;
++ int m_sent_ctbw;
++
++ int SendMessage(char *buf);
++
++ public:
++ Ctcs();
++ ~Ctcs();
++
++ void Reset(time_t new_interval);
++ int _s2sin(char *h,int p,struct sockaddr_in *psin);
++ int Initial();
++ int Connect();
++ int CheckMessage();
++ int Send_Protocol();
++ int Send_Auth();
++ int Send_Torrent(unsigned char *peerid, char *torrent);
++ int Report_Status(size_t seeders, size_t leechers, size_t nhave,
++ size_t ntotal, size_t navail, size_t dlrate, size_t ulrate,
++ u_int64_t dltotal, u_int64_t ultotal, size_t dlimit, size_t ulimit);
++ int Send_Status();
++ int Send_bw();
++ int Send_Config();
++ int Set_Config(char *msgbuf);
++ int Send_Detail();
++ int Send_Peers();
++ int Send_Info(const char *info);
++ int IntervalCheck(const time_t *pnow, fd_set *rfdp, fd_set *wfdp);
++ int SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds);
++ void RestartTracker();
++
++ SOCKET GetSocket() { return m_sock; }
++ unsigned char GetStatus() { return m_status;}
++};
++
++extern Ctcs CTCS;
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp
+--- ctorrent-1.3.4.sav/ctorrent.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/ctorrent.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -1,6 +1,5 @@
+-#include <sys/types.h>
+-
+ #include "./def.h"
++#include <sys/types.h>
+
+ #ifdef WINDOWS
+ #include <windows.h>
+@@ -20,6 +19,7 @@
+ #include "downloader.h"
+ #include "peerlist.h"
+ #include "tracker.h"
++#include "ctcs.h"
+
+ #include "./config.h"
+
+@@ -46,7 +46,7 @@
+ struct timeval tv;
+ gettimeofday(&tv,(struct timezone*) 0);
+ unsigned int seed = tv.tv_usec + tv.tv_sec + getpid();
+- return srandom(seed);
++ srandom(seed);
+ }
+
+ int main(int argc, char **argv)
+@@ -65,7 +65,7 @@
+ if( !arg_announce ){ fprintf(stderr,"please use -u to specify a announce url!\n"); exit(1);}
+ if( !arg_save_as ){ fprintf(stderr,"please use -s to specify a metainfo file name!\n"); exit(1);}
+ if( BTCONTENT.InitialFromFS(arg_metainfo_file, arg_announce, arg_piece_length) < 0 ||
+- BTCONTENT.CreateMetainfoFile(arg_save_as) < 0){
++ BTCONTENT.CreateMetainfoFile(arg_save_as) < 0){
+ fprintf(stderr,"create metainfo failed.\n");
+ exit(1);
+ }
+@@ -81,15 +81,19 @@
+ if( !arg_flg_exam_only && !arg_flg_check_only){
+ if(WORLD.Initial_ListenPort() < 0){
+ fprintf(stderr,"warn, you couldn't accept connection.\n");
+- }else
+- printf("Listen on: %d\n",cfg_listen_port);
++ }
+
+- Tracker.Initial();
++ if( arg_ctcs ) CTCS.Initial();
++ Tracker.Initial();
+
+- signal(SIGPIPE,SIG_IGN);
- signal(SIGINT,sigint_catch);
++ signal(SIGPIPE,SIG_IGN);
+ signal(SIGINT,sig_catch);
+ signal(SIGTERM,sig_catch);
Downloader();
@@ -532,19 +7732,65 @@ diff -u ctorrent-1.3.4.orig/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp
exit(0);
}
-@@ -99,7 +103,7 @@
+@@ -99,7 +103,8 @@
int param_check(int argc, char **argv)
{
int c, l;
- while ( ( c = getopt(argc,argv,"b:B:cC:e:fl:M:m:P:p:s:tu:xhH")) != -1)
-+ while ( ( c = getopt(argc,argv,"b:cC:D:e:fl:M:m:n:P:p:s:tu:U:vxhH")) != -1)
++ char *s;
++ while ( ( c = getopt(argc,argv,"b:cC:D:e:E:fi:l:M:m:n:P:p:s:S:tu:U:vxz:hH")) != -1)
switch( c ){
case 'b':
arg_bitfield_file = new char[strlen(optarg) + 1];
-@@ -150,14 +154,23 @@
+@@ -109,6 +114,10 @@
+ strcpy(arg_bitfield_file, optarg);
+ break;
+
++ case 'i': // listen on ip XXXX
++ cfg_listen_ip = inet_addr(optarg);
++ break;
++
+ case 'p': // listen on Port XXXX
+ cfg_listen_port = atoi(optarg);
+ break;
+@@ -126,6 +135,10 @@
+ cfg_seed_hours = atoi(optarg);
+ break;
+
++ case 'E': // target seed ratio
++ cfg_seed_ratio = atof(optarg);
++ break;
++
+ case 'c': // Check exist only
+ arg_flg_check_only = 1;
+ break;
+@@ -137,32 +150,47 @@
+ case 'M': // Max peers
+ cfg_max_peers = atoi(optarg);
+ if( cfg_max_peers > 1000 ||
+- cfg_max_peers < 20){
+- return -1;
++ cfg_max_peers < 20){
++ return -1;
+ }
+ break;
+
+ case 'm': // Min peers
+ cfg_min_peers = atoi(optarg);
+ if( cfg_min_peers > 1000 ||
+- cfg_min_peers < 20){
+- return -1;
++ cfg_min_peers < 1){
++ return -1;
}
break;
++ case 'z': // slice size
++ cfg_req_slice_size = atoi(optarg) * 1024;
++ if( cfg_req_slice_size < 1024 || cfg_req_slice_size > 128*1024 )
++ return -1;
++ break;
++
+ case 'n': // Which file download
+ arg_file_to_download = atoi(optarg);
+ break;
@@ -558,19 +7804,51 @@ diff -u ctorrent-1.3.4.orig/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp
- cfg_max_bandwidth = atoi(optarg);
+ case 'D':
+ cfg_max_bandwidth_down = (int)(strtod(optarg, NULL) * 1024);
++ break;
++
++ case 'U':
++ cfg_max_bandwidth_up = (int)(strtod(optarg, NULL) * 1024);
break;
-+ case 'U':
-+ cfg_max_bandwidth_up = (int)(strtod(optarg, NULL) * 1024);
-+ break;
-+
case 'P':
- l = strlen(optarg);
- if (l > MAX_PF_LEN) {printf("-P arg must be 8 or less characters\n"); exit(1);}
-@@ -190,6 +203,10 @@
+- l = strlen(optarg);
+- if (l > MAX_PF_LEN) {printf("-P arg must be 8 or less characters\n"); exit(1);}
+- if (l == 1 && *optarg == '-') *arg_user_agent = (char) 0;
+- else strcpy(arg_user_agent,optarg);
++ l = strlen(optarg);
++ if (l > MAX_PF_LEN) {printf("-P arg must be 8 or less characters\n"); exit(1);}
++ if (l == 1 && *optarg == '-') *arg_user_agent = (char) 0;
++ else strcpy(arg_user_agent,optarg);
+ break;
+
+ // BELLOW OPTIONS USED FOR CREATE TORRENT.
+@@ -179,17 +207,29 @@
+ case 'l': // piece Length (default 262144)
+ arg_piece_length = atoi(optarg);
+ if( arg_piece_length < 65536 ||
+- arg_piece_length > 1310720 ){
+- // warn message:
+- // piece length range is 65536 =>> 1310720
+- return -1;
++ arg_piece_length > 1310720 ){
++ // warn message:
++ // piece length range is 65536 =>> 1310720
++ return -1;
+ }
+ break;
++ // ABOVE OPTIONS USED FOR CREATE TORRENT.
+
+ case 'x':
arg_flg_exam_only = 1;
break;
++ case 'S': // CTCS server
++ if( arg_ctcs ) return -1;
++ arg_ctcs = new char[strlen(optarg) + 1];
++ if( !strchr(optarg, ':') ) return -1;
++ strcpy(arg_ctcs, optarg);
++ break;
++
+ case 'v':
+ arg_verbose = 1;
+ break;
@@ -578,55 +7856,3537 @@ diff -u ctorrent-1.3.4.orig/ctorrent.cpp ctorrent-1.3.4/ctorrent.cpp
case 'h':
case 'H':
default:
-@@ -217,6 +234,7 @@
+@@ -211,14 +251,17 @@
+
+ void usage()
+ {
+- fprintf(stderr,"%s Copyright: YuHong(992126018601033)",PACKAGE_STRING);
++ fprintf(stderr,"%s Original code Copyright: YuHong(992126018601033)",PACKAGE_STRING);
+ fprintf(stderr,"\nWARNING: THERE IS NO WARRANTY FOR CTorrent. USE AT YOUR OWN RISK!!!\n");
+ fprintf(stderr,"\nGeneric Options:\n");
fprintf(stderr,"-h/-H\t\tShow this message.\n");
fprintf(stderr,"-x\t\tDecode metainfo(torrent) file only, don't download.\n");
fprintf(stderr,"-c\t\tCheck exist only. don't download.\n");
+ fprintf(stderr,"-v\t\tVerbose output (for debugging).\n");
fprintf(stderr,"\nDownload Options:\n");
fprintf(stderr,"-e int\t\tExit while seed <int> hours later. (default 72 hours)\n");
++ fprintf(stderr,"-E num\t\tExit after seeding to <num> ratio (UL:DL).\n");
++ fprintf(stderr,"-i ip\t\tListen for connection on ip. (default all ip's)\n");
fprintf(stderr,"-p port\t\tListen port. (default 2706 -> 2106)\n");
-@@ -226,7 +244,9 @@
+ fprintf(stderr,"-s save_as\tSave file/directory/metainfo as... \n");
+ fprintf(stderr,"-C cache_size\tCache size,unit MB. (default 16MB)\n");
+@@ -226,8 +269,12 @@
fprintf(stderr,"-b bf_filename\tBit field filename. (use it carefully)\n");
fprintf(stderr,"-M max_peers\tMax peers count.\n");
fprintf(stderr,"-m min_peers\tMin peers count.\n");
- fprintf(stderr,"-B rate\t\tMax bandwidth (unit KB/s)\n");
++ fprintf(stderr,"-z slice_size\tDownload slice/block size, unit KB. (default 16, max 128).\n");
+ fprintf(stderr,"-n file_number\tWhich file download.\n");
+ fprintf(stderr,"-D rate\t\tMax bandwidth down (unit KB/s)\n");
+ fprintf(stderr,"-U rate\t\tMax bandwidth up (unit KB/s)\n");
fprintf(stderr,"-P peer_id\tSet Peer ID ["PEER_PFX"]\n");
++ fprintf(stderr,"-S host:port\tUse CTCS server\n");
fprintf(stderr,"\nMake metainfo(torrent) file Options:\n");
fprintf(stderr,"-t\t\tWith make torrent. must specify this option.\n");
-diff -u ctorrent-1.3.4.orig/downloader.cpp ctorrent-1.3.4/downloader.cpp
---- ctorrent-1.3.4.orig/downloader.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/downloader.cpp 2005-08-11 23:45:29.429693680 +0200
-@@ -29,10 +29,14 @@
- time_t now;
+ fprintf(stderr,"-u url\t\tTracker's url.\n");
+@@ -235,5 +282,7 @@
+ fprintf(stderr,"\neg.\n");
+ fprintf(stderr,"hong> ctorrent -s new_filename -e 12 -C 32 -p 6881 eg.torrent\n\n");
+ fprintf(stderr,"home page: http://ctorrent.sourceforge.net/\n");
+- fprintf(stderr,"bug report: %s\n\n",PACKAGE_BUGREPORT);
++ fprintf(stderr,"see also: http://www.rahul.net/dholmes/ctorrent/\n");
++ fprintf(stderr,"bug report: %s\n",PACKAGE_BUGREPORT);
++ fprintf(stderr,"original author: bsdi@sina.com\n\n");
+ }
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bencode.Po ctorrent-1.3.4/.deps/bencode.Po
+--- ctorrent-1.3.4.sav/.deps/bencode.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/bencode.Po 2006-06-28 19:24:11.000000000 +0200
+@@ -0,0 +1,137 @@
++bencode.o bencode.o: bencode.cpp def.h config.h /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h bencode.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \
++ /usr/include/bits/fcntl.h /usr/include/sys/stat.h \
++ /usr/include/bits/stat.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \
++ /usr/include/alloca.h /usr/include/string.h /usr/include/ctype.h
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++bencode.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/fcntl.h:
++
++/usr/include/bits/fcntl.h:
++
++/usr/include/sys/stat.h:
++
++/usr/include/bits/stat.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/ctype.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bitfield.Po ctorrent-1.3.4/.deps/bitfield.Po
+--- ctorrent-1.3.4.sav/.deps/bitfield.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/bitfield.Po 2006-06-28 19:24:12.000000000 +0200
+@@ -0,0 +1,135 @@
++bitfield.o bitfield.o: bitfield.cpp bitfield.h /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/param.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h \
++ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/string.h \
++ /usr/include/xlocale.h /usr/include/stdlib.h \
++ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
++ /usr/include/alloca.h /usr/include/stdio.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
++ /usr/include/gconv.h /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h
++
++bitfield.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/param.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++/usr/include/sys/stat.h:
++
++/usr/include/bits/stat.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btconfig.Po ctorrent-1.3.4/.deps/btconfig.Po
+--- ctorrent-1.3.4.sav/.deps/btconfig.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/btconfig.Po 2006-06-28 19:24:12.000000000 +0200
+@@ -0,0 +1,46 @@
++btconfig.o btconfig.o: btconfig.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btcontent.Po ctorrent-1.3.4/.deps/btcontent.Po
+--- ctorrent-1.3.4.sav/.deps/btcontent.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/btcontent.Po 2006-06-28 19:24:12.000000000 +0200
+@@ -0,0 +1,223 @@
++btcontent.o btcontent.o: btcontent.cpp btcontent.h def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h \
++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/param.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/linux/param.h /usr/include/asm/param.h \
++ /usr/include/asm-i386/param.h /usr/include/xlocale.h \
++ /usr/include/sys/stat.h /usr/include/bits/stat.h /usr/include/stdlib.h \
++ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
++ /usr/include/alloca.h /usr/include/string.h /usr/include/fcntl.h \
++ /usr/include/bits/fcntl.h /usr/include/errno.h \
++ /usr/include/bits/errno.h /usr/include/linux/errno.h \
++ /usr/include/asm/errno.h /usr/include/asm-i386/errno.h btconfig.h \
++ bencode.h peer.h /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
++ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \
++ /usr/include/asm-i386/sockios.h /usr/include/arpa/inet.h \
++ /usr/include/netinet/in.h /usr/include/stdint.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h btrequest.h btstream.h bufio.h def.h \
++ rate.h httpencode.h tracker.h /usr/include/sys/time.h sha1.h
++
++btcontent.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++def.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/param.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/sys/stat.h:
++
++/usr/include/bits/stat.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/fcntl.h:
++
++/usr/include/bits/fcntl.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++btconfig.h:
++
++bencode.h:
++
++peer.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++btrequest.h:
++
++btstream.h:
++
++bufio.h:
++
++def.h:
++
++rate.h:
++
++httpencode.h:
++
++tracker.h:
++
++/usr/include/sys/time.h:
++
++sha1.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btfiles.Po ctorrent-1.3.4/.deps/btfiles.Po
+--- ctorrent-1.3.4.sav/.deps/btfiles.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/btfiles.Po 2006-06-28 19:24:13.000000000 +0200
+@@ -0,0 +1,172 @@
++btfiles.o btfiles.o: btfiles.cpp btfiles.h def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h bitfield.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h \
++ /usr/include/dirent.h /usr/include/bits/dirent.h \
++ /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \
++ /usr/include/linux/limits.h /usr/include/sys/param.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix2_lim.h \
++ /usr/include/bits/xopen_lim.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h \
++ /usr/include/xlocale.h /usr/include/sys/stat.h /usr/include/bits/stat.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
++ /usr/include/string.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \
++ /usr/include/errno.h /usr/include/bits/errno.h \
++ /usr/include/linux/errno.h /usr/include/asm/errno.h \
++ /usr/include/asm-i386/errno.h bencode.h btconfig.h btcontent.h def.h
++
++btfiles.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/dirent.h:
++
++/usr/include/bits/dirent.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/sys/param.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/sys/stat.h:
++
++/usr/include/bits/stat.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/fcntl.h:
++
++/usr/include/bits/fcntl.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++bencode.h:
++
++btconfig.h:
++
++btcontent.h:
++
++def.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btrequest.Po ctorrent-1.3.4/.deps/btrequest.Po
+--- ctorrent-1.3.4.sav/.deps/btrequest.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/btrequest.Po 2006-06-28 19:24:13.000000000 +0200
+@@ -0,0 +1,100 @@
++btrequest.o btrequest.o: btrequest.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \
++ /usr/include/alloca.h btrequest.h btcontent.h def.h config.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h btconfig.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/alloca.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++config.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++def.h:
++
++btconfig.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/btstream.Po ctorrent-1.3.4/.deps/btstream.Po
+--- ctorrent-1.3.4.sav/.deps/btstream.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/btstream.Po 2006-06-28 19:24:13.000000000 +0200
+@@ -0,0 +1,176 @@
++btstream.o btstream.o: btstream.cpp /usr/include/arpa/inet.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h \
++ /usr/include/bits/wordsize.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/sys/types.h \
++ /usr/include/bits/types.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/bits/in.h /usr/include/bits/byteswap.h btstream.h def.h \
++ config.h bufio.h def.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h peer.h \
++ /usr/include/unistd.h /usr/include/string.h /usr/include/xlocale.h \
++ btrequest.h btcontent.h def.h /usr/include/stdio.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h rate.h btconfig.h msgencode.h
++
++/usr/include/arpa/inet.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/bits/types.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++btstream.h:
++
++def.h:
++
++config.h:
++
++bufio.h:
++
++def.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++peer.h:
++
++/usr/include/unistd.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++rate.h:
++
++btconfig.h:
++
++msgencode.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/bufio.Po ctorrent-1.3.4/.deps/bufio.Po
+--- ctorrent-1.3.4.sav/.deps/bufio.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/bufio.Po 2006-06-28 19:24:13.000000000 +0200
+@@ -0,0 +1,178 @@
++bufio.o bufio.o: bufio.cpp bufio.h def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/bits/uio.h \
++ /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/arpa/inet.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/string.h \
++ /usr/include/xlocale.h /usr/include/errno.h /usr/include/bits/errno.h \
++ /usr/include/linux/errno.h /usr/include/asm/errno.h \
++ /usr/include/asm-i386/errno.h btrequest.h btcontent.h def.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h def.h
++
++bufio.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++def.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/connect_nonb.Po ctorrent-1.3.4/.deps/connect_nonb.Po
+--- ctorrent-1.3.4.sav/.deps/connect_nonb.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/connect_nonb.Po 2006-06-28 19:24:13.000000000 +0200
+@@ -0,0 +1,112 @@
++connect_nonb.o connect_nonb.o: connect_nonb.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ connect_nonb.h def.h config.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/bits/uio.h \
++ /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/errno.h /usr/include/bits/errno.h \
++ /usr/include/linux/errno.h /usr/include/asm/errno.h \
++ /usr/include/asm-i386/errno.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++connect_nonb.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/ctcs.Po ctorrent-1.3.4/.deps/ctcs.Po
+--- ctorrent-1.3.4.sav/.deps/ctcs.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/ctcs.Po 2006-06-28 19:24:14.000000000 +0200
+@@ -0,0 +1,246 @@
++ctcs.o ctcs.o: ctcs.cpp /usr/include/unistd.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/time.h \
++ /usr/include/bits/time.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/xlocale.h /usr/include/netdb.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h \
++ /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/sys/types.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/bits/in.h /usr/include/bits/byteswap.h \
++ /usr/include/rpc/netdb.h /usr/include/bits/siginfo.h \
++ /usr/include/bits/netdb.h /usr/include/stdlib.h \
++ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
++ /usr/include/alloca.h /usr/include/string.h /usr/include/errno.h \
++ /usr/include/bits/errno.h /usr/include/linux/errno.h \
++ /usr/include/asm/errno.h /usr/include/asm-i386/errno.h \
++ /usr/include/ctype.h ctcs.h tracker.h def.h config.h bufio.h def.h \
++ /usr/include/arpa/inet.h /usr/include/sys/param.h \
++ /usr/include/linux/param.h /usr/include/asm/param.h \
++ /usr/include/asm-i386/param.h btconfig.h btcontent.h def.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h setnonblock.h connect_nonb.h peerlist.h peer.h def.h \
++ btrequest.h btcontent.h bitfield.h btstream.h bufio.h rate.h btconfig.h \
++ rate.h peer.h bttime.h
++
++/usr/include/unistd.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/time.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/netdb.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/rpc/netdb.h:
++
++/usr/include/bits/siginfo.h:
++
++/usr/include/bits/netdb.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++/usr/include/ctype.h:
++
++ctcs.h:
++
++tracker.h:
++
++def.h:
++
++config.h:
++
++bufio.h:
++
++def.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++btconfig.h:
++
++btcontent.h:
++
++def.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++setnonblock.h:
++
++connect_nonb.h:
++
++peerlist.h:
++
++peer.h:
++
++def.h:
++
++btrequest.h:
++
++btcontent.h:
++
++bitfield.h:
++
++btstream.h:
++
++bufio.h:
++
++rate.h:
++
++btconfig.h:
++
++rate.h:
++
++peer.h:
++
++bttime.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/ctorrent.Po ctorrent-1.3.4/.deps/ctorrent.Po
+--- ctorrent-1.3.4.sav/.deps/ctorrent.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/ctorrent.Po 2006-06-28 19:24:14.000000000 +0200
+@@ -0,0 +1,246 @@
++ctorrent.o ctorrent.o: ctorrent.cpp def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/signal.h /usr/include/bits/signum.h \
++ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \
++ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \
++ /usr/include/asm-i386/sigcontext.h /usr/include/bits/sigstack.h \
++ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h \
++ /usr/include/sys/time.h /usr/include/xlocale.h /usr/include/string.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/bits/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h /usr/include/stdlib.h \
++ /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \
++ /usr/include/alloca.h btconfig.h btcontent.h def.h bitfield.h btfiles.h \
++ downloader.h peerlist.h peer.h def.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/bits/uio.h \
++ /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
++ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \
++ /usr/include/asm-i386/sockios.h /usr/include/arpa/inet.h \
++ /usr/include/netinet/in.h /usr/include/stdint.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h btrequest.h btcontent.h bitfield.h \
++ btstream.h bufio.h def.h rate.h def.h btconfig.h rate.h tracker.h \
++ bufio.h /usr/include/sys/param.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h ctcs.h config.h \
++ sigint.h
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/signal.h:
++
++/usr/include/bits/signum.h:
++
++/usr/include/bits/siginfo.h:
++
++/usr/include/bits/sigaction.h:
++
++/usr/include/bits/sigcontext.h:
++
++/usr/include/asm/sigcontext.h:
++
++/usr/include/asm-i386/sigcontext.h:
++
++/usr/include/bits/sigstack.h:
++
++/usr/include/sys/ucontext.h:
++
++/usr/include/bits/sigthread.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/string.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++btconfig.h:
++
++btcontent.h:
++
++def.h:
++
++bitfield.h:
++
++btfiles.h:
++
++downloader.h:
++
++peerlist.h:
++
++peer.h:
++
++def.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++btrequest.h:
++
++btcontent.h:
++
++bitfield.h:
++
++btstream.h:
++
++bufio.h:
++
++def.h:
++
++rate.h:
++
++def.h:
++
++btconfig.h:
++
++rate.h:
++
++tracker.h:
++
++bufio.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++ctcs.h:
++
++config.h:
++
++sigint.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/downloader.Po ctorrent-1.3.4/.deps/downloader.Po
+--- ctorrent-1.3.4.sav/.deps/downloader.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/downloader.Po 2006-06-28 19:24:14.000000000 +0200
+@@ -0,0 +1,214 @@
++downloader.o downloader.o: downloader.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/xlocale.h /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/sys/time.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h \
++ /usr/include/netinet/in.h /usr/include/stdint.h \
++ /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
++ /usr/include/string.h peerlist.h def.h config.h peer.h def.h \
++ btrequest.h btcontent.h def.h bitfield.h btfiles.h btstream.h bufio.h \
++ def.h rate.h btconfig.h rate.h tracker.h bufio.h \
++ /usr/include/sys/param.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \
++ btcontent.h ctcs.h bttime.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++peerlist.h:
++
++def.h:
++
++config.h:
++
++peer.h:
++
++def.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++bitfield.h:
++
++btfiles.h:
++
++btstream.h:
++
++bufio.h:
++
++def.h:
++
++rate.h:
++
++btconfig.h:
++
++rate.h:
++
++tracker.h:
++
++bufio.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++btconfig.h:
++
++btcontent.h:
++
++ctcs.h:
++
++bttime.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/httpencode.Po ctorrent-1.3.4/.deps/httpencode.Po
+--- ctorrent-1.3.4.sav/.deps/httpencode.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/httpencode.Po 2006-06-28 19:24:14.000000000 +0200
+@@ -0,0 +1,72 @@
++httpencode.o httpencode.o: httpencode.cpp def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h httpencode.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/xlocale.h \
++ /usr/include/alloca.h /usr/include/ctype.h /usr/include/string.h \
++ config.h
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++httpencode.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/alloca.h:
++
++/usr/include/ctype.h:
++
++/usr/include/string.h:
++
++config.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/iplist.Po ctorrent-1.3.4/.deps/iplist.Po
+--- ctorrent-1.3.4.sav/.deps/iplist.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/iplist.Po 2006-06-28 19:24:14.000000000 +0200
+@@ -0,0 +1,130 @@
++iplist.o iplist.o: iplist.cpp /usr/include/string.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/xlocale.h iplist.h def.h config.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/arpa/inet.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h
++
++/usr/include/string.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/xlocale.h:
++
++iplist.h:
++
++def.h:
++
++config.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/peerlist.Po ctorrent-1.3.4/.deps/peerlist.Po
+--- ctorrent-1.3.4.sav/.deps/peerlist.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/peerlist.Po 2006-06-28 19:24:16.000000000 +0200
+@@ -0,0 +1,237 @@
++peerlist.o peerlist.o: peerlist.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h peerlist.h \
++ def.h config.h peer.h def.h /usr/include/unistd.h \
++ /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
++ /usr/include/bits/confname.h /usr/include/getopt.h \
++ /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/arpa/inet.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/string.h \
++ /usr/include/xlocale.h btrequest.h btcontent.h def.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h btstream.h bufio.h def.h rate.h btconfig.h rate.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
++ /usr/include/errno.h /usr/include/bits/errno.h \
++ /usr/include/linux/errno.h /usr/include/asm/errno.h \
++ /usr/include/asm-i386/errno.h btconfig.h connect_nonb.h setnonblock.h \
++ btcontent.h msgencode.h iplist.h def.h tracker.h bufio.h \
++ /usr/include/sys/time.h /usr/include/sys/param.h \
++ /usr/include/linux/param.h /usr/include/asm/param.h \
++ /usr/include/asm-i386/param.h ctcs.h bttime.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++peerlist.h:
++
++def.h:
++
++config.h:
++
++peer.h:
++
++def.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++btstream.h:
++
++bufio.h:
++
++def.h:
++
++rate.h:
++
++btconfig.h:
++
++rate.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++btconfig.h:
++
++connect_nonb.h:
++
++setnonblock.h:
++
++btcontent.h:
++
++msgencode.h:
++
++iplist.h:
++
++def.h:
++
++tracker.h:
++
++bufio.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++ctcs.h:
++
++bttime.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/peer.Po ctorrent-1.3.4/.deps/peer.Po
+--- ctorrent-1.3.4.sav/.deps/peer.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/peer.Po 2006-06-28 19:24:15.000000000 +0200
+@@ -0,0 +1,201 @@
++peer.o peer.o: peer.cpp peer.h def.h config.h /usr/include/unistd.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/arpa/inet.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/string.h \
++ /usr/include/xlocale.h btrequest.h btcontent.h def.h \
++ /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
++ /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h btstream.h bufio.h def.h rate.h btconfig.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
++ /usr/include/ctype.h btcontent.h msgencode.h peerlist.h def.h peer.h \
++ rate.h btconfig.h bttime.h
++
++peer.h:
++
++def.h:
++
++config.h:
++
++/usr/include/unistd.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++btrequest.h:
++
++btcontent.h:
++
++def.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++btstream.h:
++
++bufio.h:
++
++def.h:
++
++rate.h:
++
++btconfig.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/ctype.h:
++
++btcontent.h:
++
++msgencode.h:
++
++peerlist.h:
++
++def.h:
++
++peer.h:
++
++rate.h:
++
++btconfig.h:
++
++bttime.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/rate.Po ctorrent-1.3.4/.deps/rate.Po
+--- ctorrent-1.3.4.sav/.deps/rate.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/rate.Po 2006-06-28 19:24:16.000000000 +0200
+@@ -0,0 +1,57 @@
++rate.o rate.o: rate.cpp rate.h def.h config.h /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/xlocale.h bttime.h
++
++rate.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/xlocale.h:
++
++bttime.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/setnonblock.Po ctorrent-1.3.4/.deps/setnonblock.Po
+--- ctorrent-1.3.4.sav/.deps/setnonblock.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/setnonblock.Po 2006-06-28 19:24:16.000000000 +0200
+@@ -0,0 +1,120 @@
++setnonblock.o setnonblock.o: setnonblock.cpp setnonblock.h def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/sys/socket.h /usr/include/sys/uio.h \
++ /usr/include/bits/uio.h /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \
++ /usr/include/sys/stat.h /usr/include/bits/stat.h
++
++setnonblock.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/fcntl.h:
++
++/usr/include/bits/fcntl.h:
++
++/usr/include/sys/stat.h:
++
++/usr/include/bits/stat.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/sha1.Po ctorrent-1.3.4/.deps/sha1.Po
+--- ctorrent-1.3.4.sav/.deps/sha1.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/sha1.Po 2006-06-28 19:24:17.000000000 +0200
+@@ -0,0 +1,57 @@
++sha1.o sha1.o: sha1.c /usr/include/string.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/string.h /usr/include/bits/string2.h \
++ /usr/include/endian.h /usr/include/bits/endian.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/include/bits/typesizes.h /usr/include/stdlib.h sha1.h \
++ /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h
++
++/usr/include/string.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/string.h:
++
++/usr/include/bits/string2.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/stdlib.h:
++
++sha1.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/time.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/sigint.Po ctorrent-1.3.4/.deps/sigint.Po
+--- ctorrent-1.3.4.sav/.deps/sigint.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/sigint.Po 2006-06-28 19:24:16.000000000 +0200
+@@ -0,0 +1,228 @@
++sigint.o sigint.o: sigint.cpp /usr/include/sys/types.h \
++ /usr/include/features.h /usr/include/sys/cdefs.h \
++ /usr/include/gnu/stubs.h /usr/include/bits/types.h \
++ /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
++ /usr/include/signal.h /usr/include/bits/signum.h \
++ /usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \
++ /usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \
++ /usr/include/asm-i386/sigcontext.h /usr/include/bits/sigstack.h \
++ /usr/include/sys/ucontext.h /usr/include/bits/sigthread.h btcontent.h \
++ def.h config.h /usr/include/stdio.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
++ /usr/include/gconv.h /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
++ /usr/include/bits/stdio.h bitfield.h btfiles.h def.h tracker.h bufio.h \
++ def.h /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/bits/uio.h \
++ /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
++ /usr/include/asm-i386/socket.h /usr/include/asm/sockios.h \
++ /usr/include/asm-i386/sockios.h /usr/include/netinet/in.h \
++ /usr/include/stdint.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \
++ /usr/include/sys/param.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \
++ peerlist.h peer.h def.h /usr/include/string.h /usr/include/xlocale.h \
++ btrequest.h btcontent.h bitfield.h btstream.h bufio.h rate.h btconfig.h \
++ rate.h sigint.h
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++/usr/include/signal.h:
++
++/usr/include/bits/signum.h:
++
++/usr/include/bits/siginfo.h:
++
++/usr/include/bits/sigaction.h:
++
++/usr/include/bits/sigcontext.h:
++
++/usr/include/asm/sigcontext.h:
++
++/usr/include/asm-i386/sigcontext.h:
++
++/usr/include/bits/sigstack.h:
++
++/usr/include/sys/ucontext.h:
++
++/usr/include/bits/sigthread.h:
++
++btcontent.h:
++
++def.h:
++
++config.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++def.h:
++
++tracker.h:
++
++bufio.h:
++
++def.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++btconfig.h:
++
++peerlist.h:
++
++peer.h:
++
++def.h:
++
++/usr/include/string.h:
++
++/usr/include/xlocale.h:
++
++btrequest.h:
++
++btcontent.h:
++
++bitfield.h:
++
++btstream.h:
++
++bufio.h:
++
++rate.h:
++
++btconfig.h:
++
++rate.h:
++
++sigint.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/.deps/tracker.Po ctorrent-1.3.4/.deps/tracker.Po
+--- ctorrent-1.3.4.sav/.deps/tracker.Po 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/.deps/tracker.Po 2006-06-28 19:24:17.000000000 +0200
+@@ -0,0 +1,244 @@
++tracker.o tracker.o: tracker.cpp tracker.h def.h config.h \
++ /usr/include/sys/types.h /usr/include/features.h \
++ /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
++ /usr/include/bits/types.h /usr/include/bits/wordsize.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h \
++ /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \
++ /usr/include/bits/endian.h /usr/include/sys/select.h \
++ /usr/include/bits/select.h /usr/include/bits/sigset.h \
++ /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
++ /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h bufio.h \
++ def.h /usr/include/unistd.h /usr/include/bits/posix_opt.h \
++ /usr/include/bits/environments.h /usr/include/bits/confname.h \
++ /usr/include/getopt.h /usr/include/sys/time.h /usr/include/sys/socket.h \
++ /usr/include/sys/uio.h /usr/include/bits/uio.h \
++ /usr/include/bits/socket.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h \
++ /usr/include/limits.h /usr/include/bits/posix1_lim.h \
++ /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
++ /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \
++ /usr/include/bits/stdio_lim.h /usr/include/bits/sockaddr.h \
++ /usr/include/asm/socket.h /usr/include/asm-i386/socket.h \
++ /usr/include/asm/sockios.h /usr/include/asm-i386/sockios.h \
++ /usr/include/netinet/in.h /usr/include/stdint.h \
++ /usr/include/bits/wchar.h /usr/include/bits/in.h \
++ /usr/include/bits/byteswap.h /usr/include/arpa/inet.h \
++ /usr/include/sys/param.h /usr/include/linux/param.h \
++ /usr/include/asm/param.h /usr/include/asm-i386/param.h btconfig.h \
++ /usr/include/xlocale.h /usr/include/netdb.h /usr/include/rpc/netdb.h \
++ /usr/include/bits/siginfo.h /usr/include/bits/netdb.h \
++ /usr/include/stdlib.h /usr/include/bits/waitflags.h \
++ /usr/include/bits/waitstatus.h /usr/include/alloca.h \
++ /usr/include/string.h /usr/include/errno.h /usr/include/bits/errno.h \
++ /usr/include/linux/errno.h /usr/include/asm/errno.h \
++ /usr/include/asm-i386/errno.h peerlist.h peer.h def.h btrequest.h \
++ btcontent.h /usr/include/stdio.h /usr/include/libio.h \
++ /usr/include/_G_config.h /usr/include/wchar.h /usr/include/gconv.h \
++ /usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h \
++ /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h bitfield.h \
++ btfiles.h btstream.h bufio.h rate.h btconfig.h rate.h httpencode.h \
++ bencode.h setnonblock.h connect_nonb.h btcontent.h iplist.h def.h \
++ ctcs.h
++
++tracker.h:
++
++def.h:
++
++config.h:
++
++/usr/include/sys/types.h:
++
++/usr/include/features.h:
++
++/usr/include/sys/cdefs.h:
++
++/usr/include/gnu/stubs.h:
++
++/usr/include/bits/types.h:
++
++/usr/include/bits/wordsize.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stddef.h:
++
++/usr/include/bits/typesizes.h:
++
++/usr/include/time.h:
++
++/usr/include/endian.h:
++
++/usr/include/bits/endian.h:
++
++/usr/include/sys/select.h:
++
++/usr/include/bits/select.h:
++
++/usr/include/bits/sigset.h:
++
++/usr/include/bits/time.h:
++
++/usr/include/sys/sysmacros.h:
++
++/usr/include/bits/pthreadtypes.h:
++
++/usr/include/bits/sched.h:
++
++bufio.h:
++
++def.h:
++
++/usr/include/unistd.h:
++
++/usr/include/bits/posix_opt.h:
++
++/usr/include/bits/environments.h:
++
++/usr/include/bits/confname.h:
++
++/usr/include/getopt.h:
++
++/usr/include/sys/time.h:
++
++/usr/include/sys/socket.h:
++
++/usr/include/sys/uio.h:
++
++/usr/include/bits/uio.h:
++
++/usr/include/bits/socket.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/limits.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/syslimits.h:
++
++/usr/include/limits.h:
++
++/usr/include/bits/posix1_lim.h:
++
++/usr/include/bits/local_lim.h:
++
++/usr/include/linux/limits.h:
++
++/usr/include/bits/posix2_lim.h:
++
++/usr/include/bits/xopen_lim.h:
++
++/usr/include/bits/stdio_lim.h:
++
++/usr/include/bits/sockaddr.h:
++
++/usr/include/asm/socket.h:
++
++/usr/include/asm-i386/socket.h:
++
++/usr/include/asm/sockios.h:
++
++/usr/include/asm-i386/sockios.h:
++
++/usr/include/netinet/in.h:
++
++/usr/include/stdint.h:
++
++/usr/include/bits/wchar.h:
++
++/usr/include/bits/in.h:
++
++/usr/include/bits/byteswap.h:
++
++/usr/include/arpa/inet.h:
++
++/usr/include/sys/param.h:
++
++/usr/include/linux/param.h:
++
++/usr/include/asm/param.h:
++
++/usr/include/asm-i386/param.h:
++
++btconfig.h:
++
++/usr/include/xlocale.h:
++
++/usr/include/netdb.h:
++
++/usr/include/rpc/netdb.h:
++
++/usr/include/bits/siginfo.h:
++
++/usr/include/bits/netdb.h:
++
++/usr/include/stdlib.h:
++
++/usr/include/bits/waitflags.h:
++
++/usr/include/bits/waitstatus.h:
++
++/usr/include/alloca.h:
++
++/usr/include/string.h:
++
++/usr/include/errno.h:
++
++/usr/include/bits/errno.h:
++
++/usr/include/linux/errno.h:
++
++/usr/include/asm/errno.h:
++
++/usr/include/asm-i386/errno.h:
++
++peerlist.h:
++
++peer.h:
++
++def.h:
++
++btrequest.h:
++
++btcontent.h:
++
++/usr/include/stdio.h:
++
++/usr/include/libio.h:
++
++/usr/include/_G_config.h:
++
++/usr/include/wchar.h:
++
++/usr/include/gconv.h:
++
++/usr/lib/gcc/i486-linux-gnu/4.0.3/include/stdarg.h:
++
++/usr/include/bits/sys_errlist.h:
++
++/usr/include/bits/stdio.h:
++
++bitfield.h:
++
++btfiles.h:
++
++btstream.h:
++
++bufio.h:
++
++rate.h:
++
++btconfig.h:
++
++rate.h:
++
++httpencode.h:
++
++bencode.h:
++
++setnonblock.h:
++
++connect_nonb.h:
++
++btcontent.h:
++
++iplist.h:
++
++def.h:
++
++ctcs.h:
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/downloader.cpp ctorrent-1.3.4/downloader.cpp
+--- ctorrent-1.3.4.sav/downloader.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/downloader.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -21,21 +21,37 @@
+ #include "peerlist.h"
+ #include "tracker.h"
+ #include "btcontent.h"
++#include "ctcs.h"
++#include "btconfig.h"
++#include "bttime.h"
++
++time_t now = (time_t) 0;
+
+ void Downloader()
+ {
+ int nfds,maxfd,r;
+ struct timeval timeout;
+- time_t now;
fd_set rfd;
fd_set wfd;
+ int stopped = 0;
- for(;;){
-+ do{
- time(&now);
+- time(&now);
- if( BTCONTENT.SeedTimeout(&now) ) break;
-+ if( !stopped && BTCONTENT.SeedTimeout(&now) ) {
-+ Tracker.SetStoped();
-+ stopped = 1;
++ time(&now);
++ do{
++ if( !stopped &&
++ ( BTCONTENT.SeedTimeout(&now) ||
++ (( cfg_exit_zero_peers || Tracker.IsQuitting() ) &&
++ !WORLD.TotalPeers()) ) ){
++ Tracker.SetStoped();
++ stopped = 1;
++ if( arg_ctcs ) CTCS.Send_Status();
+ }
FD_ZERO(&rfd); FD_ZERO(&wfd);
maxfd = Tracker.IntervalCheck(&now,&rfd, &wfd);
-@@ -48,5 +52,5 @@
++ if( arg_ctcs ){
++ r = CTCS.IntervalCheck(&now,&rfd, &wfd);
++ if( r > maxfd ) maxfd = r;
++ }
+ r = WORLD.FillFDSET(&now,&rfd,&wfd);
+ if( r > maxfd ) maxfd = r;
+
+@@ -43,10 +59,13 @@
+ timeout.tv_usec = 0;
+
+ nfds = select(maxfd + 1,&rfd,&wfd,(fd_set*) 0,&timeout);
++ time(&now);
+
+- if(nfds > 0){
++ if(nfds > 0){
if(T_FREE != Tracker.GetStatus()) Tracker.SocketReady(&rfd,&wfd,&nfds);
- if( nfds ) WORLD.AnyPeerReady(&rfd,&wfd,&nfds);
- }
+- if( nfds ) WORLD.AnyPeerReady(&rfd,&wfd,&nfds);
+- }
- }/* end for(;;) */
-+ } while(Tracker.GetStatus() != T_FINISHED);
++ if(nfds > 0 && T_FREE != CTCS.GetStatus())
++ CTCS.SocketReady(&rfd,&wfd,&nfds);
++ if(nfds > 0) WORLD.AnyPeerReady(&rfd,&wfd,&nfds);
++ }
++ } while(Tracker.GetStatus() != T_FINISHED || Tracker.IsPaused());
}
-diff -u ctorrent-1.3.4.orig/httpencode.cpp ctorrent-1.3.4/httpencode.cpp
---- ctorrent-1.3.4.orig/httpencode.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/httpencode.cpp 2005-08-11 23:45:29.429693680 +0200
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/httpencode.cpp ctorrent-1.3.4/httpencode.cpp
+--- ctorrent-1.3.4.sav/httpencode.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/httpencode.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -1,6 +1,6 @@
++#include "./def.h"
+ #include <sys/types.h>
+
+-#include "./def.h"
+ #include "./httpencode.h"
+
+ #include <stdlib.h>
@@ -88,7 +88,7 @@
/* path */
@@ -636,26 +11396,66 @@ diff -u ctorrent-1.3.4.orig/httpencode.cpp ctorrent-1.3.4/httpencode.cpp
*path = '\0';
return 0;
}
-diff -u ctorrent-1.3.4.orig/httpencode.h ctorrent-1.3.4/httpencode.h
---- ctorrent-1.3.4.orig/httpencode.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/httpencode.h 2005-08-11 23:45:29.429693680 +0200
-@@ -2,8 +2,11 @@
+@@ -115,7 +115,7 @@
+ hlen = p - b;
+ *pd = ( p + addtion );
+ *dlen = n - hlen - addtion;
+- }else{ // Ö»ÓÐÊײ¿ÐÅÏ¢????
++ }else{ // Ö»ÓÐÊײ¿ÐÅÏ¢????
+ hlen = n;
+ *pd = (char*) 0;
+ *dlen = 0;
+@@ -131,8 +131,8 @@
+ for(; n && *b != ' ' && *b != '\n'; b++,n--) ;
+ if( !n || *b != ' ') r = -1;
+ else{
+- r = atoi(b);
+- if( r < 100 || r > 600 ) r = -1;
++ r = atoi(b);
++ if( r < 100 || r > 600 ) r = -1;
+ }
+ return r;
+ }
+@@ -160,11 +160,11 @@
+
+ if( r > header_len ){
+ if( strncasecmp(b, h, header_len) == 0){
+- /* header founded */
+- b += header_len;
+- for(; *b != '\n'; v++,b++) *v = *b;
+- *v = '\0';
+- return 0;
++ /* header founded */
++ b += header_len;
++ for(; *b != '\n'; v++,b++) *v = *b;
++ *v = '\0';
++ return 0;
+ }
+ }
+ b += r;
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/httpencode.h ctorrent-1.3.4/httpencode.h
+--- ctorrent-1.3.4.sav/httpencode.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/httpencode.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,9 +1,13 @@
+ #ifndef HTTPENCODE_H
#define HTTPENCODE_H
- #define REQ_URL_P1_FMT "GET %s?info_hash=%s&peer_id=%s&port=%d"
+-#define REQ_URL_P1_FMT "GET %s?info_hash=%s&peer_id=%s&port=%d"
-#define REQ_URL_P2_FMT "%s&uploaded=%d&downloaded=%d&left=%d&event=%s&compact=1 HTTP/1.0"
-#define REQ_URL_P3_FMT "%s&uploaded=%d&downloaded=%d&left=%d&compact=1 HTTP/1.0"
++#define REQ_URL_P1_FMT "GET %s?info_hash=%s&peer_id=%s&port=%d&key=%s"
++#define REQ_URL_P1A_FMT "GET %s&info_hash=%s&peer_id=%s&port=%d&key=%s"
+//#define REQ_URL_P2_FMT "%s&uploaded=%d&downloaded=%d&left=%d&event=%s&compact=1 HTTP/1.0"
+//#define REQ_URL_P3_FMT "%s&uploaded=%d&downloaded=%d&left=%d&compact=1 HTTP/1.0"
-+#define REQ_URL_P2_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&event=%s&numwant=%u HTTP/1.0"
-+#define REQ_URL_P3_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&numwant=%u HTTP/1.0"
++#define REQ_URL_P2_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&event=%s&numwant=%u&key=%s HTTP/1.0"
++#define REQ_URL_P3_FMT "%s&uploaded=%llu&downloaded=%llu&left=%llu&compact=1&numwant=%u&key=%s HTTP/1.0"
+
char* Http_url_encode(char *s,char *b,size_t n);
int Http_url_analyse(char *url,char *host,int *port,char *path);
-diff -u ctorrent-1.3.4.orig/iplist.cpp ctorrent-1.3.4/iplist.cpp
---- ctorrent-1.3.4.orig/iplist.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/iplist.cpp 2005-08-11 23:45:29.429693680 +0200
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/iplist.cpp ctorrent-1.3.4/iplist.cpp
+--- ctorrent-1.3.4.sav/iplist.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/iplist.cpp 2006-06-28 19:30:02.000000000 +0200
@@ -8,8 +8,8 @@
IPLIST *node = ipl_head;
for(; ipl_head;){
@@ -666,10 +11466,567 @@ diff -u ctorrent-1.3.4.orig/iplist.cpp ctorrent-1.3.4/iplist.cpp
}
count = 0;
}
-diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
---- ctorrent-1.3.4.orig/peer.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/peer.cpp 2005-08-11 23:45:29.431693376 +0200
-@@ -2,12 +2,34 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/Makefile.am ctorrent-1.3.4/Makefile.am
+--- ctorrent-1.3.4.sav/Makefile.am 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/Makefile.am 2006-06-28 19:30:02.000000000 +0200
+@@ -1,2 +1,2 @@
+ bin_PROGRAMS = ctorrent
+-ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h
++ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctcs.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp sha1.c bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h ctcs.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h sha1.h
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/Makefile.in ctorrent-1.3.4/Makefile.in
+--- ctorrent-1.3.4.sav/Makefile.in 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/Makefile.in 2006-06-28 19:30:02.000000000 +0200
+@@ -1,8 +1,8 @@
+-# Makefile.in generated by automake 1.7.6 from Makefile.am.
++# Makefile.in generated by automake 1.9.1 from Makefile.am.
+ # @configure_input@
+
+-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+-# Free Software Foundation, Inc.
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004 Free Software Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+@@ -14,6 +14,8 @@
+
+ @SET_MAKE@
+
++SOURCES = $(ctorrent_SOURCES)
++
+ srcdir = @srcdir@
+ top_srcdir = @top_srcdir@
+ VPATH = @srcdir@
+@@ -21,7 +23,6 @@
+ pkglibdir = $(libdir)/@PACKAGE@
+ pkgincludedir = $(includedir)/@PACKAGE@
+ top_builddir = .
+-
+ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+ INSTALL = @INSTALL@
+ install_sh_DATA = $(install_sh) -c -m 644
+@@ -35,6 +36,61 @@
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
++bin_PROGRAMS = ctorrent$(EXEEXT)
++subdir = .
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
++ depcomp install-sh missing mkinstalldirs
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno configure.status.lineno
++mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES =
++am__installdirs = "$(DESTDIR)$(bindir)"
++binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
++PROGRAMS = $(bin_PROGRAMS)
++am_ctorrent_OBJECTS = bencode.$(OBJEXT) bitfield.$(OBJEXT) \
++ btconfig.$(OBJEXT) btcontent.$(OBJEXT) btfiles.$(OBJEXT) \
++ btrequest.$(OBJEXT) btstream.$(OBJEXT) bufio.$(OBJEXT) \
++ connect_nonb.$(OBJEXT) ctcs.$(OBJEXT) ctorrent.$(OBJEXT) \
++ downloader.$(OBJEXT) httpencode.$(OBJEXT) iplist.$(OBJEXT) \
++ peer.$(OBJEXT) peerlist.$(OBJEXT) rate.$(OBJEXT) \
++ setnonblock.$(OBJEXT) sigint.$(OBJEXT) tracker.$(OBJEXT) \
++ sha1.$(OBJEXT)
++ctorrent_OBJECTS = $(am_ctorrent_OBJECTS)
++ctorrent_LDADD = $(LDADD)
++DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
++CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
++ -o $@
++SOURCES = $(ctorrent_SOURCES)
++DIST_SOURCES = $(ctorrent_SOURCES)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d $(distdir) \
++ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr $(distdir); }; }
++DIST_ARCHIVES = $(distdir).tar.gz
++GZIP_ENV = --best
++distuninstallcheck_listfiles = find . -type f -print
++distcleancheck_listfiles = find . -type f -print
+ ACLOCAL = @ACLOCAL@
+ AMDEP_FALSE = @AMDEP_FALSE@
+ AMDEP_TRUE = @AMDEP_TRUE@
+@@ -90,6 +146,8 @@
+ am__include = @am__include@
+ am__leading_dot = @am__leading_dot@
+ am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
+ bindir = @bindir@
+ build_alias = @build_alias@
+ datadir = @datadir@
+@@ -102,6 +160,7 @@
+ libexecdir = @libexecdir@
+ localstatedir = @localstatedir@
+ mandir = @mandir@
++mkdir_p = @mkdir_p@
+ oldincludedir = @oldincludedir@
+ prefix = @prefix@
+ program_transform_name = @program_transform_name@
+@@ -109,76 +168,44 @@
+ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+-bin_PROGRAMS = ctorrent
+-ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h
+-subdir = .
+-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+-CONFIG_HEADER = config.h
+-CONFIG_CLEAN_FILES =
+-bin_PROGRAMS = ctorrent$(EXEEXT)
+-PROGRAMS = $(bin_PROGRAMS)
+-
+-am_ctorrent_OBJECTS = bencode.$(OBJEXT) bitfield.$(OBJEXT) \
+- btconfig.$(OBJEXT) btcontent.$(OBJEXT) btfiles.$(OBJEXT) \
+- btrequest.$(OBJEXT) btstream.$(OBJEXT) bufio.$(OBJEXT) \
+- connect_nonb.$(OBJEXT) ctorrent.$(OBJEXT) downloader.$(OBJEXT) \
+- httpencode.$(OBJEXT) iplist.$(OBJEXT) peer.$(OBJEXT) \
+- peerlist.$(OBJEXT) rate.$(OBJEXT) setnonblock.$(OBJEXT) \
+- sigint.$(OBJEXT) tracker.$(OBJEXT)
+-ctorrent_OBJECTS = $(am_ctorrent_OBJECTS)
+-ctorrent_LDADD = $(LDADD)
+-ctorrent_DEPENDENCIES =
+-ctorrent_LDFLAGS =
+-
+-DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+-depcomp = $(SHELL) $(top_srcdir)/depcomp
+-am__depfiles_maybe = depfiles
+-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bencode.Po ./$(DEPDIR)/bitfield.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/btconfig.Po ./$(DEPDIR)/btcontent.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/btfiles.Po ./$(DEPDIR)/btrequest.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/btstream.Po ./$(DEPDIR)/bufio.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/connect_nonb.Po ./$(DEPDIR)/ctorrent.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/downloader.Po ./$(DEPDIR)/httpencode.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/iplist.Po ./$(DEPDIR)/peer.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/peerlist.Po ./$(DEPDIR)/rate.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/setnonblock.Po ./$(DEPDIR)/sigint.Po \
+-@AMDEP_TRUE@ ./$(DEPDIR)/tracker.Po
+-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+-CXXLD = $(CXX)
+-CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+- -o $@
+-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+-CCLD = $(CC)
+-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+-DIST_SOURCES = $(ctorrent_SOURCES)
+-DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
+- Makefile.in NEWS aclocal.m4 config.h.in configure configure.ac \
+- depcomp install-sh missing mkinstalldirs
+-SOURCES = $(ctorrent_SOURCES)
+-
++ctorrent_SOURCES = bencode.cpp bitfield.cpp btconfig.cpp btcontent.cpp btfiles.cpp btrequest.cpp btstream.cpp bufio.cpp connect_nonb.cpp ctcs.cpp ctorrent.cpp downloader.cpp httpencode.cpp iplist.cpp peer.cpp peerlist.cpp rate.cpp setnonblock.cpp sigint.cpp tracker.cpp sha1.c bencode.h bitfield.h btconfig.h btcontent.h btfiles.h btrequest.h btstream.h bufio.h connect_nonb.h ctcs.h def.h downloader.h httpencode.h iplist.h msgencode.h peer.h peerlist.h rate.h setnonblock.h sigint.h tracker.h sha1.h
+ all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+ .SUFFIXES:
+-.SUFFIXES: .cpp .o .obj
+-
+-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+- configure.lineno
+-$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
++.SUFFIXES: .c .cpp .o .obj
++am--refresh:
++ @:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
++ cd $(srcdir) && $(AUTOMAKE) --gnu \
++ && exit 0; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ echo ' $(SHELL) ./config.status'; \
++ $(SHELL) ./config.status;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ esac;
+
+-$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+-$(srcdir)/configure: $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+- cd $(srcdir) && $(AUTOCONF)
+
+-$(ACLOCAL_M4): configure.ac
++$(top_srcdir)/configure: $(am__configure_deps)
++ cd $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+ config.h: stamp-h1
+@@ -190,24 +217,23 @@
+ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+-
+-$(srcdir)/config.h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4)
++$(srcdir)/config.h.in: $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+- touch $(srcdir)/config.h.in
++ rm -f stamp-h1
++ touch $@
+
+ distclean-hdr:
+ -rm -f config.h stamp-h1
+-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+- $(mkinstalldirs) $(DESTDIR)$(bindir)
++ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
++ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
++ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+@@ -215,8 +241,8 @@
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+- echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+- rm -f $(DESTDIR)$(bindir)/$$f; \
++ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
++ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+ clean-binPROGRAMS:
+@@ -226,7 +252,7 @@
+ $(CXXLINK) $(ctorrent_LDFLAGS) $(ctorrent_OBJECTS) $(ctorrent_LDADD) $(LIBS)
+
+ mostlyclean-compile:
+- -rm -f *.$(OBJEXT) core *.core
++ -rm -f *.$(OBJEXT)
+
+ distclean-compile:
+ -rm -f *.tab.c
+@@ -240,6 +266,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btstream.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bufio.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect_nonb.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctcs.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctorrent.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/downloader.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httpencode.Po@am__quote@
+@@ -248,43 +275,39 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peerlist.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rate.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setnonblock.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigint.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tracker.Po@am__quote@
+
+-distclean-depend:
+- -rm -rf ./$(DEPDIR)
++.c.o:
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c $<
++
++.c.obj:
++@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ .cpp.o:
+-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+-@am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+-@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+-@am__fastdepCXX_TRUE@ fi
++@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
++@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+ .cpp.obj:
+-@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+-@am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+-@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+-@am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+-@am__fastdepCXX_TRUE@ fi
++@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
++@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+-@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+ uninstall-info-am:
+
+-ETAGS = etags
+-ETAGSFLAGS =
+-
+-CTAGS = ctags
+-CTAGSFLAGS =
+-
+-tags: TAGS
+-
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+@@ -293,6 +316,7 @@
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
++tags: TAGS
+
+ TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+@@ -304,10 +328,11 @@
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+- test -z "$(ETAGS_ARGS)$$tags$$unique" \
+- || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+- $$tags $$unique
+-
++ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$tags $$unique; \
++ fi
+ ctags: CTAGS
+ CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+@@ -330,19 +355,6 @@
+
+ distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+-
+-top_distdir = .
+-distdir = $(PACKAGE)-$(VERSION)
+-
+-am__remove_distdir = \
+- { test ! -d $(distdir) \
+- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+- && rm -fr $(distdir); }; }
+-
+-GZIP_ENV = --best
+-distuninstallcheck_listfiles = find . -type f -print
+-distcleancheck_listfiles = find . -type f -print
+
+ distdir: $(DISTFILES)
+ $(am__remove_distdir)
+@@ -358,7 +370,7 @@
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+- $(mkinstalldirs) "$(distdir)$$dir"; \
++ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+@@ -379,19 +391,46 @@
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+ dist-gzip: distdir
+- $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ $(am__remove_distdir)
++
++dist-bzip2: distdir
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++dist-tarZ: distdir
++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
++ $(am__remove_distdir)
++
++dist-shar: distdir
++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
++ $(am__remove_distdir)
++
++dist-zip: distdir
++ -rm -f $(distdir).zip
++ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+ dist dist-all: distdir
+- $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+ # This target untars the dist file and tries a VPATH configuration. Then
+ # it guarantees that the distribution is self-contained by making another
+ # tarfile.
+ distcheck: dist
+- $(am__remove_distdir)
+- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
++ case '$(DIST_ARCHIVES)' in \
++ *.tar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ *.tar.bz2*) \
++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ *.tar.Z*) \
++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
++ *.shar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ *.zip*) \
++ unzip $(distdir).zip ;;\
++ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+@@ -411,19 +450,20 @@
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+- (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+- && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
+- && rm -f $(distdir).tar.gz \
++ && $(MAKE) $(AM_MAKEFLAGS) dist \
++ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+- @echo "$(distdir).tar.gz is ready for distribution" | \
+- sed 'h;s/./=/g;p;x;p;x'
++ @(echo "$(distdir) archives ready for distribution: "; \
++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
++ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+ distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+@@ -445,9 +485,10 @@
+ check-am: all-am
+ check: check-am
+ all-am: Makefile $(PROGRAMS) config.h
+-
+ installdirs:
+- $(mkinstalldirs) $(DESTDIR)$(bindir)
++ for dir in "$(DESTDIR)$(bindir)"; do \
++ test -z "$$dir" || $(mkdir_p) "$$dir"; \
++ done
+ install: install-am
+ install-exec: install-exec-am
+ install-data: install-data-am
+@@ -459,7 +500,7 @@
+ installcheck: installcheck-am
+ install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+- INSTALL_STRIP_FLAG=-s \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ mostlyclean-generic:
+@@ -467,7 +508,7 @@
+ clean-generic:
+
+ distclean-generic:
+- -rm -f Makefile $(CONFIG_CLEAN_FILES)
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+ maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+@@ -478,13 +519,17 @@
+
+ distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+-distclean-am: clean-am distclean-compile distclean-depend \
+- distclean-generic distclean-hdr distclean-tags
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++ distclean-hdr distclean-tags
+
+ dvi: dvi-am
+
+ dvi-am:
+
++html: html-am
++
+ info: info-am
+
+ info-am:
+@@ -502,6 +547,8 @@
+ maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
+ maintainer-clean-am: distclean-am maintainer-clean-generic
+
+ mostlyclean: mostlyclean-am
+@@ -518,11 +565,12 @@
+
+ uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+- clean-generic ctags dist dist-all dist-gzip distcheck distclean \
+- distclean-compile distclean-depend distclean-generic \
+- distclean-hdr distclean-tags distcleancheck distdir \
+- distuninstallcheck dvi dvi-am info info-am install install-am \
++.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
++ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \
++ dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
++ distclean-compile distclean-generic distclean-hdr \
++ distclean-tags distcleancheck distdir distuninstallcheck dvi \
++ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peer.cpp ctorrent-1.3.4/peer.cpp
+--- ctorrent-1.3.4.sav/peer.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/peer.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -2,14 +2,74 @@
#include <stdlib.h>
#include <string.h>
@@ -680,6 +12037,7 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
#include "./msgencode.h"
#include "./peerlist.h"
#include "./btconfig.h"
++#include "bttime.h"
+size_t get_nl(char *sfrom)
+{
@@ -701,10 +12059,58 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ *to = from & 0xff;
+}
+
++// Convert a peer ID to a printable string.
++int TextPeerID(unsigned char *peerid, char *txtid)
++{
++ int i, j;
++
++ for(i=j=0; i < PEER_ID_LEN; i++){
++ if( i==j && isprint(peerid[i]) && !isspace(peerid[i]) )
++ txtid[j++] = peerid[i];
++ else{
++ if(i==j){ sprintf(txtid+j, "0x"); j+=2; }
++ snprintf(txtid+j, 3, "%.2X", (int)(peerid[i]));
++ j += 2;
++ }
++ }
++ txtid[j] = '\0';
++
++ return 0;
++}
++
++
++/* g_next_up is used to rotate uploading. If we have the opportunity to
++ upload to a peer but skip it due to bw limiting, the var is set to point to
++ that peer and it will be given priority at the next opportunity.
++ g_next_dn is similar, but for downloading.
++ g_defer_up/dn is used to let the g_next peer object know if it skipped.
++*/
++btPeer *g_next_up = (btPeer *)0;
++btPeer *g_next_dn = (btPeer *)0;
++unsigned char g_defer_up = 0;
++unsigned char g_defer_dn = 0;
btBasic Self;
++void btBasic::SetCurrentRates()
++{
++ m_current_dl = rate_dl.RateMeasure();
++ m_current_ul = rate_ul.RateMeasure();
++ m_use_current = 1;
++}
++
void btBasic::SetIp(struct sockaddr_in addr)
-@@ -44,11 +66,13 @@
+ {
+ memcpy(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr));
+@@ -24,7 +84,7 @@
+ {
+ // fprintf(stdout,"IpEquiv: %s <=> ", inet_ntoa(m_sin.sin_addr));
+ // fprintf(stdout,"%s\n", inet_ntoa(addr.sin_addr));
+- return (memcmp(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr)) == 0) ?
++ return (memcmp(&m_sin.sin_addr,&addr.sin_addr,sizeof(struct in_addr)) == 0) ?
+ 1 : 0;
+ }
+
+@@ -44,11 +104,13 @@
int btPeer::Need_Remote_Data()
{
@@ -718,28 +12124,44 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
return tmpBitfield.IsEmpty() ? 0 : 1;
}
return 0;
-@@ -65,6 +89,7 @@
+@@ -59,12 +121,19 @@
+ m_f_keepalive = 0;
+ m_status = P_CONNECTING;
+ m_unchoke_timestamp = (time_t) 0;
+- time(&m_last_timestamp);
++ m_last_timestamp = now;
+ m_state.remote_choked = m_state.local_choked = 1;
+ m_state.remote_interested = m_state.local_interested = 0;
m_err_count = 0;
m_cached_idx = BTCONTENT.GetNPieces();
+ m_standby = 0;
++ m_req_send = 5;
++ m_req_out = 0;
++ m_latency = 0;
++ m_prev_dlrate = 0;
++ m_health_time = m_receive_time = m_choketime = m_last_timestamp;
++ m_bad_health = 0;
}
int btPeer::SetLocal(unsigned char s)
-@@ -72,20 +97,30 @@
+@@ -72,21 +141,37 @@
switch(s){
case M_CHOKE:
if( m_state.local_choked ) return 0;
-+ time(&m_unchoke_timestamp);
++ m_unchoke_timestamp = now;
+// if(arg_verbose) fprintf(stderr, "Choking %p\n", this);
+ if(arg_verbose) fprintf(stderr, "Choking %p (D=%lluMB@%uK/s)\n", this,
+ TotalDL() >> 20, RateDL() >> 10);
m_state.local_choked = 1;
++ if( g_next_up == this ) g_next_up = (btPeer *)0;
++ if( !reponse_q.IsEmpty()) reponse_q.Empty();
break;
case M_UNCHOKE:
if( !reponse_q.IsEmpty() ) StartULTimer();
if( !m_state.local_choked ) return 0;
- time(&m_unchoke_timestamp);
+- time(&m_unchoke_timestamp);
++ m_unchoke_timestamp = now;
+// if(arg_verbose) fprintf(stderr, "Unchoking %p\n", this);
+ if(arg_verbose) fprintf(stderr, "Unchoking %p (D=%lluMB@%uK/s)\n", this,
+ TotalDL() >> 20, RateDL() >> 10);
@@ -755,17 +12177,35 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
if( !m_state.local_interested ) return 0;
+ if(arg_verbose) fprintf(stderr, "Not interested in %p\n", this);
m_state.local_interested = 0;
++ if( !request_q.IsEmpty() ){
++ CancelRequest(request_q.GetHead());
++ request_q.Empty();
++ }
break;
default:
-@@ -97,12 +132,15 @@
+ return -1; // BUG ???
+@@ -97,103 +182,195 @@
int btPeer::RequestPiece()
{
size_t idx;
+ int endgame = 0;
- PENDINGQUEUE.ReAssign(&request_q,bitfield);
+- PENDINGQUEUE.ReAssign(&request_q,bitfield);
++ size_t qsize = request_q.Qsize();
++ size_t psize = BTCONTENT.GetPieceLength() / cfg_req_slice_size;
- if( !request_q.IsEmpty() ) return SendRequest();
+- if( !request_q.IsEmpty() ) return SendRequest();
++ // See if there's room in the queue for a new piece.
++ // Also, don't queue another piece if we still have a full piece queued.
++ if( cfg_req_queue_length - qsize < psize || qsize >= psize ){
++ m_req_send = m_req_out; // don't come back until you receive something.
++ return 0;
++ }
++
++ if( PENDINGQUEUE.ReAssign(&request_q,bitfield) ){
++ if(arg_verbose) fprintf(stderr, "Assigning to %p from Pending\n", this);
++ return SendRequest();
++ }
- if( m_cached_idx < BTCONTENT.GetNPieces() ){
+ if( m_cached_idx < BTCONTENT.GetNPieces() && !BTCONTENT.pBF->IsEmpty() ){
@@ -774,8 +12214,11 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
idx = m_cached_idx;
m_cached_idx = BTCONTENT.GetNPieces();
if( !BTCONTENT.pBF->IsSet(idx) &&
-@@ -110,39 +148,72 @@
- !WORLD.AlreadyRequested(idx) ){
+- !PENDINGQUEUE.Exist(idx) &&
+- !WORLD.AlreadyRequested(idx) ){
++ !PENDINGQUEUE.Exist(idx) &&
++ !WORLD.AlreadyRequested(idx) ){
++ if(arg_verbose) fprintf(stderr, "Assigning #%u to %p\n", idx, this);
return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest();
}
- }else{
@@ -783,12 +12226,18 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ if( BTCONTENT.pBF->IsEmpty() ){
+ // If we don't have a complete piece yet, try to get one that's already
+ // in progress. (Initial-piece mode)
-+ btPeer *peer = WORLD.Who_Can_Duplicate(this, BTCONTENT.GetNPieces());
-+ if(peer){
-+ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n",
-+ peer, this, peer->request_q.GetRequestIdx() );
-+ return (request_q.CopyShuffle(peer->request_q) < 0) ? -1 : SendRequest();
-+ }
++ BitField tmpBitField = bitfield;
++ idx = WORLD.What_Can_Duplicate(tmpBitField, this, BTCONTENT.GetNPieces());
++ if( idx < BTCONTENT.GetNPieces() ){
++ if(arg_verbose) fprintf(stderr, "Want to dup #%u to %p\n", idx, this);
++ btPeer *peer = WORLD.WhoHas(idx);
++ if(peer){
++ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n",
++ peer, this, idx );
++ return (request_q.CopyShuffle(&peer->request_q, idx) < 0) ?
++ -1 : SendRequest();
++ }
++ }else if(arg_verbose) fprintf(stderr, "Nothing to dup to %p\n", this);
+ } // Doesn't have a piece that's already in progress--choose another.
BitField tmpBitField;
if( bitfield.IsFull() ){
@@ -825,41 +12274,58 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ // [tmpBitField2]... that we haven't requested from anyone.
+ if(tmpBitField2.IsEmpty()){
+ // Everything this peer has that I want, I've already requested.
-+ endgame = ( WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() )
-+ < WORLD.TotalPeers();
++ if( arg_file_to_download ){
++ BitField afdBitField = *BTCONTENT.pBF;
++ afdBitField.Except(*BTCONTENT.pBFilter);
++ endgame = ( BTCONTENT.getFilePieces(arg_file_to_download)
++ - afdBitField.Count() ) < WORLD.TotalPeers();
++ }else
++ endgame = ( WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() )
++ < WORLD.TotalPeers();
+ if(endgame){ // OK to duplicate a request.
-+// idx = tmpBitField.Random();
-+ idx = 0; // flag for Who_Can_Duplicate()
-+ btPeer *peer = WORLD.Who_Can_Duplicate(this, idx);
-+ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n",
-+ peer, this, peer->request_q.GetRequestIdx() );
-+ return (request_q.CopyShuffle(peer->request_q) < 0) ?
-+ -1 : SendRequest();
++// idx = tmpBitField.Random();
++ idx = 0; // flag for Who_Can_Duplicate()
++ BitField tmpBitField3 = tmpBitField2;
++ idx = WORLD.What_Can_Duplicate(tmpBitField3, this, idx);
++ if( idx < BTCONTENT.GetNPieces() ){
++ if(arg_verbose) fprintf(stderr,"Want to dup #%u to %p\n",idx,this);
++ btPeer *peer = WORLD.WhoHas(idx);
++ if(peer){
++ if(arg_verbose) fprintf( stderr, "Duping: %p to %p (#%u)\n",
++ peer, this, idx );
++ return (request_q.CopyShuffle(&peer->request_q, idx) < 0) ?
++ -1 : SendRequest();
++ }
++ }else if(arg_verbose) fprintf(stderr, "Nothing to dup to %p\n",this);
+ }else{ // not endgame mode
-+ btPeer *peer = WORLD.Who_Can_Abandon(this); // slowest choice
-+ if(peer){
-+ // Cancel a request to the slowest peer & request it from this one.
-+ if(arg_verbose) fprintf( stderr, "Reassigning %p to %p (#%u)\n",
-+ peer, this, peer->request_q.GetRequestIdx() );
-+ peer->StopDLTimer();
-+ // RequestQueue class "moves" rather than "copies" in assignment!
-+ request_q = peer->request_q;
-+
-+ if(peer->CancelRequest(request_q.GetHead()) < 0 ||
-+ peer->RequestCheck() < 0){
-+ peer->CloseConnection();
-+ }
-+ return SendRequest();
-+ }else m_standby = 1; // nothing to do at the moment
++ btPeer *peer = WORLD.Who_Can_Abandon(this); // slowest choice
++ if(peer){
++ // Cancel a request to the slowest peer & request it from this one.
++ if(arg_verbose) fprintf( stderr, "Reassigning %p to %p (#%u)\n",
++ peer, this, peer->request_q.GetRequestIdx() );
++ // RequestQueue class "moves" rather than "copies" in assignment!
++ if( request_q.Copy(&peer->request_q) < 0 ) return -1;
++ if(peer->CancelPiece() < 0 || peer->RequestCheck() < 0)
++ peer->CloseConnection();
++ return SendRequest();
++ }else{
++ if(arg_verbose) fprintf(stderr, "%p standby\n", this);
++ m_standby = 1; // nothing to do at the moment
++ }
+ }
}else{
- idx = tmpBitField.Random();
- return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest();
+ // Request something that we haven't requested yet (most common case).
-+ idx = tmpBitField2.Random();
++ // Try to make it something that has good trade value.
++ BitField tmpBitField3 = tmpBitField2;
++ WORLD.FindValuedPieces(tmpBitField3, this, BTCONTENT.pBF->IsEmpty());
++ if( tmpBitField3.IsEmpty() ) tmpBitField3 = tmpBitField2;
++ idx = tmpBitField3.Random();
++ if(arg_verbose) fprintf(stderr, "Assigning #%u to %p\n", idx, this);
+ return (request_q.CreateWithIdx(idx) < 0) ? -1 : SendRequest();
}
-+ } else {
++ }else{
+ // We don't need anything from the peer. How'd we get here?
+ return SetLocal(M_NOT_INTERESTED);
}
@@ -867,7 +12333,10 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
return 0;
}
-@@ -152,37 +223,46 @@
+ int btPeer::MsgDeliver()
+ {
+ size_t r,idx,off,len;
++ int retval = 0;
char *msgbuf = stream.in_buffer.BasePointer();
@@ -875,7 +12344,7 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ r = get_nl(msgbuf);
+ // Don't require keepalives if we're receiving other messages.
-+ time(&m_last_timestamp);
++ m_last_timestamp = now;
if( 0 == r ){
- time(&m_last_timestamp);
if( !m_f_keepalive ) if( stream.Send_Keepalive() < 0 ) return -1;
@@ -887,24 +12356,38 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
case M_CHOKE:
if(H_BASE_LEN != r){ return -1;}
+ if(arg_verbose) fprintf(stderr, "%p choked me\n", this);
++ if( m_lastmsg == M_UNCHOKE && m_last_timestamp <= m_choketime+1 ){
++ m_err_count+=2;
++ if(arg_verbose) fprintf(stderr,"err: %p (%d) Choke oscillation\n",
++ this, m_err_count);
++ }
++ m_choketime = m_last_timestamp;
m_state.remote_choked = 1;
StopDLTimer();
++ if( g_next_dn == this ) g_next_dn = (btPeer *)0;
if( !request_q.IsEmpty()){
- PSLICE ps = request_q.GetHead();
+- PSLICE ps = request_q.GetHead();
- PENDINGQUEUE.Pending(&request_q);
-+ if( !PENDINGQUEUE.Exist(request_q.GetRequestIdx()) )
-+ PENDINGQUEUE.Pending(&request_q);
- if( CancelRequest(ps) < 0) return -1;
+- if( CancelRequest(ps) < 0) return -1;
++ m_req_out = 0;
++ PENDINGQUEUE.Pending(&request_q);
}
- return 0;
+- return 0;
++ break;
+
case M_UNCHOKE:
if(H_BASE_LEN != r){return -1;}
+ if(arg_verbose) fprintf(stderr, "%p unchoked me\n", this);
++ if( m_lastmsg == M_CHOKE && m_last_timestamp <= m_choketime+1 ){
++ m_err_count+=2;
++ if(arg_verbose) fprintf(stderr,"err: %p (%d) Choke oscillation\n",
++ this, m_err_count);
++ }
++ m_choketime = m_last_timestamp;
m_state.remote_choked = 0;
-+ if(!request_q.IsEmpty()) // shouldn't happen; maybe peer is confused.
-+ return SendRequest();
- return RequestCheck();
+- return RequestCheck();
++ retval = RequestCheck();
++ break;
case M_INTERESTED:
if(H_BASE_LEN != r){return -1;}
@@ -918,10 +12401,11 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
m_state.remote_interested = 0;
StopULTimer();
-@@ -190,10 +270,11 @@
+
/* remove peer's reponse queue */
if( !reponse_q.IsEmpty()) reponse_q.Empty();
- return 0;
+- return 0;
++ break;
+
case M_HAVE:
if(H_HAVE_LEN != r){return -1;}
@@ -931,20 +12415,22 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
if( idx >= BTCONTENT.GetNPieces() || bitfield.IsSet(idx)) return -1;
-@@ -201,19 +282,24 @@
+@@ -201,54 +378,90 @@
if( bitfield.IsFull() && BTCONTENT.pBF->IsFull() ){ return -2; }
- if( !BTCONTENT.pBF->IsSet(idx) ) m_cached_idx = idx;
+ if( !BTCONTENT.pBF->IsSet(idx) && !BTCONTENT.pBFilter->IsSet(idx) ){
+ m_cached_idx = idx;
++ if(arg_verbose && m_standby) fprintf(stderr, "%p un-standby\n", this);
+ m_standby = 0;
+ }
+ // if( !BTCONTENT.pBF->IsSet(idx) ) m_cached_idx = idx;
- return ( !m_state.remote_choked && request_q.IsEmpty() ) ? RequestCheck() : 0;
+ // see if we're Interested now
-+ return request_q.IsEmpty() ? RequestCheck() : 0;
++ if(!m_standby) retval = RequestCheck();
++ break;
case M_REQUEST:
if(H_REQUEST_LEN != r || !m_state.remote_interested){ return -1; }
@@ -960,24 +12446,49 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ len = get_nl(msgbuf + 13);
if( !reponse_q.IsValidRequest(idx, off, len) ) return -1;
-
-@@ -222,6 +308,8 @@
+-
+- return reponse_q.Add(idx, off, len);
++
++ if( m_state.local_choked ){
++ if( (m_latency && m_last_timestamp - m_unchoke_timestamp > m_latency) ||
++ (!m_latency && m_last_timestamp - m_unchoke_timestamp > 60) ){
++ m_err_count++;
++ if(arg_verbose) fprintf(stderr,"err: %p (%d) choked request\n",
++ this, m_err_count);
++ if( stream.Send_State(M_CHOKE) < 0 ) return -1;
++ // This will mess with the unchoke rotation (to this peer's
++ // disadvantage), but otherwise we may spam them with choke msgs.
++ m_unchoke_timestamp = m_last_timestamp;
++ }
++ }else retval = reponse_q.Add(idx, off, len);
++ break;
+
case M_PIECE:
++ m_receive_time = m_last_timestamp;
if( request_q.IsEmpty() || !m_state.local_interested){
- m_err_count++;
-+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Unwanted piece\n",
-+ this, m_err_count);
- return 0;
- }
- return PieceDeliver(r);
-@@ -230,22 +318,28 @@
+- m_err_count++;
+- return 0;
+- }
+- return PieceDeliver(r);
++ m_err_count++;
++ if(arg_verbose) fprintf(stderr,"err: %p (%d) Unwanted piece\n",
++ this, m_err_count);
++ }else retval = PieceDeliver(r);
++ break;
+
+ case M_BITFIELD:
if( (r - 1) != bitfield.NBytes() || !bitfield.IsEmpty()) return -1;
bitfield.SetReferBuffer(msgbuf + 5);
- if(bitfield.IsFull() && BTCONTENT.pBF->IsFull()) return -2;
+- if(bitfield.IsFull() && BTCONTENT.pBF->IsFull()) return -2;
- return 0;
++ if(bitfield.IsFull()){
++ if(arg_verbose) fprintf(stderr, "%p is a seed\n", this);
++ if(BTCONTENT.pBF->IsFull()) return -2;
++ }
+
+ //This is needed in order to set our Interested state
-+ return RequestCheck(); // fixed client stall
++ retval = RequestCheck(); // fixed client stall
++ break;
case M_CANCEL:
if(r != H_CANCEL_LEN || !m_state.remote_interested) return -1;
@@ -989,59 +12500,168 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ off = get_nl(msgbuf + 9);
+ len = get_nl(msgbuf + 13);
if( reponse_q.Remove(idx,off,len) < 0 ){
- m_err_count++;
-+ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad cancel\n",
-+ this, m_err_count);
- return 0;
+- m_err_count++;
+- return 0;
++ m_err_count++;
++ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad cancel\n",
++ this, m_err_count);
++ }else{
++ if( reponse_q.IsEmpty() ) StopULTimer();
++ if( reponse_q.IsEmpty() || !CouldReponseSlice() ){
++ if( g_next_up == this ) g_next_up = (btPeer *)0;
++ }
}
- if( reponse_q.IsEmpty() ) StopULTimer();
- return 0;
+- if( reponse_q.IsEmpty() ) StopULTimer();
+- return 0;
++ break;
++
default:
- return -1; // unknow message type
+- }
+ if(arg_verbose) fprintf(stderr, "Unknown message type %u from peer %p\n",
+ msgbuf[4], this);
-+ return 0; // ignore unknown message & continue (forward compatibility)
- }
++ } // switch
++
++ if( retval >= 0 ) m_lastmsg = msgbuf[4];
}
- return 0;
-@@ -279,8 +373,13 @@
+- return 0;
++ return retval;
+ }
+
+ int btPeer::ReponseSlice()
+@@ -270,6 +483,8 @@
+
+ Self.DataSended(len);
+ DataSended(len);
++ if(arg_verbose) fprintf(stderr, "Sending %d/%d/%d to %p\n",
++ (int)idx, (int)off, (int)len, this);
+ return stream.Send_Piece(idx,off,BTCONTENT.global_piece_buffer,len);
+ }
+
+@@ -278,32 +493,153 @@
+
int btPeer::SendRequest()
{
++ int first = 1;
++ PSLICE ps = request_q.NextSend();
++
++ if( m_req_out > cfg_req_queue_length ){
++ if(arg_verbose)
++ fprintf(stderr, "ERROR@5: %p m_req_out underflow, resetting\n", this);
++ m_req_out = 0;
++ }
++ if( ps && m_req_out < m_req_send ){
++ if(arg_verbose)
++ fprintf(stderr, "Requesting #%u from %p (%d left, %d slots):",
++ ps->index, this, request_q.Qsize(), m_req_send);
++ for( int i=0; ps && m_req_out < m_req_send && i<5; ps = ps->next, i++ ){
++ if( first && (!RateDL() ||
++ 0 >= (m_req_out+1) * ps->length / (double)RateDL() - m_latency) ){
++ request_q.SetReqTime(ps, now);
++ first = 0;
++ } else request_q.SetReqTime(ps, (time_t)0);
++ if(arg_verbose) fprintf(stderr, ".");
++ if(stream.Send_Request(ps->index,ps->offset,ps->length) < 0){ return -1; }
++ request_q.SetNextSend(ps->next);
++ m_req_out++;
++ }
++ if(arg_verbose) fprintf(stderr, "\n");
++ m_receive_time = now;
++ }
++ return ( m_req_out < m_req_send ) ? RequestPiece() : 0;
++}
++
++int btPeer::CancelPiece()
++{
PSLICE ps = request_q.GetHead();
- for( ; ps ; ps = ps->next )
-+ if(arg_verbose) fprintf(stderr, "Requesting #%u from %p:",
-+ request_q.GetRequestIdx(), this);
-+ for( ; ps ; ps = ps->next ){
-+ if(arg_verbose) fprintf(stderr, ".");
- if(stream.Send_Request(ps->index,ps->offset,ps->length) < 0){ return -1; }
+- if(stream.Send_Request(ps->index,ps->offset,ps->length) < 0){ return -1; }
++ size_t idx;
++ int cancel = 1;
++ int retval;
++
++ idx = ps->index;
++ for( ; ps; ps = ps->next){
++ if( ps->index != idx ) break;
++ if( ps == request_q.NextSend() ) cancel = 0;
++ if( cancel ){
++ if(stream.Send_Cancel(ps->index,ps->offset,ps->length) < 0)
++ return -1;
++ m_req_out--;
++ if( m_req_out > cfg_req_queue_length ){
++ if(arg_verbose)
++ fprintf(stderr, "ERROR@1: %p m_req_out underflow, resetting\n", this);
++ m_req_out = 0;
++ }
++ }
++ request_q.Remove(ps->index, ps->offset, ps->length);
+ }
-+ if(arg_verbose) fprintf(stderr, "\n");
++ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0;
- return stream.Flush();
- }
-@@ -294,16 +393,56 @@
- return stream.Flush();
+- return stream.Flush();
++ return 0;
}
+ int btPeer::CancelRequest(PSLICE ps)
+ {
++ int retval;
++
+ for( ; ps; ps = ps->next){
++ if( ps == request_q.NextSend() ) break;
+ if(stream.Send_Cancel(ps->index,ps->offset,ps->length) < 0)
+ return -1;
++ m_req_out--;
++ if( m_req_out > cfg_req_queue_length ){
++ if(arg_verbose)
++ fprintf(stderr, "ERROR@2: %p m_req_out underflow, resetting\n", this);
++ m_req_out = 0;
++ }
+ }
+- return stream.Flush();
++ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0;
++
++ return 0;
++}
++
+int btPeer::CancelSliceRequest(size_t idx, size_t off, size_t len)
+{
+ PSLICE ps;
++ int cancel = 1;
++ int idxfound = 0;
++ int retval;
+
+ for(ps = request_q.GetHead() ; ps; ps = ps->next){
-+ if( idx == ps->index && off == ps->offset && len == ps->length ){
-+ if( request_q.Remove(idx,off,len) < 0 ){
-+ m_err_count++;
-+ if(arg_verbose) fprintf(stderr,"err: %p (%d) Bad CS remove\n",
-+ this, m_err_count);
++ if( ps == request_q.NextSend() ) cancel = 0;
++ if( idx == ps->index ){
++ if( off == ps->offset && len == ps->length ){
++ if( request_q.Remove(idx,off,len) < 0 ){
++ m_err_count++;
++ if(arg_verbose) fprintf(stderr,"err: %p (%d) Bad CS remove\n",
++ this, m_err_count);
++ }
++ if(cancel){
++ if(stream.Send_Cancel(idx,off,len) < 0)
++ return -1;
++ m_req_out--;
++ if( m_req_out > cfg_req_queue_length ){
++ if(arg_verbose) fprintf(stderr,
++ "ERROR@3: %p m_req_out underflow, resetting\n", this);
++ m_req_out = 0;
++ }
++ if( !m_req_out && g_next_dn == this ) g_next_dn = (btPeer *)0;
++
++ // Don't call RequestCheck() here since that could cause the slice
++ // we're cancelling to be dup'd from another peer.
++ return 0;
++ }
++ break;
+ }
-+ if(stream.Send_Cancel(idx,off,len) < 0)
-+ return -1;
-+ return stream.Flush();
-+ }
++ idxfound = 1;
++ }else if( idxfound ) break;
+ }
+ return 0;
-+}
-+
+ }
+
int btPeer::ReportComplete(size_t idx)
{
if( BTCONTENT.APieceComplete(idx) ){
@@ -1077,9 +12697,12 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
return (P_FAILED == m_status) ? -1 : RequestCheck();
}
-@@ -312,12 +451,14 @@
+@@ -311,17 +647,37 @@
+ {
size_t idx,off,len;
char *msgbuf = stream.in_buffer.BasePointer();
++ time_t t;
++ int dup = 0, requested = 1;
- idx = ntohl(*(size_t*) (msgbuf + 5));
- off = ntohl(*(size_t*) (msgbuf + 9));
@@ -1087,6 +12710,21 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ off = get_nl(msgbuf + 9);
len = mlen - 9;
++ if(arg_verbose) fprintf(stderr, "Receiving piece %d/%d/%d from %p\n",
++ (int)idx, (int)off, (int)len, this);
++
++ t = request_q.GetReqTime(idx,off,len);
++
++ PSLICE ps = request_q.GetHead();
++ if( request_q.NextSend() )
++ for( ; ps; ps = ps->next){
++ if( ps == request_q.NextSend() ){
++ requested = 0;
++ break;
++ }
++ if( idx==ps->index && off==ps->offset && len==ps->length ) break;
++ }
++
if( request_q.Remove(idx,off,len) < 0 ){
m_err_count++;
+ if(arg_verbose) fprintf(stderr, "err: %p (%d) Bad remove\n",
@@ -1094,40 +12732,100 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
return 0;
}
-@@ -329,13 +470,21 @@
+ if(BTCONTENT.WriteSlice((char*)(msgbuf + 13),idx,off,len) < 0){
++ fprintf(stderr, "warn, WriteSlice failed; is filesystem full?\n");
+ return 0;
+ }
+
+@@ -329,48 +685,172 @@
Self.DataRecved(len);
DataRecved(len);
+ // Check for & cancel requests for this slice from other peers in initial
+ // and endgame modes.
+ if( BTCONTENT.pBF->Count() < 2 ||
-+ WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() < WORLD.TotalPeers() ){
++ WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() < WORLD.TotalPeers() )
++ dup = 1;
++ else if( arg_file_to_download ){
++ BitField afdBitField = *BTCONTENT.pBF;
++ afdBitField.Except(*BTCONTENT.pBFilter);
++ if( BTCONTENT.getFilePieces(arg_file_to_download) - afdBitField.Count()
++ < WORLD.TotalPeers() )
++ dup = 1;
++ }
++ if( dup ){
+ WORLD.CancelSlice(idx, off, len);
+ PENDINGQUEUE.DeleteSlice(idx, off, len);
+ }
+
++ // Determine how many outstanding requests we should maintain, roughly:
++ // (request turnaround latency) / (time to transmit one slice)
++ if(t){
++ m_latency = (m_last_timestamp <= t) ? 1 : m_last_timestamp - t;
++ if(arg_verbose) fprintf(stderr, "%p latency is %d sec\n",
++ this, (int)m_latency);
++ m_latency_timestamp = m_last_timestamp;
++ }
++
++ if( RateDL() > len/20 ){
++ m_req_send = (int)( m_latency / (len / (double)RateDL()) + 1 );
++ m_req_send = (m_req_send < 2) ? 2 : m_req_send;
++
++ // If latency increases, we will see this as a dlrate decrease.
++ if( RateDL() < m_prev_dlrate ) m_req_send++;
++ else if( m_last_timestamp - m_latency_timestamp >= 30 &&
++ // Try to force latency measurement every 30 seconds.
++ m_req_out == m_req_send - 1 ){
++ m_req_send--;
++ m_latency_timestamp = m_last_timestamp;
++ }
++ m_prev_dlrate = RateDL();
++ }else if (m_req_send < 5) m_req_send = 5;
++
++ if( requested ) m_req_out--;
++
/* if piece download complete. */
- return request_q.IsEmpty() ? ReportComplete(idx) : 0;
+- return request_q.IsEmpty() ? ReportComplete(idx) : 0;
++ return ( request_q.IsEmpty() || !request_q.HasIdx(idx) ) ?
++ ReportComplete(idx) : RequestCheck();
}
int btPeer::RequestCheck()
{
- if( BandWidthLimit() ) return 0;
-+ if( BandWidthLimitDown() ) return 0;
-
+-
if( BTCONTENT.pBF->IsFull() ){
- if( bitfield.IsFull() ){ return -1; }
-@@ -347,7 +496,8 @@
- if(request_q.IsEmpty() && !m_state.remote_choked){
- if( RequestPiece() < 0 ) return -1;
+- if( bitfield.IsFull() ){ return -1; }
++ if( bitfield.IsFull() ){ return -2; }
+ return SetLocal(M_NOT_INTERESTED);
+ }
+
+ if( Need_Remote_Data() ){
+ if(!m_state.local_interested && SetLocal(M_INTERESTED) < 0) return -1;
+- if(request_q.IsEmpty() && !m_state.remote_choked){
+- if( RequestPiece() < 0 ) return -1;
++ if( !m_state.remote_choked ){
++ if( m_req_out > cfg_req_queue_length ){
++ if(arg_verbose)
++ fprintf(stderr, "ERROR@4: %p m_req_out underflow, resetting\n", this);
++ m_req_out = 0;
++ }
++ if( request_q.IsEmpty() && RequestPiece() < 0 ) return -1;
++ else if( m_req_out < m_req_send &&
++ (m_req_out < 2 || !RateDL() ||
++ 1 >= (m_req_out+1) * request_q.GetRequestLen() /
++ (double)RateDL() - m_latency)
++ // above formula is to try to allow delay between sending batches of reqs
++ && SendRequest() < 0 ) return -1;
}
- }
-+ } else
++ }else
+ if(m_state.local_interested && SetLocal(M_NOT_INTERESTED) < 0) return -1;
if(!request_q.IsEmpty()) StartDLTimer();
++ else StopDLTimer();
return 0;
-@@ -355,6 +505,7 @@
+ }
void btPeer::CloseConnection()
{
@@ -1135,9 +12833,16 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
if( P_FAILED != m_status ){
m_status = P_FAILED;
stream.Close();
-@@ -364,13 +515,76 @@
++ if( !request_q.IsEmpty() )
++ PENDINGQUEUE.Pending(&request_q);
+ }
++ if( g_next_up == this ) g_next_up = (btPeer *)0;
++ if( g_next_dn == this ) g_next_dn = (btPeer *)0;
+ }
+
int btPeer::HandShake()
{
++ char txtid[PEER_ID_LEN*2+3];
ssize_t r = stream.Feed();
- if( r < 0 ) return -1;
+ if( r < 0 ){
@@ -1150,10 +12855,9 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ if( memcmp(stream.in_buffer.BasePointer()+20,
+ BTCONTENT.GetShakeBuffer()+20, (r<28) ? r-20 : 8) != 0 ){
+ if(arg_verbose){
-+ if( r>48 ) fprintf( stderr, "\npeer %p gave 0x", this);
-+ else fprintf( stderr, "\npeer gave 0x" );
++ fprintf( stderr, "\npeer %p gave 0x", this);
+ for(int i=20; i<r && i<27; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(stream.in_buffer.BasePointer()[i]));
++ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i]));
+ fprintf( stderr, " as reserved bytes (partial)\n" );
+ }
+ memcpy(stream.in_buffer.BasePointer()+20, BTCONTENT.GetShakeBuffer()+20,
@@ -1165,12 +12869,16 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ if(arg_verbose){
+ fprintf(stderr, "\nmine: 0x");
+ for(int i=0; i<r && i<48; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(BTCONTENT.GetShakeBuffer()[i]));
++ (unsigned short)(unsigned char)(BTCONTENT.GetShakeBuffer()[i]));
+ fprintf(stderr, "\npeer: 0x");
+ for(int i=0; i<r && i<48; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(stream.in_buffer.BasePointer()[i]));
++ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i]));
+ fprintf(stderr, "\n");
-+ fprintf(stderr, "peer is %.8s\n", stream.in_buffer.BasePointer()+48);
++ if( r>48 ){
++ TextPeerID((unsigned char *)(stream.in_buffer.BasePointer()+48),
++ txtid);
++ fprintf(stderr, "peer is %s\n", txtid);
++ }
+ }
+ return -1;
+ }
@@ -1185,135 +12893,346 @@ diff -u ctorrent-1.3.4.orig/peer.cpp ctorrent-1.3.4/peer.cpp
+ if(arg_verbose){
+ fprintf(stderr, "\npeer %p gave 0x", this);
+ for(int i=20; i<27; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(stream.in_buffer.BasePointer()[i]));
++ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i]));
+ fprintf( stderr, " as reserved bytes\n" );
+ }
+ memcpy(stream.in_buffer.BasePointer()+20, BTCONTENT.GetShakeBuffer()+20, 8);
+ }
-+ if( memcmp(stream.in_buffer.BasePointer(),BTCONTENT.GetShakeBuffer(),48) != 0 ){
++ if( memcmp(stream.in_buffer.BasePointer(),
++ BTCONTENT.GetShakeBuffer(),48) != 0 ){
+ if(arg_verbose){
+ fprintf(stderr, "\nmine: 0x");
+ for(int i=0; i<48; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(BTCONTENT.GetShakeBuffer()[i]));
++ (unsigned short)(unsigned char)(BTCONTENT.GetShakeBuffer()[i]));
+ fprintf(stderr, "\npeer: 0x");
+ for(int i=0; i<48; i++) fprintf(stderr, "%2.2hx",
-+ (u_short)(u_char)(stream.in_buffer.BasePointer()[i]));
++ (unsigned short)(unsigned char)(stream.in_buffer.BasePointer()[i]));
+ fprintf(stderr, "\n");
+ }
+ return -1;
+ }
+
++ memcpy(id, stream.in_buffer.BasePointer()+48, PEER_ID_LEN);
+ if(arg_verbose){
-+ fprintf(stderr, "Peer %p ID: ", this);
-+ for(int i=48; i<60; i++){
-+ if( isprint(stream.in_buffer.BasePointer()[i]) )
-+ fprintf(stderr, "%c", stream.in_buffer.BasePointer()[i]);
-+ else break;
-+ }
-+ fprintf(stderr, "\n");
++ TextPeerID((unsigned char *)(stream.in_buffer.BasePointer()+48), txtid);
++ fprintf(stderr, "Peer %p ID: %s\n", this, txtid);
+ }
// ignore peer id verify
if( !BTCONTENT.pBF->IsEmpty()){
-@@ -395,10 +609,17 @@
+@@ -395,20 +875,63 @@
return stream.Send_Buffer((char*)BTCONTENT.GetShakeBuffer(),68);
}
-int btPeer::BandWidthLimit()
+int btPeer::BandWidthLimitUp()
-+{
+ {
+- if( cfg_max_bandwidth <= 0 ) return 0;
+- return ((Self.RateDL() + Self.RateUL()*2) / 1024 >= cfg_max_bandwidth) ?
+ if( cfg_max_bandwidth_up <= 0 ) return 0;
+ return ((Self.RateUL()) >= cfg_max_bandwidth_up) ?
+ 1:0;
+}
+
+int btPeer::BandWidthLimitDown()
- {
-- if( cfg_max_bandwidth <= 0 ) return 0;
-- return ((Self.RateDL() + Self.RateUL()*2) / 1024 >= cfg_max_bandwidth) ?
++{
+ if( cfg_max_bandwidth_down <= 0 ) return 0;
+ return ((Self.RateDL()) >= cfg_max_bandwidth_down) ?
1:0;
}
-@@ -406,12 +627,23 @@
+ int btPeer::NeedWrite()
{
int yn = 0;
++
++ if( m_standby && WORLD.Endgame() ){
++ if(arg_verbose) fprintf(stderr, "%p un-standby (endgame)\n", this);
++ m_standby = 0;
++ }
++
if( stream.out_buffer.Count() || // data need send in buffer.
- (!reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimit()) ||
-+ (!reponse_q.IsEmpty() && CouldReponseSlice() && ! BandWidthLimitUp()) ||
-+ ( !m_state.remote_choked && request_q.IsEmpty()
-+ && m_state.local_interested
-+ && !BandWidthLimitDown() && !m_standby ) || // can request a piece.
- P_CONNECTING == m_status ) // peer is connecting
+- P_CONNECTING == m_status ) // peer is connecting
++ // can upload a slice
++ (!reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimitUp()) ||
++
++ ( (request_q.NextSend() && m_req_out < m_req_send &&
++ (m_req_out < 2 || !RateDL() ||
++ 1 >= (m_req_out+1) * request_q.GetRequestLen() /
++ (double)RateDL() - m_latency)) // can send queued request
++ ||
++ (request_q.IsEmpty() && !m_state.remote_choked
++ && m_state.local_interested && !m_standby) // can request a new piece
++ ) // ok to send requests
++
++ || P_CONNECTING == m_status ){ // peer is connecting
++
yn = 1;
- return yn;
- }
-
++
++ if( g_next_up==this && g_defer_up ){
++ if(arg_verbose) fprintf(stderr, "%p skipped UL\n", this);
++ g_next_up = (btPeer *)0;
++ }
++ }
++ return yn;
++}
++
+int btPeer::NeedRead()
+{
+ int yn = 1;
+ if( !request_q.IsEmpty() && BandWidthLimitDown() )
+ yn = 0;
-+ return yn;
-+}
++ else if( g_next_dn==this && g_defer_dn ){
++ if(arg_verbose) fprintf(stderr, "%p skipped DL\n", this);
++ g_next_dn = (btPeer *)0;
++ }
+ return yn;
+ }
+
+@@ -432,20 +955,35 @@
+ ssize_t r;
+
+ if ( 64 < m_err_count ) return -1;
+-
+- r = stream.Feed();
+
+- if( r < 0 && r != -2 )
+- return -1;
+- else if ( r == -2 )
+- f_peer_closed = 1;
++ if( request_q.IsEmpty() || !BandWidthLimitDown() ){
++ if ( request_q.IsEmpty() || !g_next_dn || g_next_dn==this ){
++ if( g_next_dn ) g_next_dn = (btPeer *)0;
+
- int btPeer::CouldReponseSlice()
- {
- if(!m_state.local_choked &&
-@@ -453,15 +685,15 @@
++ r = stream.Feed();
++
++ if( r < 0 && r != -2 )
++ return -1;
++ else if ( r == -2 )
++ f_peer_closed = 1;
+
+- r = stream.HaveMessage();
+- for( ; r;){
+- if( r < 0 ) return -1;
+- if(MsgDeliver() < 0 || stream.PickMessage() < 0) return -1;
+- r = stream.HaveMessage();
++ r = stream.HaveMessage();
++ for( ; r;){
++ if( r < 0 ) return -1;
++ if(MsgDeliver() < 0 || stream.PickMessage() < 0) return -1;
++ r = stream.HaveMessage();
++ }
++ }else{
++ if(arg_verbose)
++ fprintf(stderr, "%p deferring DL to %p\n", this, g_next_dn);
++ if( !g_defer_dn ) g_defer_dn = 1;
++ }
++ }else if( !g_next_dn ){
++ if(arg_verbose) fprintf(stderr, "%p waiting for DL bandwidth\n", this);
++ g_next_dn = this;
++ if( g_defer_dn ) g_defer_dn = 0;
+ }
++
+ return f_peer_closed ? -1 : 0;
+ }
+
+@@ -453,27 +991,80 @@
{
if( stream.out_buffer.Count() && stream.Flush() < 0) return -1;
- if(! reponse_q.IsEmpty() && CouldReponseSlice() ) {
-+ if( !reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimitUp() ) {
- StartULTimer();
- Self.StartULTimer();
- }
+- StartULTimer();
+- Self.StartULTimer();
+- }
++ if( !reponse_q.IsEmpty() && CouldReponseSlice() ) {
++ if( !BandWidthLimitUp() ){
++ if( !g_next_up || g_next_up==this ){
++ if( g_next_up ) g_next_up = (btPeer *)0;
++
++ StartULTimer();
++ Self.StartULTimer();
++ if( ReponseSlice() < 0 ) return -1;
++ }else{
++ if(arg_verbose)
++ fprintf(stderr, "%p deferring UL to %p\n", this, g_next_up);
++ if( !g_defer_up ) g_defer_up = 1;
++ }
++ }else if( !g_next_up ){
++ if(arg_verbose) fprintf(stderr, "%p waiting for UL bandwidth\n", this);
++ g_next_up = this;
++ if( g_defer_up ) g_defer_up = 0;
++ }
++ }else if( g_next_up == this ) g_next_up = (btPeer *)0;
- for(; !reponse_q.IsEmpty() && CouldReponseSlice(); )
-+ for(; !reponse_q.IsEmpty() && CouldReponseSlice() && !BandWidthLimitUp(); )
- if( ReponseSlice() < 0) return -1;
+- if( ReponseSlice() < 0) return -1;
++ return (!m_state.remote_choked) ? RequestCheck() : 0;
++}
-- return 0;
-+ return (!m_state.remote_choked && request_q.IsEmpty()) ? RequestCheck() : 0;
++// Prevent a peer object from holding g_next_up when it's not ready to write.
++void btPeer::CheckSendStatus()
++{
++ if( g_next_up == this && !BandWidthLimitUp() ){
++ if(arg_verbose) fprintf(stderr, "%p is not write-ready\n", this);
++ g_next_up = (btPeer *)0;
++ }
++}
++
++/* Detect if a peer ignored, discarded, or lost my request and we're waiting
++ for a piece that may never arrive. */
++int btPeer::HealthCheck(time_t now)
++{
++ if( m_health_time <= now - 60 ){
++ m_health_time = now;
++ if( !m_state.remote_choked && m_req_out &&
++ m_receive_time < now - (!m_latency ? 300 :
++ ((m_latency < 30) ? 60 : 2*m_latency)) ){
++ // if a repeat occurrence, get rid of the peer
++ if( m_bad_health ) return -1;
++ m_bad_health = 1;
++ if(arg_verbose)
++ fprintf(stderr, "%p unresponsive; resetting request queue\n", this);
++ PSLICE ps = request_q.GetHead();
++ int retval = CancelRequest(ps);
++ PENDINGQUEUE.Pending(&request_q);
++ return (retval < 0) ? -1 : RequestCheck();
++ } else m_bad_health = 0;
++ }
+ return 0;
}
++// This handles peers that suppress HAVE messages so that we don't always think
++// that they're empty. If we've sent the peer an amount of data equivalent to
++// two pieces, assume that they now have at least one complete piece.
++int btPeer::IsEmpty() const
++{
++ return ( bitfield.IsEmpty() && TotalUL() < BTCONTENT.GetPieceLength()*2 ) ?
++ 1:0;
++}
++
void btPeer::dump()
-diff -u ctorrent-1.3.4.orig/peer.h ctorrent-1.3.4/peer.h
---- ctorrent-1.3.4.orig/peer.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/peer.h 2005-08-11 23:45:29.432693224 +0200
-@@ -34,6 +34,9 @@
+ {
+ struct sockaddr_in sin;
+
+ GetAddress(&sin);
+ printf("%s: %d -> %d:%d %lud:%lud\n", inet_ntoa(sin.sin_addr),
+- bitfield.Count(),
+- Is_Remote_UnChoked() ? 1 : 0,
+- request_q.IsEmpty() ? 0 : 1,
+- (unsigned long)TotalDL(),
+- (unsigned long)TotalUL());
++ bitfield.Count(),
++ Is_Remote_UnChoked() ? 1 : 0,
++ request_q.IsEmpty() ? 0 : 1,
++ (unsigned long)TotalDL(),
++ (unsigned long)TotalUL());
+ }
+
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peer.h ctorrent-1.3.4/peer.h
+--- ctorrent-1.3.4.sav/peer.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/peer.h 2006-06-28 19:30:02.000000000 +0200
+@@ -19,6 +19,7 @@
+ #include "btstream.h"
+ #include "bitfield.h"
+ #include "rate.h"
++#include "btconfig.h"
+
+ #define P_CONNECTING (unsigned char) 0 // connecting
+ #define P_HANDSHAKE (unsigned char) 1 // handshaking
+@@ -34,14 +35,24 @@
unsigned char reserved:4; /* unused */
}BTSTATUS;
+size_t get_nl(char *from);
+void set_nl(char *to, size_t from);
+
++int TextPeerID(unsigned char *peerid, char *txtid);
++
class btBasic
{
private:
-@@ -84,6 +87,7 @@
+ Rate rate_dl;
+ Rate rate_ul;
++ size_t m_current_dl, m_current_ul;
++ unsigned char m_use_current:1;
++ unsigned char m_reserved:7;
+ public:
+ struct sockaddr_in m_sin;
+
++ btBasic() { m_use_current = 0; }
++
+ //IPµØÖ·Ïà¹Øº¯Êý
+ int IpEquiv(struct sockaddr_in addr);
+ void SetIp(struct sockaddr_in addr);
+@@ -60,8 +71,10 @@
+ void DataRecved(size_t nby) { rate_dl.CountAdd(nby); }
+ void DataSended(size_t nby) { rate_ul.CountAdd(nby); }
+
+- size_t RateDL() const { return rate_dl.RateMeasure(); }
+- size_t RateUL() const { return rate_ul.RateMeasure();}
++ size_t RateDL() const { return m_use_current ? m_current_dl : rate_dl.RateMeasure(); }
++ size_t RateUL() const { return m_use_current ? m_current_ul : rate_ul.RateMeasure(); }
++ void SetCurrentRates();
++ void ClearCurrentRates() { m_use_current = 0; }
+
+ void StartDLTimer() { rate_dl.StartTimer(); }
+ void StartULTimer() { rate_ul.StartTimer(); }
+@@ -78,17 +91,28 @@
+
+ unsigned char m_f_keepalive:1;
+ unsigned char m_status:4;
+- unsigned char m_reserved:3;
++ unsigned char m_bad_health:1;
++ unsigned char m_standby:1;
++ unsigned char m_reserved:1;
+
+ BTSTATUS m_state;
size_t m_cached_idx;
size_t m_err_count;
-+ int m_standby;
++ size_t m_req_send; // target number of outstanding requests
++ size_t m_req_out; // actual number of outstanding requests
++ size_t m_latency;
++ size_t m_prev_dlrate;
++ time_t m_latency_timestamp;
++ time_t m_health_time, m_receive_time;
++ char m_lastmsg;
++ time_t m_choketime;
int PieceDeliver(size_t mlen);
int ReportComplete(size_t idx);
-@@ -96,6 +100,8 @@
+ int RequestCheck();
+ int SendRequest();
++ int CancelPiece();
+ int CancelRequest(PSLICE ps);
+ int ReponseSlice();
+ int RequestPiece();
+@@ -96,7 +120,10 @@
int CouldReponseSlice();
int BandWidthLimit();
+ int BandWidthLimitUp();
+ int BandWidthLimitDown();
public:
++ unsigned char id[PEER_ID_LEN];
BitField bitfield;
btStream stream;
-@@ -118,10 +124,12 @@
+ RequestQueue request_q;
+@@ -106,6 +133,8 @@
+
+ int RecvModule();
+ int SendModule();
++ int HealthCheck(time_t now);
++ void CheckSendStatus();
+
+ time_t SetLastTimestamp() { return time(&m_last_timestamp); }
+ time_t GetLastTimestamp() const { return m_last_timestamp; }
+@@ -118,10 +147,14 @@
int Is_Local_UnChoked() const { return m_state.local_choked ? 0 : 1; }
int SetLocal(unsigned char s);
++ int IsEmpty() const;
++
+ int CancelSliceRequest(size_t idx, size_t off, size_t len);
void SetStatus(unsigned char s){ m_status = s; }
@@ -1323,10 +13242,25 @@ diff -u ctorrent-1.3.4.orig/peer.h ctorrent-1.3.4/peer.h
void CloseConnection();
-diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
---- ctorrent-1.3.4.orig/peerlist.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/peerlist.cpp 2005-08-11 23:45:29.433693072 +0200
-@@ -21,6 +21,8 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
+--- ctorrent-1.3.4.sav/peerlist.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/peerlist.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -5,6 +5,7 @@
+ #include <stdlib.h>
+
+ #include <stdio.h>
++#include <errno.h>
+
+ #include <string.h>
+
+@@ -16,11 +17,15 @@
+
+ #include "iplist.h"
+ #include "tracker.h"
++#include "ctcs.h"
++#include "bttime.h"
+
+
#define MAX_UNCHOKE 3
#define UNCHOKE_INTERVAL 10
@@ -1335,7 +13269,7 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
#define KEEPALIVE_INTERVAL 117
#define LISTEN_PORT_MAX 2706
-@@ -36,12 +38,13 @@
+@@ -36,12 +41,13 @@
PeerList::PeerList()
{
@@ -1352,7 +13286,33 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
m_live_idx = 0;
}
-@@ -118,6 +121,8 @@
+@@ -61,25 +67,6 @@
+ return m_peers_count ? 0 : 1;
+ }
+
+-void PeerList::Sort()
+-{
+- PEERNODE *newhead = (PEERNODE*) 0;
+- PEERNODE *p, *pp, *spn;
+-
+- if( m_peers_count < 10 ) return;
+-
+- for(; m_head;){
+- pp = (PEERNODE*) 0;
+- for(p = newhead; p && m_head->click < p->click; pp = p, p = p->next) ;
+-
+- spn = m_head->next;
+- m_head->next = p;
+- if( pp ) pp->next = m_head; else newhead = m_head;
+- m_head = spn;
+- }
+- m_head = newhead;
+-}
+-
+ void PeerList::CloseAll()
+ {
+ PEERNODE *p;
+@@ -118,6 +105,8 @@
if( setfd_nonblock(sk) < 0) goto err;
@@ -1361,60 +13321,100 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
if( -1 == (r = connect_nonb(sk,(struct sockaddr*)&addr)) ) return -1;
peer = new btPeer;
-@@ -182,19 +187,44 @@
- if(NewPeer(addr,INVALID_SOCKET) == -4) break;
- }
+@@ -154,7 +143,6 @@
+ m_peers_count++;
+ p->peer = peer;
+- p->click = 0;
+
+ p->next = m_head;
+ m_head = p;
+@@ -177,28 +165,65 @@
+ struct sockaddr_in addr;
+ btPeer * UNCHOKER[MAX_UNCHOKE + 1];
+
+- for( ;NEED_MORE_PEERS() && !IPQUEUE.IsEmpty(); ){
+- if(IPQUEUE.Pop(&addr) < 0) break;
+- if(NewPeer(addr,INVALID_SOCKET) == -4) break;
+- }
++ if( !Tracker.IsPaused() && !Tracker.IsQuitting() )
++ for( ;NEED_MORE_PEERS() && !IPQUEUE.IsEmpty(); ){
++ if(IPQUEUE.Pop(&addr) < 0) break;
++ if(NewPeer(addr,INVALID_SOCKET) == -4) break;
++ }
+
++ Self.SetCurrentRates();
+
// show status line.
if( m_pre_dlrate.TimeUsed(pnow) ){
- printf("\r ");
- printf("\r%c %u,[%u/%u/%u],%u,%u | %u,%u E:%u",
+- LIVE_CHAR[m_live_idx],
+- m_peers_count,
+- BTCONTENT.pBF->Count(),
+- BTCONTENT.pBF->NBits(),
+- Pieces_I_Can_Get(),
+- Self.RateDL(), Self.RateUL(),
+- m_pre_dlrate.RateMeasure(Self.GetDLRate()),
+- m_pre_ulrate.RateMeasure(Self.GetULRate()),
+- Tracker.GetRefuseClick());
+ char partial[30] = "";
+ if(arg_file_to_download){
+ BitField tmpBitField = *BTCONTENT.pBF;
+ tmpBitField.Except(*BTCONTENT.pBFilter);
+ sprintf( partial, "P:%u/%u ",
-+ tmpBitField.Count(),
-+ BTCONTENT.getFilePieces(arg_file_to_download) );
++ tmpBitField.Count(),
++ BTCONTENT.getFilePieces(arg_file_to_download) );
+ }
+ printf("\r ");
+ printf("\r%c %u/%u/%u [%u/%u/%u] %lluMB,%lluMB | %u,%uK/s | %u,%uK E:%u,%u %s%s ",
- LIVE_CHAR[m_live_idx],
-- m_peers_count,
++ LIVE_CHAR[m_live_idx],
+
-+ m_seeds_count,
-+ m_peers_count - m_seeds_count,
-+ Tracker.GetPeersCount(),
++ m_seeds_count,
++ m_peers_count - m_seeds_count,
++ Tracker.GetPeersCount(),
+
- BTCONTENT.pBF->Count(),
- BTCONTENT.pBF->NBits(),
- Pieces_I_Can_Get(),
-- Self.RateDL(), Self.RateUL(),
-- m_pre_dlrate.RateMeasure(Self.GetDLRate()),
-- m_pre_ulrate.RateMeasure(Self.GetULRate()),
-- Tracker.GetRefuseClick());
++ BTCONTENT.pBF->Count(),
++ BTCONTENT.pBF->NBits(),
++ Pieces_I_Can_Get(),
+
-+ Self.TotalDL() >> 20, Self.TotalUL() >> 20,
++ Self.TotalDL() >> 20, Self.TotalUL() >> 20,
+
-+ Self.RateDL() >> 10, Self.RateUL() >> 10,
++ Self.RateDL() >> 10, Self.RateUL() >> 10,
+
-+ m_pre_dlrate.RateMeasure(Self.GetDLRate()) >> 10,
-+ m_pre_ulrate.RateMeasure(Self.GetULRate()) >> 10,
++ m_pre_dlrate.RateMeasure(Self.GetDLRate()) >> 10,
++ m_pre_ulrate.RateMeasure(Self.GetULRate()) >> 10,
+
-+ Tracker.GetRefuseClick(),
-+ Tracker.GetOkClick(),
++ Tracker.GetRefuseClick(),
++ Tracker.GetOkClick(),
+
-+ partial,
++ partial,
+
-+ (Tracker.GetStatus()==1) ? "Connecting" :
-+ ((Tracker.GetStatus()==2) ? "Connected" : "")
++ (Tracker.GetStatus()==T_CONNECTING) ? "Connecting" :
++ ( (Tracker.GetStatus()==T_READY) ? "Connected" :
++ (Tracker.IsPaused() ?
++ ((Tracker.GetStatus()==T_FINISHED) ? "Paused" : "Pausing") :
++ (Tracker.IsQuitting() ? "Quitting" : "")) )
+ );
fflush(stdout);
m_pre_dlrate = Self.GetDLRate();
m_pre_ulrate = Self.GetULRate();
-@@ -214,8 +244,12 @@
- Sort();
+ m_live_idx++;
++
++ if(arg_ctcs) CTCS.Report_Status(
++ m_seeds_count, m_peers_count - m_seeds_count,
++ BTCONTENT.pBF->Count(), BTCONTENT.pBF->NBits(), Pieces_I_Can_Get(),
++ Self.RateDL(), Self.RateUL(),
++ Self.TotalDL(), Self.TotalUL(),
++ cfg_max_bandwidth_down, cfg_max_bandwidth_up);
+ }
+
+ if(KEEPALIVE_INTERVAL <= (*pnow - m_keepalive_check_timestamp)){
+@@ -211,11 +236,14 @@
+ m_unchoke_check_timestamp = *pnow;
+ f_unchoke_check = 1;
+
+- Sort();
}
- if( f_unchoke_check ) memset(UNCHOKER, 0, (MAX_UNCHOKE + 1) * sizeof(btPeer*));
@@ -1427,46 +13427,61 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
for(p = m_head; p;){
if( PEER_IS_FAILED(p->peer)){
if( pp ) pp->next = p->next; else m_head = p->next;
-@@ -225,9 +259,11 @@
+@@ -225,38 +253,38 @@
if( pp ) p = pp->next; else p = m_head;
continue;
}else{
+ if (p->peer->bitfield.IsFull()) m_seeds_count++;
if( f_keepalive_check ){
- if(3 * KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp())){
-+ if(arg_verbose) fprintf(stderr, "close: keepalive expired\n");
- p->peer->CloseConnection();
- goto skip_continue;
- }
-@@ -235,28 +271,26 @@
- if(PEER_IS_SUCCESS(p->peer) &&
- KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp()) &&
- p->peer->AreYouOK() < 0){
-+ if(arg_verbose) fprintf(stderr, "close: keepalive death\n");
- p->peer->CloseConnection();
- goto skip_continue;
- }
- }
-
+- if(3 * KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp())){
+- p->peer->CloseConnection();
+- goto skip_continue;
+- }
+-
+- if(PEER_IS_SUCCESS(p->peer) &&
+- KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp()) &&
+- p->peer->AreYouOK() < 0){
+- p->peer->CloseConnection();
+- goto skip_continue;
+- }
+- }
+-
- if( f_unchoke_check ){
-
- if(PEER_IS_SUCCESS(p->peer) && p->peer->Need_Local_Data()){
-+ if( f_unchoke_check && PEER_IS_SUCCESS(p->peer) ){
-
+-
- if((time_t) 0 == p->peer->GetLastUnchokeTime()){
- if(p->peer->SetLocal(M_UNCHOKE) < 0){
- p->peer->CloseConnection();
- goto skip_continue;
- }
- }else
-+ if( p->peer->Is_Remote_Interested() && p->peer->Need_Local_Data() )
- UnChokeCheck(p->peer, UNCHOKER);
+- UnChokeCheck(p->peer, UNCHOKER);
- }
-+ else if(p->peer->SetLocal(M_CHOKE) < 0){
-+ if(arg_verbose) fprintf(stderr, "close: Can't choke peer\n");
-+ p->peer->CloseConnection();
-+ goto skip_continue;
++ if(3 * KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp())){
++ if(arg_verbose) fprintf(stderr, "close: keepalive expired\n");
++ p->peer->CloseConnection();
++ goto skip_continue;
++ }
++
++ if(PEER_IS_SUCCESS(p->peer) &&
++ KEEPALIVE_INTERVAL <= (*pnow - p->peer->GetLastTimestamp()) &&
++ p->peer->AreYouOK() < 0){
++ if(arg_verbose) fprintf(stderr, "close: keepalive death\n");
++ p->peer->CloseConnection();
++ goto skip_continue;
++ }
++ }
++
++ if( f_unchoke_check && PEER_IS_SUCCESS(p->peer) ){
++
++ if( p->peer->Is_Remote_Interested() && p->peer->Need_Local_Data() )
++ UnChokeCheck(p->peer, UNCHOKER);
++ else if(p->peer->SetLocal(M_CHOKE) < 0){
++ if(arg_verbose) fprintf(stderr, "close: Can't choke peer\n");
++ p->peer->CloseConnection();
++ goto skip_continue;
+ }
}
@@ -1477,11 +13492,10 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
if( p->peer->NeedWrite() ) FD_SET(sk,wfdp);
skip_continue:
-@@ -272,13 +306,26 @@
+@@ -272,25 +300,40 @@
}
if( f_unchoke_check ){
-+// if (!m_opt_timestamp) m_opt_timestamp = *pnow;
+ if(arg_verbose) fprintf(stderr, "\nUnchoker ");
+ if (!m_opt_timestamp){
+ if(arg_verbose) fprintf(stderr, "(opt) ");
@@ -1500,59 +13514,158 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
+ if( UNCHOKER[i]->bitfield.IsEmpty() ) fprintf(stderr, "(empty) ");
+ }
if( UNCHOKER[i]->SetLocal(M_UNCHOKE) < 0){
+- UNCHOKER[i]->CloseConnection();
+- continue;
+ if(arg_verbose) fprintf(stderr, "close: Can't unchoke peer\n");
- UNCHOKER[i]->CloseConnection();
- continue;
++ UNCHOKER[i]->CloseConnection();
++ continue;
}
-@@ -290,6 +337,7 @@
- if( maxfd < sk) maxfd = sk;
+
+ sk = UNCHOKER[i]->stream.GetSocket();
+
+ if(!FD_ISSET(sk,wfdp) && UNCHOKER[i]->NeedWrite()){
+- FD_SET(sk,wfdp);
+- if( maxfd < sk) maxfd = sk;
++ FD_SET(sk,wfdp);
++ if( maxfd < sk) maxfd = sk;
}
} // end for
+ if(arg_verbose) fprintf(stderr, "\n");
}
++
++ Self.ClearCurrentRates();
return maxfd;
-@@ -314,6 +362,64 @@
+ }
+@@ -305,15 +348,148 @@
+
+ if(proposer->bitfield.IsSet(p->peer->request_q.GetRequestIdx())){
+ if(!peer){
+- if( p->peer->RateDL() < proposer->RateDL() ) peer = p->peer;
++ if( p->peer->RateDL() < proposer->RateDL() ) peer = p->peer;
+ }else{
+- if( p->peer->RateDL() < peer->RateDL() ) peer = p->peer;
++ if( p->peer->RateDL() < peer->RateDL() ) peer = p->peer;
+ }
+ }
+ }//end for
return peer;
}
-+// Duplicating a request queue that's in progress rather than creating a new
-+// one helps avoid requesting slices that we already have.
+// This takes an index parameter to facilitate modification of the function to
+// allow targeting of a specific piece. It's currently only used as a flag to
+// specify endgame or initial-piece mode though.
-+btPeer* PeerList::Who_Can_Duplicate(btPeer *proposer, size_t idx)
++size_t PeerList::What_Can_Duplicate(BitField &bf, btPeer *proposer, size_t idx)
+{
+ PEERNODE *p;
+ btPeer *peer = (btPeer*) 0;
+ int endgame;
-+ size_t qsize, mark, bench;
-+ // In endgame mode, select from peers with the longest request queue.
-+ // In initial mode, select from peers with the shortest non-empty request
-+ // queue.
++ PSLICE ps;
++ size_t piece, piece1, qsize, mark, bench;
++ unsigned long rndbits;
++ int r=0;
+
+ endgame = idx < BTCONTENT.GetNPieces(); // else initial-piece mode
+ if(endgame) mark = 0;
+ else mark = cfg_req_queue_length;
+ bench = BTCONTENT.GetNPieces();
+
++ // In initial mode, only dup a piece with trade value.
++ // In endgame mode, dup any if there are no pieces with trade value.
++ FindValuedPieces(bf, proposer, !endgame);
++ if( bf.IsEmpty() ){
++ if(endgame) bf = proposer->bitfield;
++ else return BTCONTENT.GetNPieces();
++ }
++
++ /* In endgame mode, select from peers with the longest request queue.
++ In initial mode, select from peers with the shortest non-empty request
++ queue. */
+ for(p = m_head; p; p = p->next){
-+ if(!PEER_IS_SUCCESS(p->peer) || p->peer == proposer ||
-+ p->peer->request_q.IsEmpty() ) continue;
++ if( !PEER_IS_SUCCESS(p->peer) || p->peer == proposer ) continue;
++
++ if( p->peer->request_q.IsEmpty() ) continue;
+
-+ if(proposer->bitfield.IsSet(p->peer->request_q.GetRequestIdx())){
-+ qsize = p->peer->request_q.Qsize();
-+ if( (endgame && qsize > mark) || (!endgame && qsize && qsize < mark) ){
++ piece = BTCONTENT.GetNPieces();
++ ps = p->peer->request_q.GetHead();
++ for( ; ps; ps = ps->next){
++ if( piece == ps->index || bench == ps->index || piece1 == ps->index ||
++ !bf.IsSet(ps->index) || proposer->request_q.HasIdx(ps->index) )
++ continue;
++ piece = ps->index;
++
++ qsize = p->peer->request_q.Qlen(piece);
++ if( (endgame && qsize > mark) ||
++ (!endgame && (qsize < mark || !peer)) ){
+ mark = qsize;
+ peer = p->peer;
++ piece1 = piece;
+ }else if( qsize == mark ){
-+ if( bench != p->peer->request_q.GetRequestIdx() && random()&01 ){
-+ bench = peer->request_q.GetRequestIdx();
++ if( !r-- ){
++ rndbits = random();
++ r = 30;
++ }
++ if( bench != piece && (rndbits>>=1)&01 ){
++ bench = piece1;
+ peer = p->peer;
++ piece1 = piece;
+ }
+ }
+ }
+ }
++ return peer ? piece1 : BTCONTENT.GetNPieces();
++}
++
++void PeerList::FindValuedPieces(BitField &bf, btPeer *proposer, int initial)
++{
++ PEERNODE *p;
++ BitField bf_all_have = bf, bf_int_have = bf,
++ bf_others_have, bf_only_he_has = bf, bf_prefer;
++
++ for(p = m_head; p; p = p->next){
++ if( !PEER_IS_SUCCESS(p->peer) || p->peer == proposer ) continue;
++ if( p->peer->Need_Remote_Data() )
++ bf_int_have.And(p->peer->bitfield);
++ bf_all_have.And(p->peer->bitfield);
++ if( !initial && !p->peer->bitfield.IsFull() )
++ bf_only_he_has.Except(p->peer->bitfield);
++ else bf_others_have.Comb(p->peer->bitfield);
++ }
++ /* bf_all_have is now pertinent pieces that all peers have
++ bf_int_have is pertinent pieces that all peers in which I'm interested have
++ We prefer to get pieces that those peers need, if we can. Otherwise go
++ for pieces that any peer needs in hopes of future reciprocation. */
++ if( !bf_int_have.IsFull() )
++ bf_all_have = bf_int_have;
++ bf_all_have.Invert();
++ bf.And(bf_all_have); // bf is now pertinent pieces that not everyone has
++
++ bf_prefer = initial ? bf_others_have : bf_only_he_has;
++
++ BitField tmpBitField = bf;
++ tmpBitField.And(bf_prefer);
++ /* If initial mode, tmpBitField is now pertinent pieces that more than one
++ peer has, but not everyone.
++ Otherwise, it's pertinent pieces that only the proposer has (not
++ considering what other seeders have).
++ In either case if there are no such pieces, revert to the simple answer.*/
++ if( !tmpBitField.IsEmpty() ) bf = tmpBitField;
++}
++
++/* Find a peer with the given piece in its request queue.
++ Duplicating a request queue that's in progress rather than creating a new
++ one helps avoid requesting slices that we already have. */
++btPeer *PeerList::WhoHas(size_t idx)
++{
++ PEERNODE *p;
++ btPeer *peer = (btPeer*) 0;
++
++ for( p = m_head; p; p = p->next){
++ if( p->peer->request_q.HasIdx(idx) ){
++ peer = p->peer;
++ break;
++ }
++ }
+ return peer;
+}
+
@@ -1565,11 +13678,9 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
+
+ if( !PEER_IS_SUCCESS(p->peer) ) continue;
+
-+ if( idx == p->peer->request_q.GetRequestIdx() ) {
-+ if (p->peer->CancelSliceRequest(idx,off,len) < 0) {
-+ if(arg_verbose) fprintf(stderr, "close: CancelSlice\n");
-+ p->peer->CloseConnection();
-+ }
++ if (p->peer->CancelSliceRequest(idx,off,len) < 0) {
++ if(arg_verbose) fprintf(stderr, "close: CancelSlice\n");
++ p->peer->CloseConnection();
+ }
+ }
+}
@@ -1577,12 +13688,19 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
void PeerList::Tell_World_I_Have(size_t idx)
{
PEERNODE *p;
-@@ -330,7 +436,12 @@
+@@ -325,12 +501,18 @@
+
+ if( !PEER_IS_SUCCESS(p->peer) ) continue;
+
+- if( p->peer->stream.Send_Have(idx) < 0)
++ // Don't send HAVE to seeders, except for our first piece.
++ if( (!p->peer->bitfield.IsFull() || 1==BTCONTENT.pBF->Count()) &&
++ p->peer->stream.Send_Have(idx) < 0)
+ p->peer->CloseConnection();
if( f_seed ){
if( !p->peer->request_q.IsEmpty() ) p->peer->request_q.Empty();
- if(p->peer->SetLocal(M_NOT_INTERESTED) < 0) p->peer->CloseConnection();
-+// if(p->peer->SetLocal(M_NOT_INTERESTED) < 0) p->peer->CloseConnection();
+ if(p->peer->SetLocal(M_NOT_INTERESTED) < 0) {
+ if(arg_verbose)
+ fprintf(stderr, "close: Can't set self not interested (T_W_I_H)\n");
@@ -1591,68 +13709,215 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
}
} // end for
-@@ -474,15 +585,20 @@
- FD_CLR(sk,wfdp);
-
- if(FD_ISSET(sk,rfdp)){ // connect failed.
-+ (*nready)--;
- FD_CLR(sk,rfdp);
- peer->CloseConnection();
- }else{
- if(peer->Send_ShakeInfo() < 0){
-+ if(arg_verbose) fprintf(stderr, "close: Sending handshake\n");
- peer->CloseConnection();
- }
- else
- peer->SetStatus(P_HANDSHAKE);
- }
+@@ -350,6 +532,11 @@
+ CLOSE_SOCKET(newsk);
+ return -1;
+ }
++
++ if( Tracker.IsPaused() || Tracker.IsQuitting() ){
++ CLOSE_SOCKET(newsk);
++ return -1;
++ }
+
+ return NewPeer(addr,newsk);
+ }
+@@ -359,18 +546,23 @@
+ int r = 0;
+ struct sockaddr_in lis_addr;
+ memset(&lis_addr,0, sizeof(sockaddr_in));
++ lis_addr.sin_family = AF_INET;
+ lis_addr.sin_addr.s_addr = INADDR_ANY;
+
+ m_listen_sock = socket(AF_INET,SOCK_STREAM,0);
+
+ if( INVALID_SOCKET == m_listen_sock ) return -1;
+
++ if ( cfg_listen_ip != 0 )
++ lis_addr.sin_addr.s_addr = cfg_listen_ip;
++
+ if(cfg_listen_port && cfg_listen_port != LISTEN_PORT_MAX){
+ lis_addr.sin_port = htons(cfg_listen_port);
+ if(bind(m_listen_sock,(struct sockaddr*)&lis_addr,sizeof(struct sockaddr_in)) == 0)
+ r = 1;
+ else
+- fprintf(stderr,"warn,couldn't bind on specified port: %d\n",cfg_listen_port);
++ fprintf(stderr,"warn,couldn't bind on specified port %d: %s\n",
++ cfg_listen_port,strerror(errno));
+ }
+
+ if( !r ){
+@@ -380,20 +572,21 @@
+ lis_addr.sin_port = htons(cfg_listen_port);
+ r = bind(m_listen_sock,(struct sockaddr*)&lis_addr,sizeof(struct sockaddr_in));
+ if(r != 0){
+- cfg_listen_port--;
+- if(cfg_listen_port < cfg_min_listen_port){
+- CLOSE_SOCKET(m_listen_sock);
+- fprintf(stderr,"error,couldn't bind port from %d to %d.\n",
+- cfg_min_listen_port,cfg_max_listen_port);
+- return -1;
+- }
++ cfg_listen_port--;
++ if(cfg_listen_port < cfg_min_listen_port){
++ CLOSE_SOCKET(m_listen_sock);
++ fprintf(stderr,"error,couldn't bind port from %d to %d: %s\n",
++ cfg_min_listen_port,cfg_max_listen_port,strerror(errno));
++ return -1;
++ }
+ }
+ } /* end for(; r != 0;) */
+ }
+
+ if(listen(m_listen_sock,5) == -1){
+ CLOSE_SOCKET(m_listen_sock);
+- fprintf(stderr,"error, couldn't listen on port %d.\n",cfg_listen_port);
++ fprintf(stderr,"error, couldn't listen on port %d: %s\n",
++ cfg_listen_port,strerror(errno));
+ return -1;
+ }
+
+@@ -402,6 +595,9 @@
+ fprintf(stderr,"error, couldn't set socket to nonblock mode.\n");
+ return -1;
+ }
++
++ printf("Listening on %s:%d\n", inet_ntoa(lis_addr.sin_addr),
++ ntohs(lis_addr.sin_port));
+
+ return 0;
+ }
+@@ -425,7 +621,7 @@
+ PEERNODE *p;
+ for(p = m_head; p; p = p->next){
+ if( !PEER_IS_SUCCESS(p->peer) || p->peer->request_q.IsEmpty()) continue;
+- if( idx == p->peer->request_q.GetRequestIdx() ) return 1;
++ if( p->peer->request_q.HasIdx(idx) ) return 1;
+ }
+ return 0;
+ }
+@@ -433,9 +629,18 @@
+ void PeerList::CheckBitField(BitField &bf)
+ {
+ PEERNODE *p;
++ PSLICE ps;
++ size_t idx;
+ for(p = m_head; p ; p = p->next){
+ if( !PEER_IS_SUCCESS(p->peer) || p->peer->request_q.IsEmpty()) continue;
+- bf.UnSet(p->peer->request_q.GetRequestIdx());
++ ps = p->peer->request_q.GetHead();
++ idx = BTCONTENT.GetNPieces();
++ for( ; ps; ps = ps->next){
++ if( ps->index != idx ){
++ bf.UnSet(ps->index);
++ idx = ps->index;
++ }
++ }
+ }
+ }
+
+@@ -445,8 +650,8 @@
+ struct sockaddr_in sin;
+ printf("\nPEER LIST\n");
+ for( ; p ; p = p->next){
+- if(PEER_IS_FAILED(p->peer)) continue;
+- p->peer->dump();
++ if(PEER_IS_FAILED(p->peer)) continue;
++ p->peer->dump();
+ }
+ }
+
+@@ -470,42 +675,55 @@
+
+ if( P_CONNECTING == peer->GetStatus()){
+ if(FD_ISSET(sk,wfdp)){
+- (*nready)--;
+- FD_CLR(sk,wfdp);
++ (*nready)--;
++ FD_CLR(sk,wfdp);
+
+- if(FD_ISSET(sk,rfdp)){ // connect failed.
+- FD_CLR(sk,rfdp);
+- peer->CloseConnection();
+- }else{
+- if(peer->Send_ShakeInfo() < 0){
+- peer->CloseConnection();
+- }
+- else
+- peer->SetStatus(P_HANDSHAKE);
+- }
++ if(FD_ISSET(sk,rfdp)){ // connect failed.
++ (*nready)--;
++ FD_CLR(sk,rfdp);
++ peer->CloseConnection();
++ }else{
++ if(peer->Send_ShakeInfo() < 0){
++ if(arg_verbose) fprintf(stderr, "close: Sending handshake\n");
++ peer->CloseConnection();
++ }
++ else
++ peer->SetStatus(P_HANDSHAKE);
++ }
+ }else if(FD_ISSET(sk,rfdp)){
-+ (*nready)--;
-+ peer->CloseConnection();
++ (*nready)--;
++ peer->CloseConnection();
}
}else{
if(FD_ISSET(sk,rfdp)){
-@@ -493,18 +609,29 @@
- (*nready)--;
- FD_CLR(sk,rfdp);
- if(peer->GetStatus() == P_HANDSHAKE){
+- p->click++;
+- if( !(p->click) )
+- for(p2 = m_head; p2; p2=p2->next) p2->click = 0;
+-
+- (*nready)--;
+- FD_CLR(sk,rfdp);
+- if(peer->GetStatus() == P_HANDSHAKE){
- if( peer->HandShake() < 0 ) peer->CloseConnection();
- }else{
- if( peer->RecvModule() < 0 ) peer->CloseConnection();
-+ if( peer->HandShake() < 0 ) {
-+ if(arg_verbose) fprintf(stderr, "close: bad handshake\n");
-+ peer->CloseConnection();
-+ }
-+ } // fixed client stall
-+ if(peer->GetStatus() == P_SUCCESS){
-+ if( peer->RecvModule() < 0 ) {
-+ if(arg_verbose) fprintf(stderr, "close: receive\n");
-+ peer->CloseConnection();
-+ }
- }
+- }
- }else if(PEER_IS_SUCCESS(peer) && FD_ISSET(sk,wfdp)){
-+ }
-+ if(PEER_IS_SUCCESS(peer) && FD_ISSET(sk,wfdp)){
- p->click++;
- if( !(p->click) )
- for(p2 = m_head; p2; p2=p2->next) p2->click = 0;
-
- (*nready)--;
- FD_CLR(sk,wfdp);
+- p->click++;
+- if( !(p->click) )
+- for(p2 = m_head; p2; p2=p2->next) p2->click = 0;
+-
+- (*nready)--;
+- FD_CLR(sk,wfdp);
- if( peer->SendModule() < 0 ) peer->CloseConnection();
-+ if( peer->SendModule() < 0 ) {
-+ if(arg_verbose) fprintf(stderr, "close: send\n");
-+ peer->CloseConnection();
-+ }
++ (*nready)--;
++ FD_CLR(sk,rfdp);
++ if(peer->GetStatus() == P_HANDSHAKE){
++ if( peer->HandShake() < 0 ) {
++ if(arg_verbose) fprintf(stderr, "close: bad handshake\n");
++ peer->CloseConnection();
++ }
++ } // fixed client stall
++ if(peer->GetStatus() == P_SUCCESS){
++ if( peer->RecvModule() < 0 ) {
++ if(arg_verbose) fprintf(stderr, "close: receive\n");
++ peer->CloseConnection();
++ }
++ }
++ }else if( peer->HealthCheck(now) < 0 ){
++ if(arg_verbose) fprintf(stderr, "close: unresponsive\n");
++ peer->CloseConnection();
}
++
++ if( (PEER_IS_SUCCESS(peer) || peer->GetStatus() == P_HANDSHAKE) &&
++ FD_ISSET(sk,wfdp) ){
++ (*nready)--;
++ FD_CLR(sk,wfdp);
++ if( peer->SendModule() < 0 ) {
++ if(arg_verbose) fprintf(stderr, "close: send\n");
++ peer->CloseConnection();
++ }
++ }else peer->CheckSendStatus();
}
}// end for
-@@ -514,7 +641,11 @@
+ }
+@@ -514,7 +732,10 @@
{
PEERNODE *p = m_head;
for( ; p; p = p->next)
- if(p->peer->bitfield.IsFull()) p->peer->CloseConnection();
-+// if(p->peer->bitfield.IsFull()) p->peer->CloseConnection();
+ if(p->peer->bitfield.IsFull()) {
+ if(arg_verbose) fprintf(stderr, "close: seed<->seed\n");
+ p->peer->CloseConnection();
@@ -1660,54 +13925,81 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
}
void PeerList::UnChokeCheck(btPeer* peer, btPeer *peer_array[])
-@@ -523,8 +654,15 @@
+@@ -523,51 +744,170 @@
int cancel_idx = 0;
btPeer *loster = (btPeer*) 0;
int f_seed = BTCONTENT.pBF->IsFull();
+-
+- for( cancel_idx = i = 0; i < MAX_UNCHOKE; i++ ){
+- if((btPeer*) 0 == peer_array[i] || PEER_IS_FAILED(peer_array[i]) ){ // ÓпÕλ
+ int no_opt = 0;
++ unsigned long rndbits;
++ int r=0;
+
+ if (m_opt_timestamp) no_opt = 1;
-
-- for( cancel_idx = i = 0; i < MAX_UNCHOKE; i++ ){
++
+// Find my 3 or 4 fastest peers.
+// The MAX_UNCHOKE+1 (4th) slot is for the optimistic unchoke when it happens.
+
+ // Find a slot for the candidate--the slowest peer, or an available slot.
+ for( cancel_idx = i = 0; i < MAX_UNCHOKE+no_opt; i++ ){
- if((btPeer*) 0 == peer_array[i] || PEER_IS_FAILED(peer_array[i]) ){ // ÓпÕλ
++ if((btPeer*) 0 == peer_array[i] ||
++ PEER_IS_FAILED(peer_array[i]) ){ // ÓпÕλ
cancel_idx = i;
break;
-@@ -537,7 +675,13 @@
- cancel_idx = i;
+ }else{
+ if(cancel_idx == i) continue;
+
+ if(f_seed){
+- // compare upload rate.
+- if(peer_array[cancel_idx]->RateUL() > peer_array[i]->RateUL())
+- cancel_idx = i;
++ // compare upload rate.
++ if(peer_array[cancel_idx]->RateUL() > peer_array[i]->RateUL())
++ cancel_idx = i;
}else{
- // compare download rate.
+- // compare download rate.
- if(peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL())
-+// if(peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL())
-+ if( peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL()
+- cancel_idx = i;
++ // compare download rate.
++ if( peer_array[cancel_idx]->RateDL() > peer_array[i]->RateDL()
+ //if equal, reciprocate to the peer we've sent less to, proportionally
+ ||(peer_array[cancel_idx]->RateDL() == peer_array[i]->RateDL()
+ && peer_array[cancel_idx]->TotalUL()
+ / (peer_array[cancel_idx]->TotalDL()+.001)
+ < peer_array[i]->TotalUL() / (peer_array[i]->TotalDL()+.001)) )
- cancel_idx = i;
++ cancel_idx = i;
}
}
-@@ -551,7 +695,13 @@
+ } // end for
+
+- if( (btPeer*) 0 != peer_array[cancel_idx] && PEER_IS_SUCCESS(peer_array[cancel_idx]) ){
++ if( (btPeer*) 0 != peer_array[cancel_idx] &&
++ PEER_IS_SUCCESS(peer_array[cancel_idx]) ){
+ if(f_seed){
+ if(peer->RateUL() > peer_array[cancel_idx]->RateUL()){
+- loster = peer_array[cancel_idx];
+- peer_array[cancel_idx] = peer;
++ loster = peer_array[cancel_idx];
++ peer_array[cancel_idx] = peer;
}else
- loster = peer;
+- loster = peer;
++ loster = peer;
}else{
- if(peer->RateDL() > peer_array[cancel_idx]->RateDL()){
-+// if(peer->RateDL() > peer_array[cancel_idx]->RateDL()){
+- loster = peer_array[cancel_idx];
+- peer_array[cancel_idx] = peer;
+ if( peer->RateDL() > peer_array[cancel_idx]->RateDL()
+ // If equal, reciprocate to the peer we've sent less to, proportionally
+ ||(peer_array[cancel_idx]->RateDL() == peer->RateDL()
+ && peer_array[cancel_idx]->TotalUL()
+ / (peer_array[cancel_idx]->TotalDL()+.001)
+ > peer->TotalUL() / (peer->TotalDL()+.001)) ){
- loster = peer_array[cancel_idx];
- peer_array[cancel_idx] = peer;
++ loster = peer_array[cancel_idx];
++ peer_array[cancel_idx] = peer;
}else
-@@ -559,15 +709,56 @@
+- loster = peer;
++ loster = peer;
}
// opt unchoke
@@ -1717,8 +14009,8 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
+ }
+ else
+ // The last slot is for the optimistic unchoke.
-+ // Bump the loser into it if he's been waiting longer than the occupant.
-+ if((btPeer*) 0 == peer_array[MAX_UNCHOKE] || PEER_IS_FAILED(peer_array[MAX_UNCHOKE]))
++ if( (btPeer*) 0 == peer_array[MAX_UNCHOKE] ||
++ PEER_IS_FAILED(peer_array[MAX_UNCHOKE]) )
peer_array[MAX_UNCHOKE] = loster;
- else{
- if(loster->GetLastUnchokeTime() < peer_array[MAX_UNCHOKE]->GetLastUnchokeTime())
@@ -1726,21 +14018,34 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
- else{
- if(loster->SetLocal(M_CHOKE) < 0) loster->CloseConnection();
+ else {
-+// if(loster->GetLastUnchokeTime() < peer_array[MAX_UNCHOKE]->GetLastUnchokeTime()) {
++ if( !r-- ){
++ rndbits = random();
++ r = 15;
++ }
+ // if loser is empty and current is not, loser gets 75% chance.
-+ if( loster->bitfield.IsEmpty() && !peer_array[MAX_UNCHOKE]->bitfield.IsEmpty()
-+ && random()&03 ) {
++ if( loster->IsEmpty() && !peer_array[MAX_UNCHOKE]->IsEmpty()
++ && (rndbits>>=2)&3 ) {
+ btPeer* tmp = peer_array[MAX_UNCHOKE];
+ peer_array[MAX_UNCHOKE] = loster;
+ loster = tmp;
-+ } else // if loser waited longer:
-+ if(loster->GetLastUnchokeTime() < peer_array[MAX_UNCHOKE]->GetLastUnchokeTime()) {
++ } else
++ // This mess chooses the loser:
++ // if loser is choked and current is not
++ // OR if both are choked and loser has waited longer
++ // OR if both are unchoked and loser has had less time unchoked.
++ if( (!loster->Is_Local_UnChoked() &&
++ ( peer_array[MAX_UNCHOKE]->Is_Local_UnChoked() ||
++ loster->GetLastUnchokeTime() <
++ peer_array[MAX_UNCHOKE]->GetLastUnchokeTime() )) ||
++ (peer_array[MAX_UNCHOKE]->Is_Local_UnChoked() &&
++ peer_array[MAX_UNCHOKE]->GetLastUnchokeTime() <
++ loster->GetLastUnchokeTime()) ){
+ // if current is empty and loser is not, loser gets 25% chance;
+ // else loser wins.
+ // transformed to: if loser is empty or current isn't, or 25% chance,
+ // then loser wins.
-+ if( !peer_array[MAX_UNCHOKE]->bitfield.IsEmpty() || loster->bitfield.IsEmpty()
-+ || !random()&03 ) {
++ if( !peer_array[MAX_UNCHOKE]->IsEmpty() || loster->IsEmpty()
++ || !((rndbits>>=2)&3) ) {
+ btPeer* tmp = peer_array[MAX_UNCHOKE];
+ peer_array[MAX_UNCHOKE] = loster;
+ loster = tmp;
@@ -1770,10 +14075,70 @@ diff -u ctorrent-1.3.4.orig/peerlist.cpp ctorrent-1.3.4/peerlist.cpp
+ }
+}
+
-diff -u ctorrent-1.3.4.orig/peerlist.h ctorrent-1.3.4/peerlist.h
---- ctorrent-1.3.4.orig/peerlist.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/peerlist.h 2005-08-11 23:45:29.434692920 +0200
-@@ -18,7 +18,8 @@
++btPeer* PeerList::GetNextPeer(btPeer *peer)
++{
++ static PEERNODE *p = m_head;
++
++ if( 0==peer ) p = m_head;
++ else if( p->peer == peer ){
++ p = p->next;
++ }else{
++ for( p=m_head; p && (p->peer != peer); p = p->next);
++ if( 0 == p->peer ){
++ p = m_head;
++ }else{
++ p = p->next;
++ }
++ }
++ for( ; p; p = p->next)
++ if( p->peer && PEER_IS_SUCCESS(p->peer) ) break;
++
++ if(p) return p->peer;
++ else return (btPeer*) 0;
++}
++
++// This is used to un-standby peers when we enter endgame mode.
++// It re-evaluates at most once per second for CPU efficiency, so isn't used
++// when greatest accuracy is desired.
++int PeerList::Endgame()
++{
++ static time_t timestamp = 0;
++ static int endgame = 0;
++
++ if( now > timestamp ){
++ timestamp = now;
++ if( arg_file_to_download ){
++ BitField afdBitField = *BTCONTENT.pBF;
++ afdBitField.Except(*BTCONTENT.pBFilter);
++ endgame = ( BTCONTENT.getFilePieces(arg_file_to_download)
++ - afdBitField.Count() ) < WORLD.TotalPeers();
++ }else
++ endgame = ( WORLD.Pieces_I_Can_Get() - BTCONTENT.pBF->Count() )
++ < WORLD.TotalPeers();
++ }
++ return endgame;
++}
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/peerlist.h ctorrent-1.3.4/peerlist.h
+--- ctorrent-1.3.4.sav/peerlist.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/peerlist.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,14 +1,13 @@
+ #ifndef PEERLIST_H
+ #define PEERLIST_H
+
+-#include <sys/types.h>
+ #include "./def.h"
++#include <sys/types.h>
+ #include "./peer.h"
+ #include "./rate.h"
+
+ typedef struct _peernode{
+ btPeer *peer;
+- size_t click;
+ struct _peernode *next;
+ }PEERNODE;
+
+@@ -18,7 +17,8 @@
SOCKET m_listen_sock;
PEERNODE *m_head;
size_t m_peers_count;
@@ -1783,45 +14148,58 @@ diff -u ctorrent-1.3.4.orig/peerlist.h ctorrent-1.3.4/peerlist.h
unsigned char m_live_idx:2;
unsigned char m_reserved:6;
-@@ -50,9 +51,12 @@
+@@ -26,7 +26,6 @@
+ Rate m_pre_dlrate, m_pre_ulrate;
+
+ int Accepter();
+- void Sort();
+ void UnChokeCheck(btPeer* peer,btPeer *peer_array[]);
+
+ public:
+@@ -50,9 +49,16 @@
void Tell_World_I_Have(size_t idx);
btPeer* Who_Can_Abandon(btPeer *proposer);
-+ btPeer* Who_Can_Duplicate(btPeer *proposer, size_t idx);
++ size_t What_Can_Duplicate(BitField &bf, btPeer *proposer, size_t idx);
++ void FindValuedPieces(BitField &bf, btPeer *proposer, int initial);
++ btPeer *WhoHas(size_t idx);
+ void CancelSlice(size_t idx, size_t off, size_t len);
void CheckBitField(BitField &bf);
int AlreadyRequested(size_t idx);
size_t Pieces_I_Can_Get();
+ void CheckInterest();
++ btPeer* GetNextPeer(btPeer *peer);
++ int Endgame();
};
extern PeerList WORLD;
-diff -u ctorrent-1.3.4.orig/rate.cpp ctorrent-1.3.4/rate.cpp
---- ctorrent-1.3.4.orig/rate.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/rate.cpp 2005-08-11 23:45:29.434692920 +0200
-@@ -1,5 +1,7 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/rate.cpp ctorrent-1.3.4/rate.cpp
+--- ctorrent-1.3.4.sav/rate.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/rate.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -1,14 +1,17 @@
#include "rate.h"
-
-+#define RATE_INTERVAL 20
++#include "bttime.h"
+
++#define RATE_INTERVAL 20
+
void Rate::StartTimer()
{
- if( !m_last_timestamp ) time(&m_last_timestamp);
-@@ -7,7 +9,7 @@
+- if( !m_last_timestamp ) time(&m_last_timestamp);
++ if( !m_last_timestamp ) m_last_timestamp = now;
+ }
void Rate::StopTimer()
{
- if( !m_last_timestamp ){
+- m_total_timeused += (time((time_t*) 0) - m_last_timestamp);
+ if( m_last_timestamp ){
- m_total_timeused += (time((time_t*) 0) - m_last_timestamp);
++ m_total_timeused += (now - m_last_timestamp);
m_last_timestamp = 0;
}
-@@ -15,7 +17,27 @@
-
+ }
+@@ -16,27 +19,61 @@
void Rate::CountAdd(size_t nbytes)
{
-+ time_t now = time((time_t*) 0);
-+
m_count_bytes += nbytes;
+
+ // save bandwidth history data
@@ -1844,14 +14222,18 @@ diff -u ctorrent-1.3.4.orig/rate.cpp ctorrent-1.3.4/rate.cpp
}
void Rate::operator=(const Rate &ra)
-@@ -26,17 +48,33 @@
+ {
+- m_last_timestamp = time((time_t*) 0);
++ m_last_timestamp = now;
+ m_count_bytes = ra.m_count_bytes;
+ }
size_t Rate::RateMeasure() const
{
- time_t timeused = m_total_timeused;
- if( m_last_timestamp ) timeused += (time((time_t*) 0) - m_last_timestamp);
+ // calculate rate based on bandwidth history data
-+ time_t timestamp = time((time_t*) 0);
++ time_t timestamp = now;
+ u_int64_t countbytes = 0;
+ time_t timeused = 0;
+
@@ -1872,8 +14254,9 @@ diff -u ctorrent-1.3.4.orig/rate.cpp ctorrent-1.3.4/rate.cpp
size_t Rate::RateMeasure(const Rate &ra_to) const
{
+- time_t timeused = time((time_t*) 0) - m_last_timestamp;
+ int tmp;
- time_t timeused = time((time_t*) 0) - m_last_timestamp;
++ time_t timeused = now - m_last_timestamp;
if( timeused < 1 ) timeused = 1;
- return (size_t)((ra_to.m_count_bytes - m_count_bytes) / timeused);
+ tmp = (ra_to.m_count_bytes - ra_to.m_recent_base)
@@ -1882,15 +14265,20 @@ diff -u ctorrent-1.3.4.orig/rate.cpp ctorrent-1.3.4/rate.cpp
}
time_t Rate::TimeUsed(const time_t *pnow) const
-diff -u ctorrent-1.3.4.orig/rate.h ctorrent-1.3.4/rate.h
---- ctorrent-1.3.4.orig/rate.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/rate.h 2005-08-11 23:45:29.434692920 +0200
-@@ -5,14 +5,29 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/rate.h ctorrent-1.3.4/rate.h
+--- ctorrent-1.3.4.sav/rate.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/rate.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,18 +1,33 @@
+ #ifndef RATE_H
+ #define RATE_H
+
++#include "def.h"
+ #include <sys/types.h>
#include <time.h>
- #include "def.h"
-
-+#define MAX_SAMPLES 20
+-#include "def.h"
+
++#define MAX_SAMPLES 20
+
class Rate{
private:
time_t m_last_timestamp;
@@ -1917,10 +14305,450 @@ diff -u ctorrent-1.3.4.orig/rate.h ctorrent-1.3.4/rate.h
void StartTimer();
void StopTimer();
void CountAdd(size_t nbytes);
-diff -u ctorrent-1.3.4.orig/sigint.cpp ctorrent-1.3.4/sigint.cpp
---- ctorrent-1.3.4.orig/sigint.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/sigint.cpp 2005-08-11 23:45:29.434692920 +0200
-@@ -4,17 +4,27 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/README-DNH.TXT ctorrent-1.3.4/README-DNH.TXT
+--- ctorrent-1.3.4.sav/README-DNH.TXT 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/README-DNH.TXT 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,239 @@
++
++ Enhanced CTorrent
++
++ [ [1]Overview | [2]News | [3]Changes | [4]CTCS | [5]Download |
++ [6]Resources | [7]Contact ]
++ _________________________________________________________________
++
++ Overview
++
++ [8]CTorrent is a [9]BitTorrent client implemented in C++ to be
++ lightweight and quick. It has fallen a little behind in updates and
++ bug fixes though.
++
++ The files here contain the good work of those who wrote the original
++ CTorrent base code and a number of patches that provide fixes and
++ enhancements, as well as additional fixes and enhancements that I am
++ contributing. I am not the original author, current maintainer, or any
++ other official representative of CTorrent. The files on this page are
++ not the original or official CTorrent distribution. I encourage you to
++ visit the [10]CTorrent project page on SourceForge for further
++ information.
++
++ Features
++
++ The purpose of the Enhanced CTorrent effort is to fix problems that
++ remain in the code, modernize existing features and algorithms, and
++ implement new features while maintaining low overhead requirements and
++ a high standard of performance (both part of the original CTorrent
++ design philosophy). Highlights of the enhanced client include:
++ * Support for large files (>2GB) and large torrents (>255 files)
++ * Strategic selection of pieces to request for download
++ * Continuous queueing of download requests, tuned based on latency
++ and throughput for each peer
++ * Improved download performance, including parallel requests in
++ initial and endgame modes
++ * Improved bandwidth regulation
++ * Improved compatibility with other peers
++ * Performance optimization and bug fixes
++ * An interface for monitoring and managing multiple clients
++
++ Status Line
++
++ The status line that is output by the client has changed since the
++ original and deserves some explanation.
++
++ / 0/33/110 [672/672/672] 0MB,1130MB | 0,20K/s | 0,0K E:0,31
++ - - -- --- --- --- --- --- ------ - -- - - - --
++ A B C D E F G H I J K L M N O
++
++ A: Ticker; this character changes to indicate that the client is
++ running.
++ B: Number of seeders (complete peers) to which you are connected.
++ C: Number of leechers (incomplete peers) to which you are connected.
++ D: Total number of peers in the swarm, as last reported by the
++ tracker.
++ E: Number of pieces of the torrent that you have completed.
++ F: Number of pieces currently available from you and your connected
++ peers.
++ G: Total number of pieces in the torrent.
++ H: Total amount of data you have downloaded.
++ I: Total amount of data you have uploaded.
++ J: Your current total download rate.
++ K: Your current total upload rate.
++ L: Amount of data downloaded since the last status line update.
++ M: Amount of data uploaded since the last status line update.
++ N: Number of tracker connection errors.
++ O: Number of successful tracker connections.
++
++ Peer ID
++
++ Beginning with dnh1.1 the default peer ID has been changed for
++ convenience, as some other clients and trackers assume that Ctorrent
++ is "buggy" and won't cooperate with it. [Guess what, there are plenty
++ of others with bugs too.] The -P option is still available if you wish
++ to use a different peer ID, but it is no longer necessary to do so in
++ order to avoid this "ban".
++
++ The new default peer ID prefix is "-CDversion-", where version is an
++ indication of the version number (0101 for dnh1.1).
++
++ CTCS
++
++ [11]CTorrent Control Server (CTCS) is an interface for monitoring and
++ managing Enhanced CTorrent clients. It can manage allocation of
++ bandwidth, provide status information, and allow changes to the
++ running configuration of each client. Support for this interface was
++ added in the dnh2 release.
++ _________________________________________________________________
++
++ News
++
++ 2006-01-15
++ Version dnh2 is released! This version includes a number of
++ significant [12]changes, including large file support, piece
++ selection, tuned request queue depth, and support for
++ [13]CTorrent Control Server.
++ _________________________________________________________________
++
++ Changes
++
++ For a list of changes in the current and previous versions, see the
++ [14]ChangeLog file.
++ _________________________________________________________________
++
++ Download
++
++ Release dnh2
++ The patch files for this version are significantly larger
++ than in previous releases. It will be faster and easier to just
++ download the patched source distribution below.
++
++ [15]dnh1.2 to dnh2 patch file
++ A patch file of changes to release dnh1.2 to bring it up to dnh2.
++
++ [16]Patch file
++ A patch file of changes to the CTorrent 1.3.4 base.
++
++ [17]Patched source
++ A complete source distribution for all platforms.
++ ___________________________________
++
++ Release dnh1.2
++ Note: If you get a message about needing to install OpenSSL, you might
++ want to try the FreeBSD patch/version even if you are not using
++ FreeBSD.
++
++ [18]dnh1.1 to dnh1.2 patch file
++ A patch file of changes to release dnh1.1 to bring it up to dnh1.2.
++
++ [19]FreeBSD patch file
++ A patch file of changes to the CTorrent 1.3.4 base, including the
++ patches from the FreeBSD ports tree.
++
++ [20]Patch file
++ A patch file of changes to the CTorrent 1.3.4 base.
++
++ [21]FreeBSD patched source
++ This includes the patches from the FreeBSD ports tree.
++
++ [22]Linux/Windows/Other patched source
++ Please [23]let me know if you encounter any portability issues, as I
++ don't have a test environment set up for these platforms.
++ ___________________________________
++
++ Bitfield::Invert patch
++
++ [24]Bitfield::Invert patch
++ See notes in the change log; this is needed if you are using dnh1.1,
++ dnh1, or ctorrent-1.3.4.
++ ___________________________________
++
++ Release dnh1.1
++
++ [25]dnh1 to dnh1.1 patch file
++ A patch file of changes to release dnh1 to bring it up to dnh1.1.
++ ___________________________________
++
++ Release dnh1
++
++ [26]FreeBSD patch file
++ A patch file of changes to the CTorrent 1.3.4 base, including the
++ patches from the FreeBSD ports tree.
++ Note: Thanks to Florent Thoumie, as of 29 Jul 2005 this patchset is
++ included in the FreeBSD port. If you update your ports tree (or at
++ least net/ctorrent) and install from there, you will have these
++ updates without downloading the file and patching manually.
++
++ [27]Patch file
++ A patch file of changes to the CTorrent 1.3.4 base.
++
++ [28]FreeBSD patched source
++ This includes the patches from the FreeBSD ports tree.
++
++ [29]Linux/Windows/Other patched source
++ Please [30]let me know if you encounter any portability issues, as I
++ don't have a test environment set up for these platforms.
++ _________________________________________________________________
++
++ Resources
++
++ [31]CTorrent Home Page
++ Outdated, but you may find some useful info (particularly the FAQ).
++
++ [32]CTorrent SourceForge Project
++ Hosts the CTorrent codebase, bug reports, patches, and forum.
++
++ [33]Custom CTorrent
++ A page by the author of the "get1file" patch and other fixes. It
++ contains a custom version and a GUI for CTorrent.
++
++ [34]BitTorrent
++ The official BitTorrent home page.
++
++ [35]BitTorrent wiki
++ Various documentation.
++
++ [36]BitTorrent protocol specification (official version)
++
++ [37]BitTorrent protocol specification (wiki version)
++
++References
++
++ 1. http://www.rahul.net/dholmes/ctorrent/index.html#info
++ 2. http://www.rahul.net/dholmes/ctorrent/index.html#news
++ 3. http://www.rahul.net/dholmes/ctorrent/changelog.html
++ 4. http://www.rahul.net/dholmes/ctorrent/ctcs.html
++ 5. http://www.rahul.net/dholmes/ctorrent/index.html#download
++ 6. http://www.rahul.net/dholmes/ctorrent/index.html#resources
++ 7. mailto:dholmes@ct.boxmail.com
++ 8. http://ctorrent.sourceforge.net/
++ 9. http://www.bittorrent.com/
++ 10. http://sourceforge.net/projects/ctorrent/
++ 11. http://www.rahul.net/dholmes/ctorrent/ctcs.html
++ 12. http://www.rahul.net/dholmes/ctorrent/changelog.html
++ 13. http://www.rahul.net/dholmes/ctorrent/ctcs.html
++ 14. http://www.rahul.net/dholmes/ctorrent/changelog.html
++ 15. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1.2-dnh2.diff
++ 16. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh2.diff
++ 17. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh2.tar.gz
++ 18. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1.1-dnh1.2.diff
++ 19. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.2-fbsd.diff
++ 20. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.2.diff
++ 21. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.2-fbsd.tar.gz
++ 22. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.2.tar.gz
++ 23. mailto:dholmes@ct.boxmail.com
++ 24. http://www.rahul.net/dholmes/ctorrent/patch-invert.diff
++ 25. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-dnh1-dnh1.1.diff
++ 26. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1-fbsd.diff
++ 27. http://www.rahul.net/dholmes/ctorrent/patchset-ctorrent-1.3.4-dnh1.diff
++ 28. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1-fbsd.tar.gz
++ 29. http://www.rahul.net/dholmes/ctorrent/ctorrent-1.3.4-dnh1.tar.gz
++ 30. mailto:dholmes@ct.boxmail.com
++ 31. http://ctorrent.sourceforge.net/
++ 32. http://sourceforge.net/projects/ctorrent/
++ 33. http://customctorrent.ifreepages.com/
++ 34. http://bittorrent.com/
++ 35. http://wiki.theory.org/CategoryBitTorrent
++ 36. http://www.bittorrent.com/protocol.html
++ 37. http://wiki.theory.org/BitTorrentSpecification
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sha1.c ctorrent-1.3.4/sha1.c
+--- ctorrent-1.3.4.sav/sha1.c 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/sha1.c 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,146 @@
++#include <string.h>
++
++#include "sha1.h"
++
++#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
++
++/* blk0() and blk() perform the initial expand. */
++/* I got the idea of expanding during the round function from SSLeay */
++#if (defined(BYTE_ORDER) && BYTE_ORDER==LITTLE_ENDIAN) || (!defined(BYTE_ORDER) && defined(LITTLE_ENDIAN))
++#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
++ |(rol(block->l[i],8)&0x00FF00FF))
++#else
++#define blk0(i) block->l[i]
++#endif
++#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
++ ^block->l[(i+2)&15]^block->l[i&15],1))
++
++/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
++#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
++#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
++#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
++#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
++#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
++
++
++/* Hash a single 512-bit block. This is the core of the algorithm. */
++
++void SHA1Transform(unsigned long state[5], unsigned char buffer[64])
++{
++unsigned long a, b, c, d, e;
++typedef union {
++ unsigned char c[64];
++ unsigned long l[16];
++} CHAR64LONG16;
++CHAR64LONG16* block;
++#ifdef SHA1HANDSOFF
++static unsigned char workspace[64];
++ block = (CHAR64LONG16*)workspace;
++ memcpy(block, buffer, 64);
++#else
++ block = (CHAR64LONG16*)buffer;
++#endif
++ /* Copy context->state[] to working vars */
++ a = state[0];
++ b = state[1];
++ c = state[2];
++ d = state[3];
++ e = state[4];
++ /* 4 rounds of 20 operations each. Loop unrolled. */
++ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
++ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
++ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
++ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
++ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
++ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
++ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
++ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
++ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
++ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
++ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
++ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
++ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
++ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
++ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
++ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
++ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
++ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
++ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
++ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
++ /* Add the working vars back into context.state[] */
++ state[0] += a;
++ state[1] += b;
++ state[2] += c;
++ state[3] += d;
++ state[4] += e;
++ /* Wipe variables */
++ a = b = c = d = e = 0;
++}
++
++
++/* SHA1Init - Initialize new context */
++
++void SHA1Init(SHA1_CTX* context)
++{
++ /* SHA1 initialization constants */
++ context->state[0] = 0x67452301;
++ context->state[1] = 0xEFCDAB89;
++ context->state[2] = 0x98BADCFE;
++ context->state[3] = 0x10325476;
++ context->state[4] = 0xC3D2E1F0;
++ context->count[0] = context->count[1] = 0;
++}
++
++
++/* Run your data through this. */
++
++void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len)
++{
++unsigned int i, j;
++
++ j = (context->count[0] >> 3) & 63;
++ if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
++ context->count[1] += (len >> 29);
++ if ((j + len) > 63) {
++ memcpy(&context->buffer[j], data, (i = 64-j));
++ SHA1Transform(context->state, context->buffer);
++ for ( ; i + 63 < len; i += 64) {
++ SHA1Transform(context->state, &data[i]);
++ }
++ j = 0;
++ }
++ else i = 0;
++ memcpy(&context->buffer[j], &data[i], len - i);
++}
++
++
++/* Add padding and return the message digest. */
++
++void SHA1Final(unsigned char digest[20], SHA1_CTX* context)
++{
++unsigned long i, j;
++unsigned char finalcount[8];
++
++ for (i = 0; i < 8; i++) {
++ finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
++ >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
++ }
++ SHA1Update(context, (unsigned char *)"\200", 1);
++ while ((context->count[0] & 504) != 448) {
++ SHA1Update(context, (unsigned char *)"\0", 1);
++ }
++ SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
++ for (i = 0; i < 20; i++) {
++ digest[i] = (unsigned char)
++ ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
++ }
++ /* Wipe variables */
++ i = j = 0;
++ memset(context->buffer, 0, 64);
++ memset(context->state, 0, 20);
++ memset(context->count, 0, 8);
++ memset(&finalcount, 0, 8);
++#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */
++ SHA1Transform(context->state, context->buffer);
++#endif
++}
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sha1.h ctorrent-1.3.4/sha1.h
+--- ctorrent-1.3.4.sav/sha1.h 1970-01-01 01:00:00.000000000 +0100
++++ ctorrent-1.3.4/sha1.h 2006-06-28 19:30:02.000000000 +0200
+@@ -0,0 +1,43 @@
++#ifndef SHA1_H
++#define SHA1_H
++
++/*
++SHA-1 in C
++By Steve Reid <steve@edmweb.com>
++100% Public Domain
++
++Test Vectors (from FIPS PUB 180-1)
++"abc"
++ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
++"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
++ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
++A million repetitions of "a"
++ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
++*/
++
++#include <sys/types.h>
++
++/* #define LITTLE_ENDIAN * This should be #define'd if true. */
++/* #define SHA1HANDSOFF * Copies data before messing with it. */
++#define SHA1HANDSOFF
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef struct {
++ unsigned long state[5];
++ unsigned long count[2];
++ unsigned char buffer[64];
++} SHA1_CTX;
++
++void SHA1Transform(unsigned long state[5], unsigned char buffer[64]);
++void SHA1Init(SHA1_CTX* context);
++void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len);
++void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sigint.cpp ctorrent-1.3.4/sigint.cpp
+--- ctorrent-1.3.4.sav/sigint.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/sigint.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -4,17 +4,28 @@
#include <signal.h>
#include "btcontent.h"
@@ -1934,6 +14762,7 @@ diff -u ctorrent-1.3.4.orig/sigint.cpp ctorrent-1.3.4/sigint.cpp
{
- if(SIGINT == sig_no){
+ if(SIGINT == sig_no || SIGTERM == sig_no){
++ if( Tracker.IsPaused() ) Tracker.ClearPause();
+ Tracker.SetStoped();
+ signal(sig_no,sig_catch2);
+ }
@@ -1952,9 +14781,9 @@ diff -u ctorrent-1.3.4.orig/sigint.cpp ctorrent-1.3.4/sigint.cpp
}
}
-diff -u ctorrent-1.3.4.orig/sigint.h ctorrent-1.3.4/sigint.h
---- ctorrent-1.3.4.orig/sigint.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/sigint.h 2005-08-11 23:45:29.435692768 +0200
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/sigint.h ctorrent-1.3.4/sigint.h
+--- ctorrent-1.3.4.sav/sigint.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/sigint.h 2006-06-28 19:30:02.000000000 +0200
@@ -2,7 +2,8 @@
#define SIGINT_H
@@ -1965,15 +14794,30 @@ diff -u ctorrent-1.3.4.orig/sigint.h ctorrent-1.3.4/sigint.h
#endif
#endif
-diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
---- ctorrent-1.3.4.orig/tracker.cpp 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/tracker.cpp 2005-08-11 23:45:29.435692768 +0200
-@@ -31,11 +31,12 @@
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/tracker.cpp ctorrent-1.3.4/tracker.cpp
+--- ctorrent-1.3.4.sav/tracker.cpp 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/tracker.cpp 2006-06-28 19:30:02.000000000 +0200
+@@ -20,6 +20,7 @@
+ #include "iplist.h"
+
+ #include "btconfig.h"
++#include "ctcs.h"
+
+ btTracker Tracker;
+
+@@ -27,15 +28,19 @@
+ {
+ memset(m_host,0,MAXHOSTNAMELEN);
+ memset(m_path,0,MAXPATHLEN);
++ memset(m_trackerid,0,PEER_ID_LEN+1);
+
m_sock = INVALID_SOCKET;
m_port = 80;
m_status = T_FREE;
- m_f_started = m_f_stoped = m_f_pause = 0;
+ m_f_started = m_f_stoped = m_f_pause = m_f_completed = 0;
++ m_f_softquit = m_f_restart = 0;
++
m_interval = 15;
m_connect_refuse_click = 0;
@@ -1982,31 +14826,149 @@ diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
}
btTracker::~btTracker()
-@@ -54,7 +55,8 @@
+@@ -54,7 +59,11 @@
m_reponse_buffer.Reset();
time(&m_last_timestamp);
- m_status = T_FREE;
-+ if (m_f_stoped) m_status = T_FINISHED;
++ if (m_f_stoped){
++ m_status = T_FINISHED;
++ if( m_f_restart ) Resume();
++ }
+ else m_status = T_FREE;
}
int btTracker:: _IPsin(char *h, int p, struct sockaddr_in *psin)
-@@ -111,6 +113,13 @@
+@@ -74,8 +83,8 @@
+ if(psin->sin_addr.s_addr == INADDR_NONE){
+ struct hostent *ph = gethostbyname(h);
+ if( !ph || ph->h_addrtype != AF_INET){
+- memset(psin,0,sizeof(struct sockaddr_in));
+- return -1;
++ memset(psin,0,sizeof(struct sockaddr_in));
++ return -1;
+ }
+ memcpy(&psin->sin_addr,ph->h_addr_list[0],sizeof(struct in_addr));
+ }
+@@ -93,7 +102,7 @@
+
+ struct sockaddr_in addr;
+
+- if( decode_query(buf,bufsiz,"failure reason",&ps,&i,QUERY_STR) ){
++ if( decode_query(buf,bufsiz,"failure reason",&ps,&i,(int64_t*) 0,QUERY_STR) ){
+ char failreason[1024];
+ if( i < 1024 ){
+ memcpy(failreason, ps, i);
+@@ -104,14 +113,55 @@
+ strcat(failreason,"...");
+ }
+ fprintf(stderr,"TRACKER FAILURE REASON: %s\n",failreason);
++ if(arg_ctcs){
++ char ctcsinfo[1048];
++ snprintf(ctcsinfo,1048,"TRACKER FAILURE REASON: %s",failreason);
++ CTCS.Send_Info(ctcsinfo);
++ }
+ return -1;
+ }
++ if( decode_query(buf,bufsiz,"warning message",&ps,&i,(int64_t*) 0,QUERY_STR) ){
++ char warnmsg[1024];
++ if( i < 1024 ){
++ memcpy(warnmsg, ps, i);
++ warnmsg[i] = '\0';
++ }else{
++ memcpy(warnmsg, ps, 1000);
++ warnmsg[1000] = '\0';
++ strcat(warnmsg,"...");
++ }
++ fprintf(stderr,"TRACKER WARNING: %s\n",warnmsg);
++ if(arg_ctcs){
++ char ctcsinfo[1048];
++ snprintf(ctcsinfo,1048,"TRACKER WARNING: %s",warnmsg);
++ CTCS.Send_Info(ctcsinfo);
++ }
++ }
+
+- if(!decode_query(buf,bufsiz,"interval",(const char**) 0,&i,QUERY_INT)){return -1;}
++ m_peers_count = 0;
++
++ if( decode_query(buf,bufsiz,"tracker id",&ps,&i,(int64_t*) 0,QUERY_STR) ){
++ if( i <= PEER_ID_LEN ){
++ memcpy(m_trackerid, ps, i);
++ m_trackerid[i] = '\0';
++ }else{
++ memcpy(m_trackerid, ps, PEER_ID_LEN);
++ m_trackerid[PEER_ID_LEN] = '\0';
++ }
++ }
++
++ if(!decode_query(buf,bufsiz,"interval",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)){return -1;}
if(m_interval != (time_t)i) m_interval = (time_t)i;
-+ if(decode_query(buf,bufsiz,"complete",(const char**) 0,&i,QUERY_INT)) {
-+ m_peers_count = i;
+- pos = decode_query(buf,bufsiz,"peers",(const char**) 0,(size_t *) 0,QUERY_POS);
++ if(decode_query(buf,bufsiz,"complete",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)) {
++ m_peers_count += i;
+ }
-+ if(decode_query(buf,bufsiz,"incomplete",(const char**) 0,&i,QUERY_INT)) {
++ if(decode_query(buf,bufsiz,"incomplete",(const char**) 0,&i,(int64_t*) 0,QUERY_INT)) {
+ m_peers_count += i;
+ }
+
- pos = decode_query(buf,bufsiz,"peers",(const char**) 0,(size_t *) 0,QUERY_POS);
++ pos = decode_query(buf,bufsiz,"peers",(const char**) 0,(size_t *) 0,(int64_t*) 0,QUERY_POS);
if( !pos ){
-@@ -161,7 +170,10 @@
+ return -1;
+@@ -123,32 +173,32 @@
+
+ ps = buf-1;
+ if (*ps != 'l') { // binary peers section if not 'l'
+- addr.sin_family = AF_INET;
+- i = 0;
+- while (*ps != ':' ) i = i * 10 + (*ps++ - '0');
+- i /= 6;
+- ps++;
+- while (i-- > 0) {
+- // if peer is not us
+- if(memcmp(&Self.m_sin.sin_addr,ps,sizeof(struct in_addr))) {
+- memcpy(&addr.sin_addr,ps,sizeof(struct in_addr));
+- memcpy(&addr.sin_port,ps+sizeof(struct in_addr),sizeof(unsigned short));
+- cnt++;
+- IPQUEUE.Add(&addr);
+- }
+- ps += 6;
+- }
++ addr.sin_family = AF_INET;
++ i = 0;
++ while (*ps != ':' ) i = i * 10 + (*ps++ - '0');
++ i /= 6;
++ ps++;
++ while (i-- > 0) {
++ // if peer is not us
++ if(memcmp(&Self.m_sin.sin_addr,ps,sizeof(struct in_addr))) {
++ memcpy(&addr.sin_addr,ps,sizeof(struct in_addr));
++ memcpy(&addr.sin_port,ps+sizeof(struct in_addr),sizeof(unsigned short));
++ cnt++;
++ IPQUEUE.Add(&addr);
++ }
++ ps += 6;
++ }
+ }
+ else
+ for( ;bufsiz && *buf!='e'; buf += pos, bufsiz -= pos ){
+ pos = decode_dict(buf,bufsiz,(char*) 0);
+ if(!pos) break;
+- if(!decode_query(buf,pos,"ip",&ps,&i,QUERY_STR) || MAXHOSTNAMELEN < i) continue;
++ if(!decode_query(buf,pos,"ip",&ps,&i,(int64_t*) 0,QUERY_STR) || MAXHOSTNAMELEN < i) continue;
+ memcpy(tmphost,ps,i); tmphost[i] = '\0';
+
+- if(!decode_query(buf,pos,"port",(const char**) 0,&tmpport,QUERY_INT)) continue;
++ if(!decode_query(buf,pos,"port",(const char**) 0,&tmpport,(int64_t*) 0,QUERY_INT)) continue;
+
+- if(!decode_query(buf,pos,"peer id",&ps,&i,QUERY_STR) && i != 20 ) continue;
++ if(!decode_query(buf,pos,"peer id",&ps,&i,(int64_t*) 0,QUERY_STR) && i != 20 ) continue;
+
+ if(_IPsin(tmphost,tmpport,&addr) < 0){
+ fprintf(stderr,"warn, detected invalid ip address %s.\n",tmphost);
+@@ -161,14 +211,17 @@
}
}
@@ -2018,7 +14980,79 @@ diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
return 0;
}
-@@ -230,10 +242,14 @@
+ int btTracker::CheckReponse()
+ {
+ #define MAX_LINE_SIZ 32
+- char *pdata;
++ char *pdata, *format;
+ ssize_t r;
+ size_t q, hlen, dlen;
+
+@@ -186,6 +239,12 @@
+ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 ||
+ error != 0 ){
+ fprintf(stderr,"warn, received nothing from tracker! %s\n",strerror(error));
++ if(arg_ctcs){
++ char ctcsinfo[256];
++ snprintf(ctcsinfo,256,
++ "warn, received nothing from tracker! %s",strerror(error));
++ CTCS.Send_Info(ctcsinfo);
++ }
+ }
+ return -1;
+ }
+@@ -194,6 +253,8 @@
+
+ if( !hlen ){
+ fprintf(stderr,"warn, tracker reponse invalid. No html header found.\n");
++ if(arg_ctcs)
++ CTCS.Send_Info("warn, tracker reponse invalid. No html header found.");
+ return -1;
+ }
+
+@@ -202,21 +263,32 @@
+ if( r == 301 || r == 302 ){
+ char redirect[MAXPATHLEN],ih_buf[20 * 3 + 1],pi_buf[20 * 3 + 1],tmppath[MAXPATHLEN];
+ if( Http_get_header(m_reponse_buffer.BasePointer(), hlen, "Location", redirect) < 0 )
+- return -1;
++ return -1;
+
+ if( Http_url_analyse(redirect,m_host,&m_port,m_path) < 0){
+- fprintf(stderr,"warn, tracker redirect to an invalid url %s!\n", redirect);
+- return -1;
++ fprintf(stderr,"warn, tracker redirect to an invalid url %s!\n", redirect);
++ if(arg_ctcs){
++ char ctcsinfo[256];
++ snprintf(ctcsinfo,256,
++ "warn, tracker redirect to an invalid url %s!", redirect);
++ CTCS.Send_Info(ctcsinfo);
++ }
++ return -1;
+ }
+
+ strcpy(tmppath,m_path);
++
++ if(strchr(m_path, '?'))
++ format=REQ_URL_P1A_FMT;
++ else format=REQ_URL_P1_FMT;
+
+- if(MAXPATHLEN < snprintf(m_path,MAXPATHLEN,REQ_URL_P1_FMT,
+- tmppath,
+- Http_url_encode(ih_buf, (char*)BTCONTENT.GetInfoHash(), 20),
+- Http_url_encode(pi_buf, (char*)BTCONTENT.GetPeerId(), 20),
+- cfg_listen_port)){
+- return -1;
++ if(MAXPATHLEN < snprintf(m_path,MAXPATHLEN,format,
++ tmppath,
++ Http_url_encode(ih_buf, (char*)BTCONTENT.GetInfoHash(), 20),
++ Http_url_encode(pi_buf, (char*)BTCONTENT.GetPeerId(), 20),
++ cfg_listen_port,
++ m_key)){
++ return -1;
+ }
+
+ return Connect();
+@@ -230,10 +302,14 @@
return 0;
}
@@ -2034,7 +15068,123 @@ diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
return _UpdatePeerList(pdata,dlen);
}
-@@ -329,30 +345,34 @@
+@@ -241,6 +317,7 @@
+ int btTracker::Initial()
+ {
+ char ih_buf[20 * 3 + 1],pi_buf[20 * 3 + 1],tmppath[MAXPATHLEN];
++ char *format;
+
+ if(Http_url_analyse(BTCONTENT.GetAnnounce(),m_host,&m_port,m_path) < 0){
+ fprintf(stderr,"error, invalid tracker url format!\n");
+@@ -249,40 +326,50 @@
+
+ strcpy(tmppath,m_path);
+
+- if(MAXPATHLEN < snprintf((char*)m_path,MAXPATHLEN,REQ_URL_P1_FMT,
+- tmppath,
+- Http_url_encode(ih_buf,(char*)BTCONTENT.GetInfoHash(),20),
+- Http_url_encode(pi_buf,(char*)BTCONTENT.GetPeerId(),20),
+- cfg_listen_port)){
++ if(strchr(m_path, '?'))
++ format=REQ_URL_P1A_FMT;
++ else format=REQ_URL_P1_FMT;
++
++ char chars[37] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
++ for(int i=0; i<8; i++)
++ m_key[i] = chars[random()%36];
++ m_key[8] = 0;
++
++ if(MAXPATHLEN < snprintf((char*)m_path,MAXPATHLEN,format,
++ tmppath,
++ Http_url_encode(ih_buf,(char*)BTCONTENT.GetInfoHash(),20),
++ Http_url_encode(pi_buf,(char*)BTCONTENT.GetPeerId(),20),
++ cfg_listen_port,
++ m_key)){
+ return -1;
+ }
+-
++
+ /* get local ip address */
+ // 1st: if behind firewall, this only gets local side
+ {
+ struct sockaddr_in addr;
+ socklen_t addrlen = sizeof(struct sockaddr_in);
+ if(getsockname(m_sock,(struct sockaddr*)&addr,&addrlen) == 0)
+- Self.SetIp(addr);
++ Self.SetIp(addr);
+ }
+ // 2nd: better to use addr of our domain
+ {
+- struct hostent *h;
+- char hostname[128];
+- char *hostdots[2]={0,0}, *hdptr=hostname;
+-
+- if (gethostname(hostname, 128) == -1) return -1;
+-// printf("%s\n", hostname);
+- while(*hdptr) if(*hdptr++ == '.') {
+- hostdots[0] = hostdots[1];
+- hostdots[1] = hdptr;
+- }
+- if (hostdots[0] == 0) return -1;
+-// printf("%s\n", hostdots[0]);
+- if ((h = gethostbyname(hostdots[0])) == NULL) return -1;
+- //printf("Host domain : %s\n", h->h_name);
+- //printf("IP Address : %s\n", inet_ntoa(*((struct in_addr *)h->h_addr)));
+- memcpy(&Self.m_sin.sin_addr,h->h_addr,sizeof(struct in_addr));
++ struct hostent *h;
++ char hostname[128];
++ char *hostdots[2]={0,0}, *hdptr=hostname;
++
++ if (gethostname(hostname, 128) == -1) return -1;
++// printf("%s\n", hostname);
++ while(*hdptr) if(*hdptr++ == '.') {
++ hostdots[0] = hostdots[1];
++ hostdots[1] = hdptr;
++ }
++ if (hostdots[0] == 0) return -1;
++// printf("%s\n", hostdots[0]);
++ if ((h = gethostbyname(hostdots[0])) == NULL) return -1;
++ //printf("Host domain : %s\n", h->h_name);
++ //printf("IP Address : %s\n", inet_ntoa(*((struct in_addr *)h->h_addr)));
++ memcpy(&Self.m_sin.sin_addr,h->h_addr,sizeof(struct in_addr));
+ }
+ return 0;
+ }
+@@ -294,12 +381,33 @@
+
+ if(_s2sin(m_host,m_port,&m_sin) < 0) {
+ fprintf(stderr,"warn, get tracker's ip address failed.");
++ if(arg_ctcs) CTCS.Send_Info("warn, get tracker's ip address failed.");
+ return -1;
+ }
+
+ m_sock = socket(AF_INET,SOCK_STREAM,0);
+ if(INVALID_SOCKET == m_sock) return -1;
+
++ // we only need to bind if we have specified an ip
++ // we need it to bind here before the connect!!!!
++ if ( cfg_listen_ip != 0 ) {
++ struct sockaddr_in addr;
++ // clear the struct as requested in the manpages
++ memset(&addr,0, sizeof(sockaddr_in));
++ // set the type
++ addr.sin_family = AF_INET;
++ // we want the system to choose port
++ addr.sin_port = 0;
++ // set the defined ip from the commandline
++ addr.sin_addr.s_addr = cfg_listen_ip;
++ // bind it or return...
++ if(bind(m_sock,(struct sockaddr*)&addr,sizeof(struct sockaddr_in)) != 0){
++ fprintf(stderr, "warn, can't set up tracker connection: %s\n",
++ strerror(errno));
++ return -1;
++ }
++ }
++
+ if(setfd_nonblock(m_sock) < 0) {CLOSE_SOCKET(m_sock); return -1; }
+
+ r = connect_nonb(m_sock,(struct sockaddr*)&m_sin);
+@@ -329,34 +437,42 @@
// fprintf(stdout,"Old Set Self:");
// fprintf(stdout,"%s\n", inet_ntoa(Self.m_sin.sin_addr));
@@ -2058,47 +15208,83 @@ diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
if(event){
if(MAXPATHLEN < snprintf(REQ_BUFFER,MAXPATHLEN,REQ_URL_P2_FMT,
- m_path,
+- m_path,
- (size_t)Self.TotalUL(),
- (size_t)Self.TotalDL(),
- (size_t)BTCONTENT.GetLeftBytes(),
- event)){
-+ Self.TotalUL(),
-+ Self.TotalDL(),
-+ BTCONTENT.GetLeftBytes(),
-+ event,
-+ cfg_max_peers)){
++ m_path,
++ Self.TotalUL(),
++ Self.TotalDL(),
++ BTCONTENT.GetLeftBytes(),
++ event,
++ cfg_max_peers,
++ m_key)){
return -1;
}
}else{
if(MAXPATHLEN < snprintf(REQ_BUFFER,MAXPATHLEN,REQ_URL_P3_FMT,
- m_path,
+- m_path,
- (size_t)Self.TotalUL(),
- (size_t)Self.TotalDL(),
- (size_t)BTCONTENT.GetLeftBytes()
-+ Self.TotalUL(),
-+ Self.TotalDL(),
-+ BTCONTENT.GetLeftBytes(),
-+ cfg_max_peers
- )){
+- )){
++ m_path,
++ Self.TotalUL(),
++ Self.TotalDL(),
++ BTCONTENT.GetLeftBytes(),
++ cfg_max_peers,
++ m_key)){
return -1;
}
-@@ -380,8 +400,12 @@
+ }
++ if( *m_trackerid &&
++ MAXPATHLEN - strlen(m_path) > 11 + strlen(m_trackerid) )
++ strcat(strcat(m_path, "&trackerid="), m_trackerid);
+
+ if(_IPsin(m_host, m_port, &addr) < 0){
+ char REQ_HOST[MAXHOSTNAMELEN];
+@@ -370,6 +486,12 @@
+
+ if( 0 != m_reponse_buffer.PutFlush(m_sock,REQ_BUFFER,strlen((char*)REQ_BUFFER))){
+ fprintf(stderr,"warn, send request to tracker failed. %s\n",strerror(errno));
++ if(arg_ctcs){
++ char ctcsinfo[256];
++ snprintf(ctcsinfo,256,
++ "warn, send request to tracker failed. %s",strerror(errno));
++ CTCS.Send_Info(ctcsinfo);
++ }
+ return -1;
+ }
+
+@@ -380,23 +502,29 @@
{
/* tracker communication */
if( T_FREE == m_status ){
- if((*pnow - m_last_timestamp >= m_interval) &&
- (cfg_min_peers > WORLD.TotalPeers())){
-+// if(*pnow - m_last_timestamp >= m_interval){
-+ if(*pnow - m_last_timestamp >= m_interval ||
-+ // Connect to tracker early if we run out of peers.
-+ (!WORLD.TotalPeers() && m_prevpeers &&
-+ *pnow - m_last_timestamp >= 15) ){
++ if( *pnow - m_last_timestamp >= m_interval ||
++ // Connect to tracker early if we run low on peers.
++ (WORLD.TotalPeers() < cfg_min_peers && m_prevpeers >= cfg_min_peers &&
++ *pnow - m_last_timestamp >= 15) ||
++ (m_f_pause && !WORLD.TotalPeers()) ){
+ m_prevpeers = WORLD.TotalPeers();
if(Connect() < 0){ Reset(15); return -1; }
-@@ -396,7 +420,7 @@
+ if( m_status == T_CONNECTING ){
+- FD_SET(m_sock, rfdp);
+- FD_SET(m_sock, wfdp);
++ FD_SET(m_sock, rfdp);
++ FD_SET(m_sock, wfdp);
+ }else{
+- FD_SET(m_sock, rfdp);
++ FD_SET(m_sock, rfdp);
+ }
++
++ if( m_f_pause && !WORLD.TotalPeers() ) m_f_stoped = 1;
+ }
+ }else{
if( m_status == T_CONNECTING ){
FD_SET(m_sock, rfdp);
FD_SET(m_sock, wfdp);
@@ -2107,19 +15293,94 @@ diff -u ctorrent-1.3.4.orig/tracker.cpp ctorrent-1.3.4/tracker.cpp
FD_SET(m_sock, rfdp);
}
}
-@@ -425,7 +449,7 @@
+@@ -407,28 +535,60 @@
+ {
+ if( T_FREE == m_status ) return 0;
+
+- if( T_CONNECTING == m_status &&
+- (FD_ISSET(m_sock, wfdp) || FD_ISSET(m_sock,wfdp)) ){
++ if( T_CONNECTING == m_status && FD_ISSET(m_sock,wfdp) ){
+ int error = 0;
+ socklen_t n = sizeof(error);
+ (*nfds)--;
+ FD_CLR(m_sock, wfdp);
+ if(getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n) < 0 ||
+ error != 0 ){
+- if( ECONNREFUSED != error )
+- fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error));
+- else
+- m_connect_refuse_click++;
++ if( ECONNREFUSED != error ){
++ fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error));
++ if(arg_ctcs){
++ char ctcsinfo[256];
++ snprintf(ctcsinfo,256,
++ "warn, connect to tracker failed. %s\n",strerror(error));
++ CTCS.Send_Info(ctcsinfo);
++ }
++ }else
++ m_connect_refuse_click++;
+ Reset(15);
+ return -1;
+ }else{
if( SendRequest() == 0 ) m_status = T_READY;
else { Reset(15); return -1; }
}
- }else if(FD_ISSET(m_sock, rfdp) ){
++ }else if( T_CONNECTING == m_status && FD_ISSET(m_sock,rfdp) ){
++ int error = 0;
++ socklen_t n = sizeof(error);
++ (*nfds)--;
++ FD_CLR(m_sock, rfdp);
++ getsockopt(m_sock, SOL_SOCKET,SO_ERROR,&error,&n);
++ fprintf(stderr,"warn, connect to tracker failed. %s\n",strerror(error));
++ if(arg_ctcs){
++ char ctcsinfo[256];
++ snprintf(ctcsinfo,256,
++ "warn, connect to tracker failed. %s\n",strerror(error));
++ CTCS.Send_Info(ctcsinfo);
++ }
++ Reset(15);
++ return -1;
+ }else if(INVALID_SOCKET != m_sock && FD_ISSET(m_sock, rfdp) ){
(*nfds)--;
FD_CLR(m_sock,rfdp);
CheckReponse();
-diff -u ctorrent-1.3.4.orig/tracker.h ctorrent-1.3.4/tracker.h
---- ctorrent-1.3.4.orig/tracker.h 2004-09-09 01:10:51.000000000 +0200
-+++ ctorrent-1.3.4/tracker.h 2005-08-11 23:45:29.436692616 +0200
-@@ -21,6 +21,7 @@
+ }
+ return 0;
+ }
++
++void btTracker::Resume()
++{
++ m_f_pause = m_f_stoped = 0;
++
++ if( T_FINISHED == m_status ){
++ m_status = T_FREE;
++ m_f_started = 0;
++ m_interval = 15;
++ }
++}
++
+diff -ur --unidirectional-new-file ctorrent-1.3.4.sav/tracker.h ctorrent-1.3.4/tracker.h
+--- ctorrent-1.3.4.sav/tracker.h 2006-06-28 19:00:54.000000000 +0200
++++ ctorrent-1.3.4/tracker.h 2006-06-28 19:30:02.000000000 +0200
+@@ -1,9 +1,9 @@
+ #ifndef TRACKER_H
+ #define TRACKER_H
+
++#include "./def.h"
+ #include <sys/types.h>
+
+-#include "./def.h"
+ #include "./bufio.h"
+
+ #ifdef WINDOWS
+@@ -18,9 +18,12 @@
+ #include <sys/param.h>
+ #endif
+
++#include "btconfig.h"
++
#define T_FREE 0
#define T_CONNECTING 1
#define T_READY 2
@@ -2127,7 +15388,15 @@ diff -u ctorrent-1.3.4.orig/tracker.h ctorrent-1.3.4/tracker.h
class btTracker
{
-@@ -34,15 +35,20 @@
+@@ -28,21 +31,29 @@
+ char m_host[MAXHOSTNAMELEN];
+ char m_path[MAXPATHLEN];
+ int m_port;
++ char m_key[9];
++ char m_trackerid[PEER_ID_LEN+1];
+
+ struct sockaddr_in m_sin;
+
unsigned char m_status:2;
unsigned char m_f_started:1;
unsigned char m_f_stoped:1;
@@ -2135,7 +15404,8 @@ diff -u ctorrent-1.3.4.orig/tracker.h ctorrent-1.3.4/tracker.h
unsigned char m_f_pause:1;
- unsigned char m_f_reserved:3;
-+ unsigned char m_f_reserved:2;
++ unsigned char m_f_softquit:1;
++ unsigned char m_f_restart:1;
time_t m_interval; // ÓëTrackerͨÐŵÄʱ¼ä¼ä¸ô
@@ -2149,16 +15419,22 @@ diff -u ctorrent-1.3.4.orig/tracker.h ctorrent-1.3.4/tracker.h
SOCKET m_sock;
BufIo m_reponse_buffer;
-@@ -66,6 +72,8 @@
+@@ -65,6 +76,14 @@
+
void SetPause() { m_f_pause = 1; }
void ClearPause() { m_f_pause = 0; }
-
-+ void SetStoped() { Reset(15); m_f_stoped = 1; m_last_timestamp -= 15;}
++ int IsPaused() const { return m_f_pause; }
++ void Resume();
++ void SoftQuit() { m_f_softquit = 1; }
++ void DontQuit() { m_f_softquit = 0; }
++ int IsQuitting() const { return m_f_softquit; }
++ void SetRestart() { m_f_restart = 1; }
+
++ void SetStoped() { Reset(15); m_f_stoped = 1; m_last_timestamp -= 15;}
+
int Connect();
int SendRequest();
- int CheckReponse();
-@@ -73,6 +81,8 @@
+@@ -73,6 +92,8 @@
int SocketReady(fd_set *rfdp, fd_set *wfdp, int *nfds);
size_t GetRefuseClick() const { return m_connect_refuse_click; }
diff --git a/packages/cyrus-sasl/cyrus-sasl-2.1.19/client.c.patch b/packages/cyrus-sasl/cyrus-sasl-2.1.19/client.c.patch
new file mode 100644
index 0000000000..775bc54faa
--- /dev/null
+++ b/packages/cyrus-sasl/cyrus-sasl-2.1.19/client.c.patch
@@ -0,0 +1,11 @@
+--- xx/lib/client.c.orig 2006-07-01 12:32:46.000000000 +0200
++++ xx/lib/client.c 2006-07-01 12:33:01.000000000 +0200
+@@ -61,7 +61,7 @@
+
+ static cmech_list_t *cmechlist; /* global var which holds the list */
+
+-static sasl_global_callbacks_t global_callbacks;
++sasl_global_callbacks_t global_callbacks;
+
+ static int _sasl_client_active = 0;
+
diff --git a/packages/cyrus-sasl/cyrus-sasl_2.1.19.bb b/packages/cyrus-sasl/cyrus-sasl_2.1.19.bb
index 74269364a5..f3148233e5 100644
--- a/packages/cyrus-sasl/cyrus-sasl_2.1.19.bb
+++ b/packages/cyrus-sasl/cyrus-sasl_2.1.19.bb
@@ -5,7 +5,8 @@ LICENSE = "BSD"
PR = "r9"
SRC_URI = "ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-${PV}.tar.gz \
- file://berkdb.m4.patch;patch=1"
+ file://berkdb.m4.patch;patch=1 \
+ file://client.c.patch;patch=1"
inherit autotools
diff --git a/packages/debianutils/debianutils_2.16.1.bb b/packages/debianutils/debianutils_2.16.1.bb
new file mode 100644
index 0000000000..b20ae66108
--- /dev/null
+++ b/packages/debianutils/debianutils_2.16.1.bb
@@ -0,0 +1 @@
+include debianutils.inc
diff --git a/packages/efl++/efl++-fb_cvs.bb b/packages/efl++/efl++-fb_cvs.bb
new file mode 100644
index 0000000000..071b1d58cc
--- /dev/null
+++ b/packages/efl++/efl++-fb_cvs.bb
@@ -0,0 +1,9 @@
+include efl++.inc
+
+PV = "0.1.0+cvs${SRCDATE}"
+
+SRC_URI = "cvs://anonymous@projects.linuxtogo.org/cvsroot/eflpp;module=efl++"
+S = "${WORKDIR}/efl++"
+
+
+
diff --git a/packages/efl++/efl++-x11_cvs.bb b/packages/efl++/efl++-x11_cvs.bb
new file mode 100644
index 0000000000..016f1b1b65
--- /dev/null
+++ b/packages/efl++/efl++-x11_cvs.bb
@@ -0,0 +1,10 @@
+include efl++.inc
+
+EXTRA_QMAKEVARS_POST += "CONFIG+=eflecorex11"
+PV = "0.1.0+cvs${SRCDATE}"
+
+SRC_URI = "cvs://anonymous@projects.linuxtogo.org/cvsroot/eflpp;module=efl++"
+S = "${WORKDIR}/efl++"
+
+
+
diff --git a/packages/efl++/efl++.inc b/packages/efl++/efl++.inc
index b560826662..4eba64bd12 100644
--- a/packages/efl++/efl++.inc
+++ b/packages/efl++/efl++.inc
@@ -4,7 +4,7 @@ LICENSE = "LGPL"
AUTHOR = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
MAINTAINER = "${AUTHOR}"
HOMEPAGE = "http://www.Vanille.de/projects/efl++.html"
-DEPENDS = "virtual/evas virtual/ecore edje libsigc++-2.0"
+DEPENDS = "virtual/evas virtual/ecore etk edje libsigc++-2.0"
PROVIDES = "virtual/efl++"
SRC_URI = "http://www.Vanille.de/download/efl/efl++_${PV}.tar.bz2 \
diff --git a/packages/fbreader/fbreader_0.7.3d.bb b/packages/fbreader/fbreader_0.7.3d.bb
index a75d2b0de6..2edfb0e7e8 100644
--- a/packages/fbreader/fbreader_0.7.3d.bb
+++ b/packages/fbreader/fbreader_0.7.3d.bb
@@ -1,4 +1,3 @@
-
DESCRIPTION = "FBreader is an ebook reader"
LICENSE = "GPL2"
HOMEPAGE = "http://only.mawhrin.net/fbreader/"
@@ -7,7 +6,7 @@ PRIORITY = "optional"
DEPENDS = "gtk+ enca expat"
MAINTAINER = "Florian Boor <florian@kernelconcepts.de>"
-SRC_URI = "http://only.mawhrin.net/fbreader/fbreader-sources-${PV}.tgz \
+SRC_URI = "http://only.mawhrin.net/fbreader/obsolete/fbreader-sources-${PV}.tgz \
file://fbreader-0.7.3d_buildsys_oe.patch;patch=1"
FILES_${PN} += "${datadir}/FBReader"
diff --git a/packages/libopie/libopie2-1.2.1/.mtn2git_empty b/packages/fluxbox/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libopie/libopie2-1.2.1/.mtn2git_empty
+++ b/packages/fluxbox/.mtn2git_empty
diff --git a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/.mtn2git_empty b/packages/fluxbox/fluxbox-gpe/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/.mtn2git_empty
+++ b/packages/fluxbox/fluxbox-gpe/.mtn2git_empty
diff --git a/packages/fluxbox/fluxbox-gpe/apps.gpe b/packages/fluxbox/fluxbox-gpe/apps.gpe
new file mode 100644
index 0000000000..7aca442752
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe/apps.gpe
@@ -0,0 +1,57 @@
+[app] (title=Panel 0)
+ [Deco] {NONE}
+ [Sticky] {yes}
+[end]
+[app] (title=Panel 1)
+ [Deco] {NONE}
+[end]
+[app] (title=rxvt)
+ [Dimensions] {635 440}
+[end]
+[app] (title=x-terminal-emulator)
+ [Dimensions] {635 440}
+[end]
+[app] (abiword)
+ [Dimensions] {635 440}
+ [Sticky] {no}
+[end]
+[app] (gpe-filemanager)
+ [Dimensions] {635 440}
+ [Sticky] {yes}
+[end]
+[app] (gpe-info)
+ [Dimensions] {424 336}
+[end]
+[app] (gpe-edit)
+ [Dimensions] {635 440}
+[end]
+[app] (gpe-calculator)
+ [Dimensions] {266 321}
+[end]
+[app] (main)
+ [Dimensions] {635 440}
+[end]
+[app] (Gnumeric)
+ [Dimensions] {635 440}
+[end]
+[app] (gpdf)
+ [Dimensions] {635 440}
+[end]
+[app] (main_window)
+ [Dimensions] {635 440}
+[end]
+[app] (gaim)
+ [Dimensions] {635 440}
+[end]
+[app] (gpe-calendar)
+ [Dimensions] {380 343}
+[end]
+[app] (gpe-mini-browser)
+ [Dimensions] {635 440}
+[end]
+[app] (figment)
+ [Dimensions] {635 440}
+[end]
+[app] (gpe-sketchbook)
+ [Dimensions] {471 314}
+[end]
diff --git a/packages/fluxbox/fluxbox-gpe/fluxbox-gpe-session b/packages/fluxbox/fluxbox-gpe/fluxbox-gpe-session
new file mode 100644
index 0000000000..ca0afea35d
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe/fluxbox-gpe-session
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# Session script for fluxbox-gpe, heavily based on matchbox's session script
+#
+
+# Install "apps" file with defaults for GPE usage
+if test -e /usr/share/fluxbox/apps.gpe
+then
+ mkdir -p $HOME/.fluxbox
+ test -e $HOME/.fluxbox/apps || cp /usr/share/fluxbox/apps.gpe $HOME/.fluxbox/apps
+fi
+
+
+if [ -e $HOME/.fluxbox/session ]
+then
+exec $HOME/.fluxbox/session
+fi
+
+if [ -e /usr/share/fluxbox/session ]
+then
+exec /usr/share/fluxbox/session
+fi
+
+# Default files to run if $HOME/.matchbox/session or /etc/matchbox/session
+# dont exist.
+
+matchbox-desktop &
+matchbox-panel --orientation south -no-flip &
+sleep 5
+exec startfluxbox $@
diff --git a/packages/fluxbox/fluxbox-gpe/fluxbox-gpe.session b/packages/fluxbox/fluxbox-gpe/fluxbox-gpe.session
new file mode 100644
index 0000000000..16b7a2703a
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe/fluxbox-gpe.session
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
+
+matchbox-desktop &
+matchbox-panel --orientation south --no-flip&
+sleep 5
+exec startfluxbox $@
+
diff --git a/packages/fluxbox/fluxbox-gpe/gpe-init.patch b/packages/fluxbox/fluxbox-gpe/gpe-init.patch
new file mode 100644
index 0000000000..c9836923d8
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe/gpe-init.patch
@@ -0,0 +1,121 @@
+--- fluxbox-1.0rc/data/init.in.orig 2006-07-02 20:45:39.119045500 +0200
++++ fluxbox-1.0rc/data/init.in 2006-07-02 20:45:43.715332750 +0200
+@@ -1,35 +1,95 @@
++session.screen0.slit.onTop: False
+ session.screen0.slit.placement: BottomRight
++session.screen0.slit.alpha: 255
++session.screen0.slit.onhead: 0
+ session.screen0.slit.direction: Vertical
+-session.screen0.slit.onTop: False
+-session.screen0.slit.autoHide: False
+-session.screen0.tab.placement: Top
++session.screen0.slit.layer: Dock
++session.screen0.slit.maxOver: false
++session.screen0.slit.autoHide: false
++session.screen0.menu.alpha: 255
++session.screen0.iconbar.iconTextPadding: 10l
++session.screen0.iconbar.alignment: Left
++session.screen0.iconbar.wheelMode: Screen
++session.screen0.iconbar.mode: Workspace
++session.screen0.iconbar.deiconifyMode: Follow
++session.screen0.iconbar.iconWidth: 70
++session.screen0.iconbar.usePixmap: true
++session.screen0.window.focus.alpha: 255
++session.screen0.window.unfocus.alpha: 255
++session.screen0.tab.height: 16
+ session.screen0.tab.alignment: Left
+ session.screen0.tab.rotatevertical: True
+-session.screen0.toolbar.onTop: False
+-session.screen0.toolbar.autoHide: False
+-session.screen0.toolbar.placement: BottomCenter
+-session.screen0.toolbar.widthPercent: 66
+-session.screen0.workspaceNames: one,two,three,four
++session.screen0.tab.placement: TopLeft
++session.screen0.tab.width: 64
++session.screen0.tabs.intitlebar: true
++session.screen0.titlebar.left: Stick
++session.screen0.titlebar.right: Minimize Maximize Close
++session.screen0.toolbar.tools: workspacename, prevworkspace, nextworkspace, iconbar, clock
++session.screen0.toolbar.visible: true
++session.screen0.toolbar.layer: Top
++session.screen0.toolbar.placement: TopCenter
++session.screen0.toolbar.onhead: 0
++session.screen0.toolbar.widthPercent: 69
++session.screen0.toolbar.onTop: true
++session.screen0.toolbar.height: 0
++session.screen0.toolbar.alpha: 254
++session.screen0.toolbar.autoHide: false
++session.screen0.toolbar.maxOver: true
++session.screen0.overlay.lineWidth: 1
++session.screen0.overlay.lineStyle: LineSolid
++session.screen0.overlay.joinStyle: JoinMiter
++session.screen0.overlay.capStyle: CapNotLast
++session.screen0.autoRaise: false
+ session.screen0.strftimeFormat: %k:%M
+-session.screen0.focusNewWindows: True
+-session.screen0.focusModel: ClickToFocus
+-session.screen0.fullMaximization: False
++session.screen0.clickRaises: true
++session.screen0.imageDither: false
++session.screen0.workspaces: 4
++session.screen0.menuDelay: 0
++session.screen0.focusNewWindows: true
++session.screen0.workspaceNames: one,two,three,four,
+ session.screen0.edgeSnapThreshold: 0
++session.screen0.menuDelayClose: 0
++session.screen0.windowScrollReverse: false
+ session.screen0.rowPlacementDirection: LeftToRight
+-session.screen0.workspaces: 4
+-session.screen0.focusLastWindow: True
++session.screen0.followModel: Ignore
++session.screen0.windowMenu:
++session.screen0.reversewheeling: false
++session.screen0.windowScrollAction:
++session.screen0.sloppywindowgrouping: true
++session.screen0.resizeMode: Bottom
+ session.screen0.colPlacementDirection: TopToBottom
++session.screen0.desktopwheeling: true
++session.screen0.tabFocusModel: ClickToTabFocus
++session.screen0.antialias: false
++session.screen0.focusLastWindow: true
+ session.screen0.windowPlacement: RowSmartPlacement
+-session.screen0.tab.width: 64
+-session.screen0.tab.height: 16
+-session.screen0.showwindowposition: true
+-session.opaqueMove: False
+-session.autoRaiseDelay: 250
++session.screen0.focusModel: ClickFocus
++session.screen0.opaqueMove: false
++session.screen0.workspacewarping: true
++session.screen0.menuMode: Delay
++session.screen0.decorateTransient: false
++session.screen0.showwindowposition: true
++session.screen0.rootCommand:
++session.screen0.fullMaximization: false
++session.focusTabMinWidth: 0
+ session.menuFile: ~/.fluxbox/menu
+-session.cacheLife: 5
+-session.styleFile: @default_style@
+-session.keyFile: ~/.fluxbox/keys
++session.imageDither: True
+ session.colorsPerChannel: 4
++session.tabPadding: 0
++session.styleFile: /usr/share/fluxbox/styles/gpe-default
++session.cacheMax: 200l
++session.autoRaiseDelay: 250
+ session.doubleClickInterval: 250
+-session.cacheMax: 200
+-session.imageDither: True
++session.tabsAttachArea: Window
++session.numLayers: 13
++session.keyFile: ~/.fluxbox/keys
++session.ignoreBorder: false
++session.appsFile: ~/.fluxbox/apps
++session.tabs: false
++session.useMod1: true
++session.slitlistFile: ~/.fluxbox/slitlist
++session.forcePseudoTransparency: false
++session.opaqueMove: False
++session.groupFile: ~/.fluxbox/groups
++session.cacheLife: 5l
++session.styleOverlay: ~/.fluxbox/overlay
diff --git a/packages/fluxbox/fluxbox-gpe/style.gpe-default b/packages/fluxbox/fluxbox-gpe/style.gpe-default
new file mode 100644
index 0000000000..f94aaf7cdd
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe/style.gpe-default
@@ -0,0 +1,137 @@
+! meta
+! (c) joel carlbark 2003
+! please dont turn on aa with this style
+! make sure you have the font 'glisp' (or similar).
+
+toolbar: flat gradient vertical
+toolbar.color: #849ec6
+toolbar.colorTo: #526d8c
+
+toolbar.button: parentrelative
+toolbar.button.picColor: #d6d7e7
+
+toolbar.button.pressed: sunken solid
+toolbar.button.pressed.color: #526d8c
+toolbar.button.pressed.picColor: #000000
+
+! clock
+toolbar.clock: parentrelative
+toolbar.clock.textColor: white
+
+! shows workspace nr
+toolbar.label: parentrelative
+toolbar.label.textColor: white
+
+! current active window / toolbar
+toolbar.windowLabel: parentrelative
+toolbar.windowLabel.textColor: white
+
+! menu ---------
+menu.title: flat gradient vertical
+menu.title.color: #849ec6
+menu.title.colorTo: #526d8c
+menu.title.textColor: #d6d7e7
+
+menu.frame: flat gradient vertical
+menu.frame.color: #efefef
+menu.frame.colorTo: #c6c3c6
+menu.frame.textColor: black
+
+menu.hilite: flat solid
+menu.hilite.color: #849ec6
+menu.hilite.textColor: white
+
+menu.bullet: triangle
+menu.bullet.position: right
+
+! window --------------
+window.title.focus: flat gradient vertical
+window.title.focus.color: #849ec6
+window.title.focus.colorTo: #526d8c
+
+window.label.focus: parentrelative
+window.label.focus.textColor: white
+
+window.button.focus: flat gradient vertical
+window.button.focus.color: #849ec6
+window.button.focus.colorTo: #526d8c
+window.button.focus.picColor: #d6d7e7
+
+window.button.pressed: sunken solid
+window.button.pressed.color: #405060
+window.button.pressed.picColor: #000000
+
+window.handle.focus: flat gradient vertical
+window.handle.focus.color: #efefef
+window.handle.focus.colorTo: #c6c3c6
+
+window.grip.focus: flat gradient vertical
+window.grip.focus.color: #efefef
+window.grip.focus.colorTo: #c6c3c6
+
+window.frame.focus: flat solid
+window.frame.focus.color: white
+
+! unfocused
+window.title.unfocus: flat gradient vertical
+window.title.unfocus.color: #efefef
+window.title.unfocus.colorTo: #c6c3c6
+
+window.label.unfocus: parentrelative
+window.label.unfocus.textColor: #949694
+
+window.handle.unfocus: flat gradient vertical
+window.handle.unfocus.color: #efefef
+window.handle.unfocus.colorTo: #c6c3c6
+
+window.grip.unfocus: flat gradient vertical
+window.grip.unfocus.color: #efefef
+window.grip.unfocus.colorTo: #c6c3c6
+
+window.frame.unfocus: flat solid
+window.frame.unfocus.color: white
+
+window.button.unfocus: flat gradient vertical
+window.button.unfocus.color: #efefef
+window.button.unfocus.colorTo: #c6c3c6
+window.button.unfocus.picColor: #949694
+
+! tabs ------
+window.tab.justify: left
+
+window.tab.label.focus: flat gradient vertical
+window.tab.label.focus.color: #849ec6
+window.tab.label.focus.colorTo: #526d8c
+window.tab.label.focus.textColor: #d6d7e7
+
+window.tab.label.unfocus: flat gradient vertical
+window.tab.label.unfocus.color: #efefef
+window.tab.label.unfocus.colorTo: #c6c3c6
+window.tab.label.unfocus.textColor: #949694
+
+window.tab.borderWidth: 1
+window.tab.borderColor: #949694
+! -------
+
+toolbar.justify: left
+window.justify: center
+menu.title.justify: center
+menu.frame.justify: left
+
+borderColor: #000000
+borderWidth: 1
+bevelWidth: 1
+frameWidth: 1
+handleWidth: 4
+
+background: flat
+background.color: #d6d7e7
+
+#*font: Vera-4
+#toolbar.font: Vera-4
+
+toolbar*.font: Vera-6
+window.font: Vera-6
+menu.title.font: Vera-7
+menu.frame.font: Vera-7
+
diff --git a/packages/fluxbox/fluxbox-gpe_1.0rc.bb b/packages/fluxbox/fluxbox-gpe_1.0rc.bb
new file mode 100644
index 0000000000..50c5d6ce1d
--- /dev/null
+++ b/packages/fluxbox/fluxbox-gpe_1.0rc.bb
@@ -0,0 +1,77 @@
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php for a copy of the license)
+#
+# Filename: fluxbox-gpe_1.0rc.bb
+# Date: 01-Jul-06
+
+DESCRIPTION = "The Fluxbox WindowManager for use with GPE"
+MAINTAINER = "Matthias 'CoreDump' Hentges <oe@hentges.net>"
+HOMEPAGE = "http://fluxbox.sourceforge.net"
+LICENSE = "MIT"
+RCONFLICTS = "fluxbox"
+
+######################################################################################
+
+PR = "r1"
+S = "${WORKDIR}/fluxbox-${PV}"
+
+######################################################################################
+
+SRC_URI = "http://switch.dl.sourceforge.net/sourceforge/fluxbox/fluxbox-${PV}.tar.gz \
+ file://gpe-init.patch;patch=1\
+ file://apps.gpe \
+ file://style.gpe-default \
+ file://fluxbox-gpe-session \
+ file://fluxbox-gpe.session"
+
+######################################################################################
+
+PACKAGES = "${PN} ${PN}-styles"
+
+DESCRIPTION_${PN}-styles = "The default styles for fluxbox"
+
+######################################################################################
+
+FILES_${PN} = "/usr/bin \
+ /usr/share/fluxbox/init \
+ /usr/share/fluxbox/keys \
+ /usr/share/fluxbox/menu \
+ /usr/share/fluxbox/apps.gpe \
+ /usr/share/fluxbox/session \
+ /usr/share/fluxbox/styles/gpe-default"
+
+FILES_${PN}-styles = "/usr/share/fluxbox/styles"
+
+######################################################################################
+
+inherit autotools
+
+######################################################################################
+
+EXTRA_OECONF = "--disable-xmb \
+ "
+
+######################################################################################
+
+do_install_append() {
+ install -d ${D}/usr/bin
+ install -d ${D}/usr/share/fluxbox
+ install -d ${D}/usr/share/fluxbox/styles
+
+ install -m 0644 ${WORKDIR}/apps.gpe ${D}/usr/share/fluxbox
+ install -m 0755 ${WORKDIR}/fluxbox-gpe.session ${D}/usr/share/fluxbox/session
+ install -m 0644 ${WORKDIR}/style.gpe-default ${D}/usr/share/fluxbox/styles/gpe-default
+ install -m 0755 ${WORKDIR}/fluxbox-gpe-session ${D}/usr/bin
+}
+
+######################################################################################
+
+pkg_postinst_${PN}() {
+ update-alternatives --install /usr/bin/x-window-manager x-window-manager /usr/bin/fluxbox-gpe-session 15
+}
+
+pkg_postrm_${PN}() {
+ update-alternatives --remove x-window-manager /usr/bin/fluxbox-gpe-session
+}
+
diff --git a/packages/gcc/gcc_4.1.1.bb b/packages/gcc/gcc_4.1.1.bb
index dbc06cdfb8..793aa4bb76 100644
--- a/packages/gcc/gcc_4.1.1.bb
+++ b/packages/gcc/gcc_4.1.1.bb
@@ -3,7 +3,6 @@ DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
LICENSE = "GPL"
-DEFAULT_PREFERENCE = "-1"
inherit autotools gettext
diff --git a/packages/glib-1.2/glib-1.2-1.2.10/glib-config-use-pkg-config b/packages/glib-1.2/glib-1.2-1.2.10/glib-config-use-pkg-config
index d12b4a9d55..aaa64f392c 100644
--- a/packages/glib-1.2/glib-1.2-1.2.10/glib-config-use-pkg-config
+++ b/packages/glib-1.2/glib-1.2-1.2.10/glib-config-use-pkg-config
@@ -1,11 +1,5 @@
-patch glib-config so it indirects to pkgconfig for cflags and libs
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- glib-1.2.10/glib-config.in~glib-config-use-pkg-config
-+++ glib-1.2.10/glib-config.in
+--- glib-1.2.10/glib-config.in.orig 2006-06-28 12:28:53.000000000 +0100
++++ glib-1.2.10/glib-config.in 2006-06-28 12:31:33.000000000 +0100
@@ -28,6 +28,8 @@
lib_glib=yes
@@ -15,7 +9,7 @@ patch glib-config so it indirects to pkgconfig for cflags and libs
while test $# -gt 0; do
case "$1" in
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-@@ -55,20 +57,9 @@
+@@ -55,20 +57,14 @@
echo @GLIB_VERSION@
exit 0
;;
@@ -33,13 +27,18 @@ patch glib-config so it indirects to pkgconfig for cflags and libs
- ;;
- gthread)
- lib_gthread=yes
-+ --cflags | --libs | glib | gmodule | gthread)
++ --cflags | --libs)
+ cmd="$cmd $1 "
+ echo_pkgconfig="yes"
++ ;;
++ glib | gmodule | gthread)
++ cmd="$cmd $1 "
++ echo_pkgconfig="yes"
++ module_provided="yes"
;;
*)
usage 1 1>&2
-@@ -83,26 +74,6 @@
+@@ -83,26 +79,9 @@
if test "$echo_exec_prefix" = "yes"; then
echo $exec_prefix
fi
@@ -66,5 +65,8 @@ patch glib-config so it indirects to pkgconfig for cflags and libs
- fi
- echo -L@libdir@ $libsp $libsa
+if test "$echo_pkgconfig" = "yes"; then
++ if test -z "$module_provided" ; then
++ cmd="$cmd glib"
++ fi
+ echo `$cmd`
fi
diff --git a/packages/opie-button-settings/opie-button-settings-1.2.1/.mtn2git_empty b/packages/guile/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-button-settings/opie-button-settings-1.2.1/.mtn2git_empty
+++ b/packages/guile/files/.mtn2git_empty
diff --git a/packages/guile/configure-lossage.patch b/packages/guile/files/configure-lossage.patch
index da1d0de6e7..da1d0de6e7 100644
--- a/packages/guile/configure-lossage.patch
+++ b/packages/guile/files/configure-lossage.patch
diff --git a/packages/guile/files/gcc4.patch b/packages/guile/files/gcc4.patch
new file mode 100644
index 0000000000..2168683ad5
--- /dev/null
+++ b/packages/guile/files/gcc4.patch
@@ -0,0 +1,16 @@
+
+#
+# Signed off by Michael 'Mickey' Lauer <mickey@Vanille.de>
+#
+
+--- guile-1.6.4/libguile/guile.c~gcc4
++++ guile-1.6.4/libguile/guile.c
+@@ -88,7 +88,7 @@
+ {
+ #ifdef DYNAMIC_LINKING
+ /* libtool automagically inserts this variable into your executable... */
+- extern const scm_lt_dlsymlist lt_preloaded_symbols[];
++ extern const scm_lt_dlsymlist *lt_preloaded_symbols;
+ scm_lt_dlpreload_default (lt_preloaded_symbols);
+ #endif
+ scm_boot_guile (argc, argv, inner_main, 0);
diff --git a/packages/guile/guile_1.6.4.bb b/packages/guile/guile_1.6.4.bb
index dc55c266a0..389aec9489 100644
--- a/packages/guile/guile_1.6.4.bb
+++ b/packages/guile/guile_1.6.4.bb
@@ -1,9 +1,15 @@
-SECTION = "unknown"
-LICENSE = "GPL"
+DESCRIPTION = "Guile is an interpreter for the Scheme programming language, \
+packaged as a library which can be incorporated into your programs."
+HOMEPAGE = "http://www.gnu.org/software/guile/guile.html"
+SECTION = "devel/scheme"
+DEPENDS = "guile-native"
MAINTAINER = "Phil Blundell <pb@handhelds.org>"
+LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "http://ftp.gnu.org/pub/gnu/guile/guile-${PV}.tar.gz \
- file://configure-lossage.patch;patch=1"
-DEPENDS = "guile-native"
+ file://configure-lossage.patch;patch=1 \
+ file://gcc4.patch;patch=1"
inherit autotools
diff --git a/packages/icecast/icecast_2.2.0.bb b/packages/icecast/icecast_2.2.0.bb
index 7b6ba73b01..7322af3087 100644
--- a/packages/icecast/icecast_2.2.0.bb
+++ b/packages/icecast/icecast_2.2.0.bb
@@ -1,4 +1,4 @@
-PR = "r3"
+PR = "r4"
MAINTAINER = "Oyvind Repvik <nail@nslu2-linux.org"
LICENSE = "GPL-2"
@@ -9,7 +9,9 @@ DEPENDS = "libvorbis libogg libxslt"
RDEPENDS = "libvorbis libogg libxslt"
SRC_URI = "http://downloads.us.xiph.org/releases/icecast/${PN}-${PV}.tar.gz"
-EXTRA_OECONF = "--with-ogg=${STAGING_LIBDIR} --with-vorbis=${STAGING_LIBDIR}"
+
+# disable yp as curl cannot be configured
+EXTRA_OECONF = "--disable-yp --with-ogg=${STAGING_LIBDIR} --with-vorbis=${STAGING_LIBDIR}"
S = "${WORKDIR}/${PN}-${PV}"
inherit autotools
diff --git a/packages/qt/qt4-x11-free-4.1.1/.mtn2git_empty b/packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qt/qt4-x11-free-4.1.1/.mtn2git_empty
+++ b/packages/ipkg-utils/ipkg-utils-native/.mtn2git_empty
diff --git a/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch b/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch
new file mode 100644
index 0000000000..a9e6fc4d05
--- /dev/null
+++ b/packages/ipkg-utils/ipkg-utils-native/ipkg-utils-fix.patch
@@ -0,0 +1,17 @@
+--- ../../../work/i686-linux/ipkg-utils-native-1.6+cvs20050404-r6/ipkg-utils/ipkg.py 2005-01-08 19:08:52.000000000 +0100
++++ ipkg-utils/ipkg.py 2006-06-29 12:52:58.466446000 +0200
+@@ -150,11 +150,11 @@
+ stat = os.stat(fn)
+ self.size = stat[ST_SIZE]
+ self.filename = os.path.basename(fn)
+- ## sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
++ sys.stderr.write(" extracting control.tar.gz from %s\n"% (fn,))
+ if self.isdeb:
+- control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - '*control'","r")
++ control = os.popen("ar p "+fn+" control.tar.gz | tar xfzO - './control'","r")
+ else:
+- control = os.popen("tar xfzO "+fn+" '*control.tar.gz' | tar xfzO - '*control'","r")
++ control = os.popen("tar xfzO "+fn+" 'control.tar.gz' | tar xfzO - './control'","r")
+ line = control.readline()
+ while 1:
+ if not line: break
diff --git a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
index eb11ac560d..ab8f4d63e0 100644
--- a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
+++ b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
@@ -1,7 +1,8 @@
include ipkg-utils_${PV}.bb
+SRC_URI += "file://ipkg-utils-fix.patch;patch=1"
RDEPENDS = ""
-PR = "r6"
+PR = "r7"
inherit native
diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb
new file mode 100644
index 0000000000..a7d68d5350
--- /dev/null
+++ b/packages/ipkg/ipkg-native_0.99.163.bb
@@ -0,0 +1,9 @@
+S = "${WORKDIR}/ipkg-${PV}"
+
+include ipkg_${PV}.bb
+include ipkg-native.inc
+
+inherit autotools pkgconfig native
+
+SRC_URI = "http://ftp.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz"
+
diff --git a/packages/ircp/ircp_0.3.bb b/packages/ircp/ircp_0.3.bb
index 7f65f0b870..684bfa9bf1 100644
--- a/packages/ircp/ircp_0.3.bb
+++ b/packages/ircp/ircp_0.3.bb
@@ -1,7 +1,9 @@
DEPENDS = "openobex"
LICENSE = "GPL"
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/openobex/ircp-${PV}.tar.gz"
+EXTRA_OECONF = "--with-openobex=${STAGING_LIBDIR} \
inherit autotools
diff --git a/packages/libaal/libaal_1.0.4.bb b/packages/libaal/libaal_1.0.4.bb
index d4a460c6da..a3e1abd7cc 100644
--- a/packages/libaal/libaal_1.0.4.bb
+++ b/packages/libaal/libaal_1.0.4.bb
@@ -8,7 +8,7 @@ MAINTAINER = "John Bowler <jbowler@acm.org>"
SECTION = "base"
LICENSE = "GPL-2"
-SRC_URI = "ftp://ftp.namesys.com/pub/reiser4progs/${P}.tar.gz"
+SRC_URI = "ftp://ftp.namesys.com/pub/reiser4progs/old-versions/${P}.tar.gz"
inherit autotools
diff --git a/packages/libmailwrapper/libmailwrapper_1.2.1.bb b/packages/libmailwrapper/libmailwrapper_1.2.2.bb
index 29aa09c148..29aa09c148 100644
--- a/packages/libmailwrapper/libmailwrapper_1.2.1.bb
+++ b/packages/libmailwrapper/libmailwrapper_1.2.2.bb
diff --git a/packages/libopie/libopie2-1.2.1/openzaurus-branding.patch b/packages/libopie/libopie2-1.2.1/openzaurus-branding.patch
deleted file mode 100644
index 8b2a33ab82..0000000000
--- a/packages/libopie/libopie2-1.2.1/openzaurus-branding.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- libopie2/opiecore/device/odevice.cpp.orig 2006-01-22 19:07:22.000000000 +0100
-+++ libopie2/opiecore/device/odevice.cpp 2006-01-22 19:07:24.000000000 +0100
-@@ -74,7 +74,7 @@
- /* STATIC and common implementation */
- /* EXPORT */ ODistribution distributions[] = {
- { System_Familiar, "FamiliarLinux", "/etc/familiar-version" },
-- { System_OpenZaurus, "OpenZaurus", "/etc/oz_version" },
-+ { System_OpenZaurus, "OpenZaurus", "/etc/openzaurus-version" },
- { System_OpenEmbedded, "OpenEmbedded", "/etc/oe-version" },
- { System_Unknown, "Linux", "/etc/issue" },
- };
diff --git a/packages/libopie/libopie2_1.2.1.bb b/packages/libopie/libopie2_1.2.2.bb
index 7037f48d06..3f21426e46 100644
--- a/packages/libopie/libopie2_1.2.1.bb
+++ b/packages/libopie/libopie2_1.2.2.bb
@@ -1,9 +1,7 @@
include ${PN}.inc
-PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/libopie2 \
- file://openzaurus-branding.patch;patch=1 \
file://include.pro"
SRC_URI_append_poodle = " file://poodle-2.6-hotkeys.patch;patch=1"
diff --git a/packages/libopieobex/libopieobex0_1.2.1.bb b/packages/libopieobex/libopieobex0_1.2.2.bb
index 5e7c51e7cc..f5a2b1bc45 100644
--- a/packages/libopieobex/libopieobex0_1.2.1.bb
+++ b/packages/libopieobex/libopieobex0_1.2.2.bb
@@ -1,6 +1,5 @@
include libopieobex0.inc
-PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/obex \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics "
diff --git a/packages/libopieobex/libopieobex0_cvs.bb b/packages/libopieobex/libopieobex0_cvs.bb
index ed160d86c8..f401f01a3e 100644
--- a/packages/libopieobex/libopieobex0_cvs.bb
+++ b/packages/libopieobex/libopieobex0_cvs.bb
@@ -1,6 +1,5 @@
include libopieobex0.inc
PV = "${OPIE_CVS_PV}"
-PR = "r2"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/obex \
${HANDHELDS_CVS};module=opie/pics"
diff --git a/packages/libopietooth/libopietooth1_1.2.1.bb b/packages/libopietooth/libopietooth1_1.2.2.bb
index 0dc91b2731..0dc91b2731 100644
--- a/packages/libopietooth/libopietooth1_1.2.1.bb
+++ b/packages/libopietooth/libopietooth1_1.2.2.bb
diff --git a/packages/libqpe/libqpe-opie/0905_datebookmonth.patch b/packages/libqpe/libqpe-opie/0905_datebookmonth.patch
deleted file mode 100644
index 7c4d5fb389..0000000000
--- a/packages/libqpe/libqpe-opie/0905_datebookmonth.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Index: datebookmonth.cpp
-===================================================================
-RCS file: /cvs/opie/library/datebookmonth.cpp,v
-retrieving revision 1.10
-diff -u -r1.10 datebookmonth.cpp
---- datebookmonth.cpp 20 Mar 2005 18:29:19 -0000 1.10
-+++ datebookmonth.cpp 5 Sep 2005 19:53:47 -0000
-@@ -661,7 +661,14 @@
-
- // Finally, draw the number.
- QFont f = p->font();
-- f.setPointSize( ( f.pointSize() / 3 ) * 2 );
-+ if(qApp->desktop()->width() >= 480)
-+ {
-+ f.setPointSize( f.pointSize() - 2 );
-+ }
-+ else
-+ {
-+ f.setPointSize( ( f.pointSize() / 3 ) * 2 );
-+ }
- p->setFont( f );
- QFontMetrics fm( f );
- p->drawText( 1, 1 + fm.ascent(), QString::number( day() ) );
diff --git a/packages/libqpe/libqpe-opie_1.2.1.bb b/packages/libqpe/libqpe-opie_1.2.2.bb
index fd806b8ca6..00e5ca859a 100644
--- a/packages/libqpe/libqpe-opie_1.2.1.bb
+++ b/packages/libqpe/libqpe-opie_1.2.2.bb
@@ -1,9 +1,6 @@
include ${PN}.inc
-
+
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
- file://0905_datebookmonth.patch;patch=1;pnum=0 \
file://fix-titleheight.patch;patch=1"
-
diff --git a/packages/libqpe/libqpe-opie_cvs.bb b/packages/libqpe/libqpe-opie_cvs.bb
index 9657868b0f..8b4e74afe7 100644
--- a/packages/libqpe/libqpe-opie_cvs.bb
+++ b/packages/libqpe/libqpe-opie_cvs.bb
@@ -1,8 +1,7 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes
-PV = "1.2.1+cvs-${SRCDATE}"
-PR = "r1"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/library \
file://fix-titleheight.patch;patch=1"
diff --git a/packages/libqtaux/libqtaux2_1.2.1.bb b/packages/libqtaux/libqtaux2_1.2.2.bb
index aa694d43f1..aa694d43f1 100644
--- a/packages/libqtaux/libqtaux2_1.2.1.bb
+++ b/packages/libqtaux/libqtaux2_1.2.2.bb
diff --git a/packages/linux/ep93xx-kernel_2.6.17.1.bb b/packages/linux/ep93xx-kernel_2.6.17.1.bb
index d8caa8c5e3..3826916609 100644
--- a/packages/linux/ep93xx-kernel_2.6.17.1.bb
+++ b/packages/linux/ep93xx-kernel_2.6.17.1.bb
@@ -7,16 +7,18 @@ PR = "r0"
COMPATIBLE_MACHINE = "ep93xx"
SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.1.tar.bz2 \
- http://www.wantstofly.org/~buytenh/ep93xx/derevo19.diff;patch=1 \
+ http://www.wantstofly.org/~buytenh/ep93xx/derevo19.diff;pnum=1;patch=1 \
file://defconfig \
"
-S = "${WORKDIR}/linux-2.6.16"
+S = "${WORKDIR}/linux-2.6.17.1"
inherit kernel
KERNEL_IMAGETYPE = "zImage"
+
+
do_configure() {
rm -f ${S}/.config
diff --git a/packages/linux/linux-jlime-sh3_2.6.16.20.bb b/packages/linux/linux-jlime-sh3_2.6.16.20.bb
index a8c40e4969..ef5db85812 100644
--- a/packages/linux/linux-jlime-sh3_2.6.16.20.bb
+++ b/packages/linux/linux-jlime-sh3_2.6.16.20.bb
@@ -7,17 +7,15 @@ COMPATIBLE_HOST = "sh.*-linux"
COMPATIBLE_MACHINE = 'jornada6xx'
SRC_URI = "http://www.jlime.com/downloads/Releases/donkey/kernels/6xx/sources/jlime-2.6.16.20-patched.tar.gz \
- file://defconfig_jlime \
- file://volatile-traps.c.patch;patch=1 \
- file://volatile-signal.c.patch;patch=1 \
- file://volatile-sys_sh.c.patch;patch=1 \
- file://volatile-setup.c.patch;patch=1 \
- file://Optimize-O1.patch;patch=1"
-
+ file://defconfig_jlime"
+
S = "${WORKDIR}/linux-${PV}"
inherit kernel
+#Lets let 3.4.x handle the compilation of this one
+KERNEL_CCSUFFIX = "-3.4.4"
+
ARCH = "sh"
KERNEL_IMAGETYPE = "zImage"
FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
diff --git a/packages/linux/linux-openzaurus-2.6.17/defconfig-collie b/packages/linux/linux-openzaurus-2.6.17/defconfig-collie
index 20ec01ff21..4667b24fb1 100644
--- a/packages/linux/linux-openzaurus-2.6.17/defconfig-collie
+++ b/packages/linux/linux-openzaurus-2.6.17/defconfig-collie
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-rc1
-# Wed Apr 19 21:01:15 2006
+# Linux kernel version: 2.6.17
+# Fri Jun 30 08:29:05 2006
#
CONFIG_ARM=y
CONFIG_MMU=y
@@ -43,13 +43,12 @@ CONFIG_KALLSYMS=y
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
-CONFIG_ELF_CORE=y
+# CONFIG_ELF_CORE is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_SLAB=y
-CONFIG_DOUBLEFAULT=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
@@ -195,7 +194,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
#
@@ -220,6 +219,7 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
#
# Power management options
@@ -302,8 +302,82 @@ CONFIG_TCP_CONG_BIC=y
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+# CONFIG_TOIM3232_DONGLE is not set
+# CONFIG_LITELINK_DONGLE is not set
+# CONFIG_MA600_DONGLE is not set
+# CONFIG_GIRBIL_DONGLE is not set
+# CONFIG_MCP2120_DONGLE is not set
+# CONFIG_OLD_BELKIN_DONGLE is not set
+# CONFIG_ACT200L_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+CONFIG_SA1100_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
CONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=m
@@ -419,23 +493,102 @@ CONFIG_MTD_SHARP=y
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=1024
-CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
CONFIG_ATA_OVER_ETH=m
#
# ATA/ATAPI/MFM/RLL support
#
-# CONFIG_IDE is not set
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_IDEDISK is not set
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
#
# Multi-device support (RAID and LVM)
@@ -551,7 +704,7 @@ CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_FMVJ18X is not set
CONFIG_PCMCIA_PCNET=m
# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
+CONFIG_PCMCIA_SMC91C92=m
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_PCMCIA_AXNET is not set
@@ -592,12 +745,10 @@ CONFIG_INPUT_MOUSEDEV=m
CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
+# CONFIG_INPUT_TSDEV is not set
CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=y
-# CONFIG_INPUT_POWER is not set
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
#
# Input Device Drivers
@@ -629,12 +780,30 @@ CONFIG_SERIO=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_N_HDLC is not set
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
#
# Serial drivers
#
-# CONFIG_SERIAL_8250 is not set
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
#
# Non-8250 serial port support
@@ -737,7 +906,10 @@ CONFIG_I2C_ALGOBIT=m
#
# Multimedia Capabilities Port drivers
#
-# CONFIG_MCP_SA11X0 is not set
+CONFIG_MCP=y
+CONFIG_MCP_SA11X0=y
+CONFIG_MCP_UCB1200=y
+# CONFIG_MCP_UCB1200_TS is not set
#
# Multi-Function Devices
@@ -758,21 +930,25 @@ CONFIG_LEDS_LOCOMO=y
# LED Triggers
#
CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_TIMER=m
#
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
-# Video For Linux
+# Video Capture Adapters
#
#
-# Video Adapters
+# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_PMS is not set
# CONFIG_VIDEO_CPIA is not set
# CONFIG_VIDEO_SAA5246A is not set
@@ -823,7 +999,7 @@ CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_MACMODES is not set
CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_S1D13XXX is not set
@@ -852,7 +1028,14 @@ CONFIG_FONT_8x8=y
#
# Logo configuration
#
-# CONFIG_LOGO is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_LOGO_OHAND_CLUT224 is not set
+CONFIG_LOGO_OZ240_CLUT224=y
+# CONFIG_LOGO_OZ480_CLUT224 is not set
+# CONFIG_LOGO_OZ640_CLUT224 is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
@@ -862,7 +1045,55 @@ CONFIG_BACKLIGHT_LOCOMO=y
#
# Sound
#
-# CONFIG_SOUND is not set
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
#
# USB support
@@ -879,7 +1110,7 @@ CONFIG_USB_ARCH_HAS_HCD=y
#
# USB Gadget Support
#
-CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET=m
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_PXA2XX is not set
@@ -894,7 +1125,9 @@ CONFIG_USB_GADGET=y
#
# MMC/SD Card support
#
-# CONFIG_MMC is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
#
# Real Time Clock
@@ -938,7 +1171,7 @@ CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
+CONFIG_ROMFS_FS=m
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
# CONFIG_DNOTIFY is not set
@@ -955,9 +1188,9 @@ CONFIG_INOTIFY=y
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=y
+CONFIG_FAT_FS=m
# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
+CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
@@ -991,7 +1224,7 @@ CONFIG_JFFS2_SUMMARY=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
+CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
@@ -1005,10 +1238,30 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
#
# Network File Systems
#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
@@ -1017,15 +1270,30 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
@@ -1049,7 +1317,7 @@ CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
@@ -1062,7 +1330,7 @@ CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
+CONFIG_NLS_UTF8=m
#
# Profiling support
@@ -1107,29 +1375,29 @@ CONFIG_DEBUG_ERRORS=y
# Cryptographic options
#
CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
# CONFIG_CRYPTO_TEST is not set
#
@@ -1142,6 +1410,6 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRC_CCITT=m
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
+CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-openzaurus_2.6.17.bb b/packages/linux/linux-openzaurus_2.6.17.bb
index cb3f0a6313..5f30df1858 100644
--- a/packages/linux/linux-openzaurus_2.6.17.bb
+++ b/packages/linux/linux-openzaurus_2.6.17.bb
@@ -1,6 +1,6 @@
include linux-openzaurus.inc
-PR = "r2"
+PR = "r3"
DEFAULT_PREFERENCE = "-1"
@@ -30,8 +30,9 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
file://00-hostap.patch;patch=1;status=pending \
file://10-pcnet.patch;patch=1;status=pending \
# ${RPSRC}/alsa/asoc-v0.10-oz-r0.patch;patch=1 \
- ${RPSRC}/alsa/asoc-v0.10rc4.patch;patch=1 \
- ${RPSRC}/asoc_fixups-r1.patch;patch=1 \
+ ${RPSRC}/alsa/asoc-v0.10.patch;patch=1 \
+# ${RPSRC}/alsa/asoc-v0.10rc4.patch;patch=1 \
+# ${RPSRC}/asoc_fixups-r1.patch;patch=1 \
${RPSRC}/hx2750_base-r25.patch;patch=1 \
${RPSRC}/hx2750_bl-r7.patch;patch=1 \
${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
@@ -45,7 +46,7 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
${RPSRC}/pm_changes-r1.patch;patch=1 \
${RPSRC}/usb_pxa27x_udc-r0.patch;patch=1 \
${RPSRC}/usb_add_epalloc-r1.patch;patch=1 \
- ${DOSRC}/kexec-arm-r2.patch;patch=1 \
+ ${DOSRC}/kexec-arm-r3.patch;patch=1 \
${RPSRC}/locomo_kbd_tweak-r0.patch;patch=1 \
${RPSRC}/poodle_pm-r1.patch;patch=1 \
${RPSRC}/pxafb_changeres-r0.patch;patch=1 \
@@ -88,23 +89,23 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
SRC_URI_append_tosa = "\
${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
${CHSRC}/tmio-core-r4.patch;patch=1 \
- ${CHSRC}/tmio-tc6393-r5.patch;patch=1 \
+ ${DOSRC}/temp/tmio-tc6393-r6.patch;patch=1 \
${CHSRC}/tmio-nand-r5.patch;patch=1 \
- ${CHSRC}/tmio-ohci-r3.patch;patch=1 \
+ ${DOSRC}/temp/tmio-ohci-r4.patch;patch=1 \
${CHSRC}/tmio-fb-r6.patch;patch=1 \
- ${DOSRC}/tosa-keyboard-r14.patch;patch=1 \
+ ${DOSRC}/tosa-keyboard-r17.patch;patch=1 \
${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r15.patch;patch=1 \
- ${DOSRC}/tosa-tmio-lcd-r7.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r6.patch;patch=1 \
+ ${DOSRC}/tosa-power-r17.patch;patch=1 \
+ ${DOSRC}/tosa-tmio-lcd-r8.patch;patch=1 \
+ ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- ${DOSRC}/wm9712-suspend-cold-res-r0.patch;patch=1 \
+ ${DOSRC}/wm9712-suspend-cold-res-r1.patch;patch=1 \
${DOSRC}/sharpsl-pm-postresume-r0.patch;patch=1 \
${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- ${DOSRC}/wm9712-reset-loop-r0.patch;patch=1 \
- ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
+ ${DOSRC}/wm9712-reset-loop-r1.patch;patch=1"
+# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
S = "${WORKDIR}/linux-2.6.17"
diff --git a/packages/linux/linux-titan-sh4-2.6.16/.mtn2git_empty b/packages/linux/linux-titan-sh4-2.6.16/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.16/.mtn2git_empty
diff --git a/packages/linux/linux-titan-sh4-2.6.16/titan-config b/packages/linux/linux-titan-sh4-2.6.16/titan-config
new file mode 100644
index 0000000000..11bfc7535c
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.16/titan-config
@@ -0,0 +1,1530 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-sh
+# Thu Jun 29 15:50:21 2006
+#
+CONFIG_SUPERH=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=n
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=m
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_STB1_HARP is not set
+# CONFIG_SH_STB1_OVERDRIVE is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_CQREEK is not set
+# CONFIG_SH_DMIDA is not set
+# CONFIG_SH_EC3104 is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_CAT68701 is not set
+# CONFIG_SH_BIGSUR is not set
+# CONFIG_SH_SH2000 is not set
+# CONFIG_SH_ADX is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+CONFIG_SH_TITAN=y
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+CONFIG_MEMORY_START=0x08030000
+CONFIG_MEMORY_SIZE=0x7fd0000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SH_RTC=y
+CONFIG_SH_FPU=y
+# CONFIG_SH_STORE_QUEUES is not set
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_SR_RB=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ=30000000
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+CONFIG_SH_DMA=y
+CONFIG_NR_ONCHIP_DMA_CHANNELS=8
+# CONFIG_NR_DMA_CHANNELS_BOOL is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+
+#
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x009e0000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/sm0p2 ip=off"
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+CONFIG_PCI_LEGACY_PROC=y
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_FAKE is not set
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options (EXPERIMENTAL)
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_FWMARK is not set
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
+CONFIG_IP_ROUTE_MULTIPATH_RR=m
+CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_DRR=m
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_INET6_TUNNEL=y
+CONFIG_IPV6_TUNNEL=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CONNTRACK_EVENTS=y
+CONFIG_IP_NF_CONNTRACK_NETLINK=m
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_NETBIOS_NS=m
+CONFIG_IP_NF_TFTP=m
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_MATCH_POLICY=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AHESP=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_POLICY=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+CONFIG_VLAN_8021Q=y
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+# CONFIG_NET_ACT_SIMP is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_SOLUTIONENGINE is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_SSFDC=y
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_IFB is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_CICADA_PHY=m
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+# CONFIG_8139TOO_8129 is not set
+CONFIG_8139_OLD_RX_RESET=y
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SH_WDT=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_RELAYFS_FS=m
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+CONFIG_EARLY_SCIF_CONSOLE=y
+# CONFIG_EARLY_PRINTK is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
diff --git a/packages/linux/linux-titan-sh4-2.6.16/titan-flash.patch b/packages/linux/linux-titan-sh4-2.6.16/titan-flash.patch
new file mode 100644
index 0000000000..fc633f3e05
--- /dev/null
+++ b/packages/linux/linux-titan-sh4-2.6.16/titan-flash.patch
@@ -0,0 +1,3157 @@
+
+Add the driver for onboard flash.
+The quality of this driver means that it has not been included in the
+upstream CVS.
+This implements the block device translation layer to match what the
+onboard firmware implements.
+
+diff -duNr linux-2.6.16-orig/drivers/block/Kconfig linux-2.6.16/drivers/block/Kconfig
+--- linux-2.6.16-orig/drivers/block/Kconfig 2006-06-29 16:12:57.000000000 +1000
++++ linux-2.6.16/drivers/block/Kconfig 2006-06-29 16:13:27.000000000 +1000
+@@ -190,6 +190,13 @@
+ To compile this driver as a module, choose M here: the
+ module will be called DAC960.
+
++config BLK_SSFDC
++ tristate "SmartMedia(TM) Driver (sm)"
++ depends on SH_TITAN
++ help
++ Say Y here if you want the SmartMedia chip enabled.
++ Otherwise say N.
++
+ config BLK_DEV_UMEM
+ tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)"
+ depends on PCI && EXPERIMENTAL
+diff -duNr linux-2.6.16-orig/drivers/block/Makefile linux-2.6.16/drivers/block/Makefile
+--- linux-2.6.16-orig/drivers/block/Makefile 2006-06-29 16:12:57.000000000 +1000
++++ linux-2.6.16/drivers/block/Makefile 2006-06-29 16:13:27.000000000 +1000
+@@ -21,6 +21,7 @@
+ obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o
+ obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o
+ obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o
++obj-$(CONFIG_BLK_SSFDC) += ssfdc.o
+ obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o
+
+ obj-$(CONFIG_BLK_DEV_UMEM) += umem.o
+diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.c linux-2.6.16/drivers/block/ssfdc.c
+--- linux-2.6.16-orig/drivers/block/ssfdc.c 1970-01-01 10:00:00.000000000 +1000
++++ linux-2.6.16/drivers/block/ssfdc.c 2006-06-29 16:13:50.000000000 +1000
+@@ -0,0 +1,2742 @@
++/* $id: $
++ssfdc.c - Solid State Flopyy Disk Card
++
++Original source curtesy of Toshiba Corporation.
++
++Modification for use by Linux provided by Nimble Microsystems Inc.
++
++TODO:
++
++Modification History:
++
++ March 2001 - Initial port of Toshiba sources by Bill Mann
++ May 2001 - Debug of staticly linked ssfdc driver, Bill Mann
++ Nov 2001 - Reimplementation using tasklets and timers.
++ May 2002 - Partition support added.
++ Oct 2003 - Port to kernel 2.6.0
++ Mar 2004 - Stabilization refinements...
++
++Overview: The kernel interfaces to the device via the "block_device_operations
++ ssfdc_fops", the device's request handling function
++ "do_ssfdc_request(request_queue_t * q)", or by the ioctl interface ssfdc_ioctl().
++
++ do_ssfdc_request() purpose is to kickstart ssfdc_thread via a wake_up call. ssfdc_thread
++ then processes requests from the queue.
++
++ Blocks are mapped logically. So a sector read/write results in the determination
++ of the logical block address of the block containing the desired sector and the
++ corresponding physical block being accessed. Note the use of ReadBlock, WriteBlock,
++ and PhyBlock, Log2Phy[] etc.
++
++ This driver implements a wear leveling strategy where sector writes to the
++ SmartMedia causes the block which is the target of the write to be copied into a
++ new block, the new data written and the old block erased. This makes the driver
++ more complicated than a straightforward sector read/write.
++
++*/
++
++/* Section device headers */
++#define DEBUG_SSFDC 0
++#define DEBUG_SSFDC_STRUCT 0
++#define DEBUG_SSFDC_REQUEST 0
++#define DEBUG_SSFDC_READREDT 0
++#define DEBUG_SSFDC_WRITE 0
++#define DEBUG_SSFDC_WRITESECT 0
++#define DEBUG_SSFDC_WRITEBLKS 0
++#define DEBUG_SSFDC_READ 0
++#define DEBUG_SSFDC_ADDR 0
++#define DEBUG_SSFDC_ASSIGNRELEASE 0
++#define SSFDC_READINGTASKLET 0
++/* Edition Compilation Mode */
++
++#include <linux/module.h>
++
++#include <asm/delay.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include <linux/fs.h>
++#include <linux/hdreg.h>
++#include <linux/file.h>
++#include <linux/stat.h>
++#include <linux/time.h>
++#include <linux/errno.h>
++#include <linux/major.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++#include <asm/uaccess.h>
++#include <asm/hardirq.h>
++#include <linux/bio.h>
++#include <linux/blkdev.h>
++#include <linux/slab.h>
++#include <linux/highmem.h>
++
++#include "ssfdc.h"
++
++#define SSFDC_MAJOR 240
++
++static int static_ssfdc_debug = 0;
++
++static DECLARE_WAIT_QUEUE_HEAD(ssfdc_wait);
++
++static struct gendisk *disks[MAX_SSFDC];
++static ssfdc_dev *ssfdc[MAX_SSFDC];
++
++static int ssfdc_open(struct inode *i_node, struct file *fptr);
++static int ssfdc_getgeo(struct block_device *bdev, struct hd_geometry *geo);
++static int ssfdc_release(struct inode *i_node, struct file *fptr);
++static int ssfdc_ioctl(struct inode *i_node, struct file *fptr, unsigned cmd, unsigned long arg);
++static int ssfdc_revalidate(struct gendisk *disk);
++void do_ssfdc_request(request_queue_t * q);
++
++static struct block_device_operations ssfdc_fops = {
++ .owner = THIS_MODULE,
++ .open = ssfdc_open,
++ .getgeo = ssfdc_getgeo,
++ .release = ssfdc_release,
++ .ioctl = ssfdc_ioctl,
++ // bjm out .revalidate_disk = ssfdc_revalidate,
++};
++
++
++/***************************************************************************
++ BIT Control Macro
++ ***************************************************************************/
++static char BitData[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };
++#define SetBit(a,b) (a[(unsigned char)((b)/8)]|= BitData[(b)%8])
++#define ClrBit(a,b) (a[(unsigned char)((b)/8)]&=~BitData[(b)%8])
++#define ChkBit(a,b) (a[(unsigned char)((b)/8)] & BitData[(b)%8])
++
++/***************************************************************************/
++static int MediaReadSector(ssfdc_dev *, struct request *, char *, long,int);
++static int MediaWriteSector(ssfdc_dev *, struct request *, char *, long,int);
++
++/***************************************************************************/
++static int CheckLogCHS(ssfdc_dev *,unsigned int *,unsigned char *,unsigned char *);
++static int CheckMediaWP(ssfdc_dev *);
++static int ConvMediaAddr(ssfdc_dev *,long);
++static int IncMediaAddr(ssfdc_dev *);
++static int WriteReqInCurrBlk(ssfdc_dev *, long, int *);
++/******************************************/
++/******************************************/
++static int AssignWriteBlock(ssfdc_dev *, int);
++/******************************************/
++/******************************************/
++static int SetPhyFmtValue(ssfdc_dev *);
++static int SearchCIS(ssfdc_dev *,unsigned int *);
++static int MakeLogTable(ssfdc_dev *,unsigned int);
++/******************************************/
++static int MarkFailPhyOneBlock(ssfdc_dev *);
++
++static void _ReadSsfdcBuf(ssfdc_dev *, unsigned char *databuf,unsigned char *redundant);
++static void _WriteSsfdcBuf(ssfdc_dev *,unsigned char *,unsigned char *);
++static void _ReadSsfdcWord(ssfdc_dev *,unsigned int *);
++static void _ReadRedtSsfdcBuf(ssfdc_dev *, unsigned char *redundant);
++static void _WriteRedtSsfdcBuf(ssfdc_dev*, unsigned char *redundant);
++
++/***************************************************************************/
++static void _SetSsfdcCmd(ssfdc_dev *, unsigned char);
++static void _SetSsfdcAddr(ssfdc_dev *, unsigned char);
++static void _SetSsfdcBlock(ssfdc_dev *);
++static void _SetSsfdcChip(ssfdc_dev *);
++static void _SetSsfdcStandby(ssfdc_dev *);
++static int _CheckSsfdcBusy(ssfdc_dev *, unsigned int);
++static int _CheckSsfdcStatus(ssfdc_dev *);
++static void _ResetSsfdcErr(ssfdc_dev *psm);
++static unsigned char _CheckDevCode(unsigned char);
++void SsfdcReset(ssfdc_dev *);
++void CntReset(ssfdc_dev *);
++
++static char BitCount(unsigned char);
++static char BitCountWord(unsigned int);
++
++static void _WaitTimer(long int);
++typedef void (*timeout_fn)(unsigned long);
++static void ssfdc_rw_request(ssfdc_dev *psm, struct request *req);
++static int ssfdc_end_request(ssfdc_dev *psm, struct request *req, int status);
++static void ssfdc_terminate_request(ssfdc_dev *psm, struct request *req);
++static struct request *ssfdc_get_request(ssfdc_dev *psm);
++
++/* debugging utils etc. */
++
++#if DEBUG_SSFDC
++static void dump_ssfdc_state(ssfdc_dev * psm);
++#endif
++
++/* end of debugging utils etc. */
++
++/* our tasklets */
++/* top level R/W initiation tasklet */
++static void initxfer(unsigned long);
++#if 0 // use thread and not a tasklet
++DECLARE_TASKLET(initxfer_tasklet0, initxfer, 0);
++#ifdef CONFIG_SH_NIMBLE_MINI
++DECLARE_TASKLET(initxfer_tasklet1, initxfer, 1);
++#endif
++#endif
++
++/* Sector Write Tasklets, This group includes a readcopy tasklet for block copies...*/
++
++/* Tasklet to read a sector into a temporary buffer for later write */
++
++/* power is turned on, and then left on for TIMER_ON_TIMEOUT */
++// bjm debug struct timer_list mediachange_timer;
++// bjm debug static void mediachangetest(unsigned long);
++
++// bjm out
++// bjm out struct timer_list waiting_timer;
++static void waiting_timeout(unsigned long);
++
++/******************************************************************************/
++static void trans_result \
++ (unsigned char,unsigned char,unsigned char *,unsigned char *);
++static void calculate_ecc \
++ (unsigned char *,unsigned char *,unsigned char *,unsigned char *,unsigned char *);
++static unsigned char correct_data \
++ (unsigned char *,unsigned char *,unsigned char,unsigned char,unsigned char);
++
++ /* CP0-CP5 code table */
++static unsigned char ecctable[256] = {
++ 0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00,
++ 0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
++ 0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
++ 0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
++ 0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
++ 0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
++ 0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
++ 0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
++ 0x6A,0x3F,0x3C,0x69,0x33,0x66,0x65,0x30,0x30,0x65,0x66,0x33,0x69,0x3C,0x3F,0x6A,
++ 0x0F,0x5A,0x59,0x0C,0x56,0x03,0x00,0x55,0x55,0x00,0x03,0x56,0x0C,0x59,0x5A,0x0F,
++ 0x0C,0x59,0x5A,0x0F,0x55,0x00,0x03,0x56,0x56,0x03,0x00,0x55,0x0F,0x5A,0x59,0x0C,
++ 0x69,0x3C,0x3F,0x6A,0x30,0x65,0x66,0x33,0x33,0x66,0x65,0x30,0x6A,0x3F,0x3C,0x69,
++ 0x03,0x56,0x55,0x00,0x5A,0x0F,0x0C,0x59,0x59,0x0C,0x0F,0x5A,0x00,0x55,0x56,0x03,
++ 0x66,0x33,0x30,0x65,0x3F,0x6A,0x69,0x3C,0x3C,0x69,0x6A,0x3F,0x65,0x30,0x33,0x66,
++ 0x65,0x30,0x33,0x66,0x3C,0x69,0x6A,0x3F,0x3F,0x6A,0x69,0x3C,0x66,0x33,0x30,0x65,
++ 0x00,0x55,0x56,0x03,0x59,0x0C,0x0F,0x5A,0x5A,0x0F,0x0C,0x59,0x03,0x56,0x55,0x00
++};
++
++#define BIT7 0x80
++#define BIT6 0x40
++#define BIT5 0x20
++#define BIT4 0x10
++#define BIT3 0x08
++#define BIT2 0x04
++#define BIT1 0x02
++#define BIT0 0x01
++
++#define BIT1BIT0 0x03
++#define BIT23 0x00800000L
++#define MASK_CPS 0x3f
++#define CORRECTABLE 0x00555554L
++
++/*
++ Transfer result
++ LP14,12,10,... & LP15,13,11,... -> LP15,14,13,... & LP7,6,5,..
++*/
++static void trans_result(reg2,reg3,ecc1,ecc2)
++unsigned char reg2; /* LP14,LP12,LP10,... */
++unsigned char reg3; /* LP15,LP13,LP11,... */
++unsigned char *ecc1; /* LP15,LP14,LP13,... */
++unsigned char *ecc2; /* LP07,LP06,LP05,... */
++{
++ unsigned char a; /* Working for reg2,reg3 */
++ unsigned char b; /* Working for ecc1,ecc2 */
++ unsigned char i; /* For counting */
++
++ a=BIT7; b=BIT7; /* 80h=10000000b */
++ *ecc1=*ecc2=0; /* Clear ecc1,ecc2 */
++ for(i=0; i<4; ++i) {
++ if ((reg3&a)!=0) *ecc1|=b; /* LP15,13,11,9 -> ecc1 */
++ b=b>>1; /* Right shift */
++ if ((reg2&a)!=0) *ecc1|=b; /* LP14,12,10,8 -> ecc1 */
++ b=b>>1; /* Right shift */
++ a=a>>1; /* Right shift */
++ }
++ b=BIT7; /* 80h=10000000b */
++ for(i=0; i<4; ++i) {
++ if ((reg3&a)!=0) *ecc2|=b; /* LP7,5,3,1 -> ecc2 */
++ b=b>>1; /* Right shift */
++ if ((reg2&a)!=0) *ecc2|=b; /* LP6,4,2,0 -> ecc2 */
++ b=b>>1; /* Right shift */
++ a=a>>1; /* Right shift */
++ }
++}
++
++
++/*
++ Calculating ECC
++ data[0-255] -> ecc1,ecc2,ecc3 using CP0-CP5 code table[0-255]
++*/
++static void calculate_ecc(table,data,ecc1,ecc2,ecc3)
++unsigned char *table; /* CP0-CP5 code table */
++unsigned char *data; /* DATA */
++unsigned char *ecc1; /* LP15,LP14,LP13,... */
++unsigned char *ecc2; /* LP07,LP06,LP05,... */
++unsigned char *ecc3; /* CP5,CP4,CP3,...,"1","1" */
++{
++ unsigned int i; /* For counting */
++ unsigned char a; /* Working for table */
++ unsigned char reg1; /* D-all,CP5,CP4,CP3,... */
++ unsigned char reg2; /* LP14,LP12,L10,... */
++ unsigned char reg3; /* LP15,LP13,L11,... */
++
++ reg1=reg2=reg3=0; /* Clear parameter */
++
++ for(i=0; i<256; ++i) {
++ a=table[data[i]]; /* Get CP0-CP5 code from table */
++ reg1^=(a&MASK_CPS); /* XOR with a */
++ if ((a&BIT6)!=0) { /* If D_all(all bit XOR) = 1 */
++ reg3^=(unsigned char)i; /* XOR with counter */
++ reg2^=~((unsigned char)i); /* XOR with inv. of counter */
++ }
++ }
++
++ /* Trans LP14,12,10,... & LP15,13,11,... -> LP15,14,13,... & LP7,6,5,.. */
++ trans_result(reg2,reg3,ecc1,ecc2);
++
++ *ecc1=~(*ecc1); *ecc2=~(*ecc2); /* Inv. ecc2 & ecc3 */
++ *ecc3=((~reg1)<<2)|BIT1BIT0; /* Make TEL format */
++}
++
++static unsigned char correct_data(data,eccdata,ecc1,ecc2,ecc3)
++unsigned char *data; /* DATA */
++unsigned char *eccdata; /* ECC DATA */
++unsigned char ecc1; /* LP15,LP14,LP13,... */
++unsigned char ecc2; /* LP07,LP06,LP05,... */
++unsigned char ecc3; /* CP5,CP4,CP3,...,"1","1" */
++{
++ unsigned long l; /* Working to check d */
++ unsigned long d; /* Result of comparison */
++ unsigned int i; /* For counting */
++ unsigned char d1,d2,d3; /* Result of comparison */
++ unsigned char a; /* Working for add */
++ unsigned char add; /* Byte address of cor. DATA */
++ unsigned char b; /* Working for bit */
++ unsigned char bit; /* Bit address of cor. DATA */
++
++ d1=ecc1^eccdata[1]; d2=ecc2^eccdata[0]; /* Compare LP's */
++ d3=ecc3^eccdata[2]; /* Comapre CP's */
++ d=((unsigned long)d1<<16) /* Result of comparison */
++ +((unsigned long)d2<<8)
++ +(unsigned long)d3;
++
++ if (d==0) return(0); /* If No error, return */
++ if (((d^(d>>1))&CORRECTABLE)==CORRECTABLE) { /* If correctable */
++ l=BIT23;
++ add=0; /* Clear parameter */
++ a=BIT7;
++ for(i=0; i<8; ++i) { /* Checking 8 bit */
++ if ((d&l)!=0) add|=a; /* Make byte address from LP's */
++ l>>=2; a>>=1; /* Right Shift */
++ }
++ bit=0; /* Clear parameter */
++ b=BIT2;
++ for(i=0; i<3; ++i) { /* Checking 3 bit */
++ if ((d&l)!=0) bit|=b; /* Make bit address from CP's */
++ l>>=2; b>>=1; /* Right shift */
++ }
++ b=BIT0;
++ data[add]^=(b<<bit); /* Put corrected data */
++ return(1);
++ }
++ i=0; /* Clear count */
++ d&=0x00ffffffL; /* Masking */
++ while(d) { /* If d=0 finish counting */
++ if (d&BIT0) ++i; /* Count number of 1 bit */
++ d>>=1; /* Right shift */
++ }
++ if (i==1) { /* If ECC error */
++ eccdata[1]=ecc1; eccdata[0]=ecc2; /* Put right ECC code */
++ eccdata[2]=ecc3;
++ return(2);
++ }
++ return(3); /* Uncorrectable error */
++}
++/***************************************************************************
++ Common Subroutine
++ ***************************************************************************/
++char BitCount(unsigned char cdata)
++{
++ char bitcount=0;
++ while(cdata) {
++ bitcount+=(cdata &0x01);
++ cdata /=2;
++ }
++ return(bitcount);
++}
++
++char BitCountWord(unsigned int cdata)
++{
++ char bitcount=0;
++ while(cdata) {
++ bitcount+=(cdata &0x01);
++ cdata /=2;
++ }
++ return(bitcount);
++}
++
++/***************************************************************************/
++void StringCopy(char *stringA, char *stringB, int count)
++{
++ int i;
++ for(i=0; i<count; i++)
++ *stringA++ = *stringB++;
++}
++
++int StringCmp(char *stringA, char *stringB, int count)
++{
++ int i;
++ for (i=0;i<count;i++)
++ if (*stringA++ != *stringB++) return(ERROR);
++ return(SUCCESS);
++}
++/***************************************************************************/
++int CheckDataBlank(unsigned char *redundant)
++{
++ char i;
++ for(i=0; i<REDTSIZE; i++)
++ if(*redundant++!=0xFF) return(ERROR);
++ return(SUCCESS);
++}
++
++int CheckFailBlock(unsigned char *redundant)
++{
++ redundant+=REDT_BLOCK;
++ if(*redundant==0xFF) return(SUCCESS);
++ if(! *redundant) return(ERROR);
++ if(BitCount(*redundant)<7) return(ERROR);
++ return(SUCCESS);
++}
++
++int CheckCisBlock(unsigned char *redundant)
++{
++ if(! (*(redundant+REDT_ADDR1H)|*(redundant+REDT_ADDR1L)))
++ return(SUCCESS);
++ if(! (*(redundant+REDT_ADDR2H)|*(redundant+REDT_ADDR2L)))
++ return(SUCCESS);
++ return(ERROR);
++}
++
++int CheckDataStatus(unsigned char *redundant)
++{
++ redundant+=REDT_DATA;
++ if(*redundant==0xFF) return(SUCCESS);
++ if(! *redundant) return(ERROR);
++ if(BitCount(*redundant)<5) return(ERROR);
++ return(SUCCESS);
++}
++
++int LoadLogBlockAddr(ssfdc_dev *psm)
++{
++ unsigned int addr1,addr2;
++ addr1=*(psm->Redundant+REDT_ADDR1H)*0x100+*(psm->Redundant+REDT_ADDR1L);
++ addr2=*(psm->Redundant+REDT_ADDR2H)*0x100+*(psm->Redundant+REDT_ADDR2L);
++ if(addr1==addr2)
++ if((addr1 &0xF000)==0x1000)
++ { psm->LogBlock=(addr1 &0x0FFF)/2; return(SUCCESS); }
++ if(BitCountWord(addr1^addr2)>1) return(ERROR);
++ if((addr1 &0xF000)==0x1000)
++ if(! (BitCountWord(addr1) &0x0001))
++ { psm->LogBlock=(addr1 &0x0FFF)/2; return(SUCCESS); }
++ if((addr2 &0xF000)==0x1000)
++ if(! (BitCountWord(addr2) &0x0001))
++ { psm->LogBlock=(addr2 &0x0FFF)/2; return(SUCCESS); }
++ return(ERROR);
++}
++/***************************************************************************/
++void ClrRedundantData(unsigned char *redundant)
++{
++ char i;
++ for(i=0; i<REDTSIZE; i++) *(redundant+i)=0xFF;
++}
++
++/***************************************************************************/
++void SetLogBlockAddr(ssfdc_dev *psm, unsigned char *redundant)
++{
++ unsigned int addr;
++ *(redundant+REDT_BLOCK)=0xFF;
++ *(redundant+REDT_DATA) =0xFF;
++ addr=psm->LogBlock*2+0x1000;
++ if((BitCountWord(addr)%2)) addr++;
++ *(redundant+REDT_ADDR1H)=*(redundant+REDT_ADDR2H)=addr/0x100;
++ *(redundant+REDT_ADDR1L)=*(redundant+REDT_ADDR2L)=(unsigned char)addr;
++}
++
++void SetFailBlock(unsigned char *redundant)
++{
++ char i;
++ for(i=0; i<REDTSIZE; i++)
++ *redundant++=((i==REDT_BLOCK)?0xF0:0xFF);
++}
++
++void SetDataStatus(unsigned char *redundant)
++{
++ redundant+=REDT_DATA;
++ *redundant=0x00;
++}
++
++
++/***************************************************************************
++ NAND Memory (SmartMedia) Control Subroutine
++ ***************************************************************************/
++static void _SetSsfdcCmd(ssfdc_dev *psm, unsigned char cmd)
++{
++ _HwSetCmd(psm);
++ _HwOutData(psm,cmd);
++ _HwSetData(psm);
++}
++
++static void _SetSsfdcAddr(ssfdc_dev *psm, unsigned char add)
++{
++ unsigned int addr;
++
++#if DEBUG_SSFDC_ADDR
++ printk(KERN_DEBUG "_SetSsfdcAddr() Zone %d LogBlock %d PhyBlock %d Sector %d\n",
++ psm->Zone,psm->LogBlock,psm->PhyBlock,psm->Sector);
++#endif
++ addr=(unsigned int)psm->Zone*psm->MaxBlocks+psm->PhyBlock;
++ addr=addr*(unsigned int)psm->MaxSectors+psm->Sector;
++ if((psm->Attribute &MPS)==PS256) /* for 256byte/page */
++ addr=addr*2+(unsigned int)add;
++/*-----------------------------------------------*/
++ _HwSetAddr(psm);
++ _HwOutData(psm,0x00);
++ _HwOutData(psm,(unsigned char)addr);
++ _HwOutData(psm,(unsigned char)(addr/0x0100));
++ if((psm->Attribute &MADC)==AD4CYC)
++ _HwOutData(psm,(unsigned char)(psm->Zone/2)); /* Patch */
++ _HwSetData(psm);
++}
++
++static void _SetSsfdcBlock(ssfdc_dev *psm)
++{
++ unsigned int addr;
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "_SetSsfdcBlock() set card addr to PhyBlock %d\n", psm->PhyBlock);
++#endif
++ addr=(unsigned int)psm->Zone*psm->MaxBlocks+psm->PhyBlock;
++ addr=addr*(unsigned int)psm->MaxSectors;
++ if((psm->Attribute &MPS)==PS256) /* for 256byte/page */
++ addr=addr*2;
++/*-----------------------------------------------*/
++ _HwSetAddr(psm);
++ _HwOutData(psm,(unsigned char)addr);
++ _HwOutData(psm,(unsigned char)(addr/0x0100));
++ if((psm->Attribute &MADC)==AD4CYC)
++ _HwOutData(psm,(unsigned char)(psm->Zone/2)); /* Patch */
++ _HwSetData(psm);
++}
++
++static inline void _SetSsfdcStandby(ssfdc_dev *psm)
++{
++ _HwSetStandby(psm);
++}
++
++static int _CheckSsfdcStatus(ssfdc_dev *psm)
++{
++ int status;
++ if((status=_HwInData(psm)) & WR_FAIL) {
++ printk(KERN_DEBUG "_CheckSsfdcStatus() error %x\n", status);
++ return(ERROR);
++ }
++ return(SUCCESS);
++}
++
++static void _ResetSsfdcErr(ssfdc_dev *psm)
++{
++ _HwSetCmd(psm);
++ _HwOutData(psm,SSFDC_RST_CHIP);
++ _HwSetData(psm);
++ while(1) {
++ udelay(30);
++ if(! _HwChkBusy(psm)) break;
++ }
++ _HwSetStandby(psm);
++}
++
++static void waiting_timeout(unsigned long psm)
++{
++ // enable the wakeup signal!
++ wake_up(&((ssfdc_dev *)psm)->thread_wq);
++}
++
++/*
++ _CheckSsfdcBusy()
++
++ set a timer in jiffies from int time x .1ms
++*/
++
++static int _CheckSsfdcBusy(ssfdc_dev *psm, unsigned int time)
++{
++ unsigned long incr_div = 4;
++ unsigned long incr_us = time / incr_div,
++ jticks=time/(MSEC * JIFFY_TICK_MS);
++ unsigned long tick_retried=0, wrap_flag, expires;
++
++ if (!jticks) {
++ // small delay first to test completion
++ do {
++ udelay(incr_us);
++ if (!_HwChkBusy(psm))
++ return(SUCCESS);
++ } while (incr_div--);
++ return(ERROR);
++ }
++
++ // Block the wakeup signal?
++
++one_more_time:
++ expires = jiffies + jticks;
++ wrap_flag = ( expires < jiffies);
++
++ do {
++ wait_event_interruptible_timeout(psm->thread_wq, 0, jticks);
++ if (!_HwChkBusy(psm)) {
++ return(SUCCESS);
++ }
++ } while (wrap_flag ? expires <= jiffies : expires >= jiffies);
++
++#if 1
++ // Is the chip not busy? If so its an ERROR
++ if (!_HwChkBusy(psm)) {
++ return(SUCCESS);
++ }
++ else {
++ // if we came back, give us one more tick/time
++ if (! tick_retried ) {
++ tick_retried = 1;
++ jticks = 0;
++ printk(".");
++ goto one_more_time;
++ }
++ return(ERROR);
++ }
++#endif
++}
++
++static void _SetSsfdcChip(ssfdc_dev *psm)
++{
++ _HwSetAddr(psm);
++ _HwOutData(psm,0x00);
++ _HwSetData(psm);
++}
++/***************************************************************************
++ NAND Memory (SmartMedia) Buffer Data Xfer Subroutine
++ ***************************************************************************/
++static void _ReadSsfdcBuf(ssfdc_dev *psm,unsigned char *databuf,unsigned char *redundant)
++{
++ int i;
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x100:0x200);i++)
++ *databuf++ =_HwInData(psm);
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x08:0x10);i++)
++ *redundant++ =_HwInData(psm);
++}
++
++static void _WriteSsfdcBuf(ssfdc_dev *psm, unsigned char *databuf,unsigned char *redundant)
++{
++ int i;
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x100:0x200);i++)
++ _HwOutData(psm,*databuf++);
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x08:0x10);i++)
++ _HwOutData(psm,*redundant++);
++}
++
++static void _ReadSsfdcWord(ssfdc_dev *psm, unsigned int *pdata)
++{
++ *pdata =_HwInData(psm)*0x100;
++ *pdata|=(unsigned char)_HwInData(psm);
++}
++
++static void _ReadRedtSsfdcBuf(ssfdc_dev *psm,unsigned char *redundant)
++{
++ int i;
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x08:0x10);i++)
++ redundant[i] =_HwInData(psm);
++}
++
++static void _WriteRedtSsfdcBuf(ssfdc_dev *psm, unsigned char *redundant)
++{
++ char i;
++ for(i=0x00;i<(((psm->Attribute &MPS)==PS256)?0x08:0x10);i++)
++ _HwOutData(psm,*redundant++);
++}
++
++/***************************************************************************
++ Timer Control Subroutine
++ ***************************************************************************/
++#define SHORT_DELAY 1
++
++
++
++
++void _GetDateTime(char *date)
++{
++}
++
++/*
++_WaitTimer(long time) time is in ticks.
++*/
++
++static inline void _WaitTimer(long time)
++{
++}
++
++/***************************************************************************
++ SmartMedia Function Command Subroutine
++ ***************************************************************************/
++void SsfdcReset(ssfdc_dev *psm)
++{
++ _SetSsfdcCmd(psm, SSFDC_RST_CHIP);
++ _CheckSsfdcBusy(psm,BUSY_RESET);
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _CheckSsfdcBusy(psm,BUSY_READ);
++ _SetSsfdcStandby(psm);
++}
++
++void SsfdcWriteRedtMode(ssfdc_dev *psm)
++{
++ _SetSsfdcCmd(psm,SSFDC_RST_CHIP);
++ _CheckSsfdcBusy(psm,BUSY_RESET);
++ _SetSsfdcCmd(psm,SSFDC_READ_REDT);
++ _CheckSsfdcBusy(psm,BUSY_READ);
++ _SetSsfdcStandby(psm);
++}
++
++void SsfdcReadID(ssfdc_dev *psm, unsigned int *pid)
++{
++ _SetSsfdcCmd(psm,SSFDC_READ_ID);
++ _SetSsfdcChip(psm);
++ _ReadSsfdcWord(psm,pid);
++ _SetSsfdcStandby(psm);
++}
++
++int SsfdcCheckStatus(ssfdc_dev *psm)
++{
++ _SetSsfdcCmd(psm,SSFDC_RDSTATUS);
++ if(_CheckSsfdcStatus(psm))
++ { _SetSsfdcStandby(psm); return(ERROR); }
++ _SetSsfdcStandby(psm);
++ return(SUCCESS);
++}
++
++int SsfdcReadSect(ssfdc_dev *psm, unsigned char *buf,unsigned char *redundant)
++{
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "SsfdcReadSect() - Zone %d LogBlock %d, PhyBlock %d, Sector %d\n",
++ psm->Zone, psm->LogBlock, psm->PhyBlock, psm->Sector);
++#endif
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _SetSsfdcAddr(psm, EVEN);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ _ReadSsfdcBuf(psm,buf,redundant);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ if((psm->Attribute &MPS)==PS256) {
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _SetSsfdcAddr(psm, ODD);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ _ReadSsfdcBuf(psm,buf+0x100,redundant+0x08);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ }
++ _SetSsfdcStandby(psm);
++ return(SUCCESS);
++}
++
++int SsfdcWriteSect(ssfdc_dev *psm, unsigned char *buf, unsigned char *redundant)
++{
++#if DEBUG_SSFDC_WRITESECT
++ printk(KERN_DEBUG "SsfdcWriteSect() - Zone %d LogBlock %d, PhyBlock %d, Sector %d\n", \
++ psm->Zone, psm->LogBlock, psm->PhyBlock, psm->Sector);
++#endif
++ _SetSsfdcCmd(psm,SSFDC_WRDATA);
++ _SetSsfdcAddr(psm,EVEN);
++ _WriteSsfdcBuf(psm,buf,redundant);
++ _SetSsfdcCmd(psm,SSFDC_WRITE);
++ if(_CheckSsfdcBusy(psm,BUSY_PROG))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_WRITESECT
++ printk(KERN_DEBUG "SsfdcWriteSect() e 1\n");
++#endif
++ return(ERROR); }
++ if((psm->Attribute &MPS)==PS256) {
++ _SetSsfdcCmd(psm,SSFDC_RDSTATUS);
++ if(_CheckSsfdcStatus(psm))
++ { _SetSsfdcStandby(psm); return(SUCCESS); }
++ _SetSsfdcCmd(psm,SSFDC_WRDATA);
++ _SetSsfdcAddr(psm,ODD);
++ _WriteSsfdcBuf(psm,buf+0x100,redundant+0x08);
++ _SetSsfdcCmd(psm,SSFDC_WRITE);
++ if(_CheckSsfdcBusy(psm,BUSY_PROG))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_WRITESECT
++ printk(KERN_DEBUG "SsfdcWriteSect() e 2\n");
++#endif
++ return(ERROR); }
++ }
++ _SetSsfdcStandby(psm);
++ return(SUCCESS);
++}
++
++int SsfdcEraseBlock(ssfdc_dev *psm)
++{
++ _SetSsfdcCmd(psm,SSFDC_ERASE1);
++ _SetSsfdcBlock(psm);
++ _SetSsfdcCmd(psm,SSFDC_ERASE2);
++ if(_CheckSsfdcBusy(psm,BUSY_ERASE) || SsfdcCheckStatus(psm)) {
++ _ResetSsfdcErr(psm);
++ return(ERROR);
++ }
++ _SetSsfdcStandby(psm);
++ return(SUCCESS);
++}
++
++int SsfdcReadRedtData(ssfdc_dev *psm, unsigned char *redundant)
++{
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " +");
++#endif
++ _SetSsfdcCmd(psm,SSFDC_READ_REDT);
++ _SetSsfdcAddr(psm,EVEN);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " e 1\n");
++#endif
++ return(ERROR); }
++ _ReadRedtSsfdcBuf(psm, redundant);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " e 2\n");
++#endif
++ return(ERROR); }
++ if((psm->Attribute &MPS)==PS256) {
++ _SetSsfdcCmd(psm,SSFDC_READ_REDT);
++ _SetSsfdcAddr(psm,ODD);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " e 3\n");
++#endif
++
++ return(ERROR); }
++ _ReadRedtSsfdcBuf(psm, redundant+0x08);
++ if(_CheckSsfdcBusy(psm,BUSY_READ))
++ { _ResetSsfdcErr(psm);
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " e 4\n");
++#endif
++ return(ERROR); }
++ }
++ _SetSsfdcStandby(psm);
++#if DEBUG_SSFDC_READREDT
++ printk(KERN_DEBUG " -\n");
++#endif
++ return(SUCCESS);
++}
++
++int SsfdcWriteRedtData(ssfdc_dev *psm, unsigned char *redundant)
++{
++ _SetSsfdcCmd(psm,SSFDC_WRDATA);
++ _SetSsfdcAddr(psm,EVEN);
++ _WriteRedtSsfdcBuf(psm,redundant);
++ _SetSsfdcCmd(psm,SSFDC_WRITE);
++ if(_CheckSsfdcBusy(psm,BUSY_PROG))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ if((psm->Attribute &MPS)==PS256) {
++ _SetSsfdcCmd(psm,SSFDC_RDSTATUS);
++ if(_CheckSsfdcStatus(psm))
++ { _SetSsfdcStandby(psm); return(SUCCESS); }
++ _SetSsfdcCmd(psm,SSFDC_WRDATA);
++ _SetSsfdcAddr(psm,ODD);
++ _WriteRedtSsfdcBuf(psm,redundant+0x08);
++ _SetSsfdcCmd(psm,SSFDC_WRITE);
++ if(_CheckSsfdcBusy(psm,BUSY_PROG))
++ { _ResetSsfdcErr(psm); return(ERROR); }
++ }
++ _SetSsfdcStandby(psm);
++ return(SUCCESS);
++}
++
++/***************************************************************************
++ SmartMedia ID Code Check & Mode Set Subroutine
++ ***************************************************************************/
++int SetSsfdcModel(ssfdc_dev *psm, unsigned char dcode)
++{
++ switch(_CheckDevCode(dcode)) {
++ case SSFDC1MB:
++ psm->Model = SSFDC1MB;
++ psm->Attribute = FLASH | AD3CYC | BS16 | PS256;
++ psm->MaxZones = 1;
++ psm->MaxBlocks = 256;
++ psm->MaxLogBlocks = 250;
++ psm->MaxSectors = 8;
++ break;
++ case SSFDC2MB:
++ psm->Model = SSFDC2MB;
++ psm->Attribute = FLASH | AD3CYC | BS16 | PS256;
++ psm->MaxZones = 1;
++ psm->MaxBlocks = 512;
++ psm->MaxLogBlocks = 500;
++ psm->MaxSectors = 8;
++ break;
++ case SSFDC4MB:
++ psm->Model = SSFDC4MB;
++ psm->Attribute = FLASH | AD3CYC | BS16 | PS512;
++ psm->MaxZones = 1;
++ psm->MaxBlocks = 512;
++ psm->MaxLogBlocks = 500;
++ psm->MaxSectors = 16;
++ break;
++ case SSFDC8MB:
++ psm->Model = SSFDC8MB;
++ psm->Attribute = FLASH | AD3CYC | BS16 | PS512;
++ psm->MaxZones = 1;
++ psm->MaxBlocks = 1024;
++ psm->MaxLogBlocks = 1000;
++ psm->MaxSectors = 16;
++ break;
++ case SSFDC16MB:
++ psm->Model = SSFDC16MB;
++ psm->Attribute = FLASH | AD3CYC | BS32 | PS512;
++ psm->MaxZones = 1;
++ psm->MaxBlocks = 1024;
++ psm->MaxLogBlocks = 1000;
++ psm->MaxSectors = 32;
++ break;
++ case SSFDC32MB:
++ psm->Model = SSFDC32MB;
++ psm->Attribute = FLASH | AD3CYC | BS32 | PS512;
++ psm->MaxZones = 2;
++ psm->MaxBlocks = 1024;
++ psm->MaxLogBlocks = 1000;
++ psm->MaxSectors = 32;
++ break;
++ case SSFDC64MB:
++ psm->Model = SSFDC64MB;
++ psm->Attribute = FLASH | AD4CYC | BS32 | PS512;
++ psm->MaxZones = 4;
++ psm->MaxBlocks = 1024;
++ psm->MaxLogBlocks = 1000;
++ psm->MaxSectors = 32;
++ break;
++ case SSFDC128MB:
++ psm->Model = SSFDC128MB;
++ psm->Attribute = FLASH | AD4CYC | BS32 | PS512;
++ psm->MaxZones = 8;
++ psm->MaxBlocks = 1024;
++ psm->MaxLogBlocks = 1000;
++ psm->MaxSectors = 32;
++ break;
++ default:
++ psm->Model = NOSSFDC;
++ return(ERROR);
++ }
++ return(SUCCESS);
++}
++
++/***************************************************************************/
++static unsigned char _CheckDevCode(unsigned char dcode)
++{
++ switch(dcode){
++ case 0x6E:
++ case 0xE8:
++ case 0xEC: return(SSFDC1MB); /* 8Mbit (1M) NAND */
++ case 0x64:
++ case 0xEA: return(SSFDC2MB); /* 16Mbit (2M) NAND */
++ case 0x6B:
++ case 0xE3:
++ case 0xE5: return(SSFDC4MB); /* 32Mbit (4M) NAND */
++ case 0xE6: return(SSFDC8MB); /* 64Mbit (8M) NAND */
++ case 0x73: return(SSFDC16MB); /*128Mbit (16M)NAND */
++ case 0x75: return(SSFDC32MB); /*256Mbit (32M)NAND */
++ case 0x76: return(SSFDC64MB); /*512Mbit (64M)NAND */
++ case 0x79: return(SSFDC128MB); /* 1Gbit(128M)NAND */
++ default: return(ERROR);
++ }
++}
++/***************************************************************************
++ SmartMedia Power Control Subroutine
++ ***************************************************************************/
++void CntReset(ssfdc_dev *psm)
++{
++ _HwSetStandby(psm);
++ _HwVccOff(psm);
++}
++
++int CntPowerOn(ssfdc_dev *psm)
++{
++ _HwVccOn(psm);
++ _WaitTimer(TIME_PON);
++ if(_HwChkPower(psm))
++ return(SUCCESS);
++ _HwVccOff(psm);
++ return(ERROR);
++}
++
++#if 0 // remove for now
++static void mediachangetest(unsigned long dev_idx)
++{
++ ssfdc_dev *psm = ssfdc[dev_idx];
++ unsigned int cardpresent;
++ unsigned long flags;
++
++ spin_lock_irqsave( &psm->req_queue_lock, flags );
++ // bjm spin_lock( &psm->req_queue_lock);
++
++ del_timer(&mediachange_timer);
++
++ // check current card presence
++ if ( ! (cardpresent = CntPowerOn(psm)) && psm->CardPresent ) {
++ psm->MediaChange = 1;
++ psm->DataBuf_Valid = 0;
++ }
++ psm->CardPresent = cardpresent;
++
++ // set up to run again...
++ mediachange_timer.function = mediachangetest;
++ mediachange_timer.expires = jiffies + (HZ / 2);
++ mediachange_timer.data = dev_idx;
++ add_timer(&mediachange_timer);
++
++ spin_unlock_irqrestore( &psm->req_queue_lock, flags );
++ // bjm spin_unlock( &psm->req_queue_lock);
++}
++#endif
++
++int CheckCardExist(ssfdc_dev *psm)
++{
++ char i,j,k;
++ if(! _HwChkStatus(psm)) /***** Not Status Change *****/
++ if(_HwChkCardIn(psm)) return(SUCCESS); /* Card exist in Slot */
++ for(i=0,j=0,k=0; i<0x10; i++) {
++ if(_HwChkCardIn(psm)) /***** Status Change *****/
++ { j++; k=0; }
++ else { j=0; k++; }
++ if(j>3) return(SUCCESS); /* Card exist in Slot */
++ if(k>3) return(ERROR); /* NO Card exist in Slot */
++ _WaitTimer(TIME_CDCHK);
++ }
++ return(ERROR);
++}
++
++int CheckSsfdcWP(ssfdc_dev *psm)
++{ /* ERROR: WP, SUCCESS: Not WP */
++ char i;
++ for(i=0; i<0x08; i++) {
++ if(_HwChkWP(psm))
++ return(ERROR);
++ _WaitTimer(TIME_WPCHK);
++ }
++ return(SUCCESS);
++}
++
++/******************************************/
++int CheckCISdata(unsigned char *buf,unsigned char *redundant)
++{
++ static unsigned char cis[]={ 0x01,0x03,0xD9,0x01,0xFF,0x18,0x02,0xDF,0x01,0x20 };
++ unsigned char ecc1,ecc2,ecc3;
++ unsigned int err;
++ calculate_ecc(ecctable,buf,&ecc1,&ecc2,&ecc3);
++ err=correct_data(buf,redundant+0x0D,ecc1,ecc2,ecc3);
++ if(err==0 || err==1 || err==2)
++ return(StringCmp(buf,cis,10));
++ buf+=0x100;
++ calculate_ecc(ecctable,buf,&ecc1,&ecc2,&ecc3);
++ err=correct_data(buf,redundant+0x08,ecc1,ecc2,ecc3);
++ if(err==0 || err==1 || err==2)
++ return(StringCmp(buf,cis,10));
++ return(ERROR);
++}
++
++int CheckECCdata(unsigned char *buf,unsigned char *redundant)
++{
++ unsigned char ecc1,ecc2,ecc3;
++ unsigned int err, corr=SUCCESS;
++ calculate_ecc(ecctable,buf,&ecc1,&ecc2,&ecc3);
++ err=correct_data(buf,redundant+0x0D,ecc1,ecc2,ecc3);
++ if(err==1 || err==2) corr=CORRECT;
++ else if(err) return(ERROR);
++ buf+=0x100;
++ calculate_ecc(ecctable,buf,&ecc1,&ecc2,&ecc3);
++ err=correct_data(buf,redundant+0x08,ecc1,ecc2,ecc3);
++ if(err==1 || err==2) corr=CORRECT;
++ else if(err) return(ERROR);
++ return(corr);
++}
++
++void SetECCdata(unsigned char *buf,unsigned char *redundant)
++{
++ calculate_ecc(ecctable,buf,redundant+0x0E,redundant+0x0D,redundant+0x0F);
++ buf+=0x100;
++ calculate_ecc(ecctable,buf,redundant+0x09,redundant+0x08,redundant+0x0A);
++}
++
++/***************************************************************************
++ Power Control & Media Exist Check Function
++ ***************************************************************************/
++
++/***************************************************************************
++ SmartMedia Read/Write/Erase Function
++ ***************************************************************************/
++static int MediaReadSector(ssfdc_dev *psm, struct request *req,
++ char * bbuf, long start,int count)
++{
++ char *buf;
++ int i, err, request_complete,
++ PrevBlock = NO_ASSIGN;
++ int read_status=0;
++
++ if (ConvMediaAddr(psm, start)) {
++ printk(KERN_ERR "MediaReadSector() - bad address conversion\n");
++ goto read_exit;
++ }
++
++ psm->ReqSectorSize = count;
++ psm->BufIndex = 0;
++ psm->RetryCount = 0;
++
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "MediaReadSector() - read %d sectors @ %d\n", psm->ReqSectorSize, start);
++#endif
++ while (psm->ReqSectorSize) {
++ // if this PhyBlock is not assigned, fill with dummy data and return
++ // An assigned block results in a card access and readsector schedule...
++ if (psm->PhyBlock == NO_ASSIGN) {
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "Read NO_ASSIGN block %x\n", psm->PhyBlock);
++#endif
++ buf = bbuf + psm->BufIndex;
++ for(i=0; i<SSFDC_SECTSIZE; i++)
++ *buf++=DUMMY_DATA;
++ }
++ else {
++ // send our command
++ if (PrevBlock != psm->PhyBlock) {
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "Read block %x\n", psm->PhyBlock);
++#endif
++ PrevBlock = psm->PhyBlock;
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _SetSsfdcAddr(psm, EVEN);
++ for (i=0; i<5; ++i) {
++ if (!_HwChkBusy(psm))
++ break;
++ udelay(10);
++ }
++ }
++
++
++ if ( _HwChkBusy(psm) ) {
++ ++psm->Sect_rd_errs_ttl;
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "MediaReadSector() - Hardware busy!\n");
++#endif
++ }
++ else {
++ ++psm->Sector_reads;
++ _ReadSsfdcBuf( psm, psm->SectBuf, psm->Redundant);
++
++ // verify the integrity of what was read
++ if (CheckDataStatus(psm->Redundant)) {
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "Bad Data Status\n");
++#endif
++ goto error_state;
++ }
++
++ switch (err = CheckECCdata(psm->SectBuf,psm->Redundant))
++ {
++ case CORRECT:
++ // Correctable data, fix and copy like SUCCESS
++ SetECCdata(psm->SectBuf,psm->Redundant);
++ case SUCCESS:
++ memcpy(bbuf + psm->BufIndex, psm->SectBuf, SSFDC_SECTSIZE);
++ break;
++
++ case ERROR:
++error_state:
++ ++psm->Sect_rd_errs_ttl;
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "readsector() - err == ERROR\n");
++#endif
++ _ResetSsfdcErr(psm);
++ if (++psm->RetryCount < RD_RETRY_LIMIT) {
++ continue;
++ }
++ break;
++ default:
++ ssfdc_terminate_request( psm, req);
++ break;
++ }
++
++ } // if ( _HwChkBusy(psm) )
++ } // if (psm->PhyBlock == NO_ASSIGN)
++
++ // common req/buffer management code for either unassigned or assigned
++ // block from /dev/ssfdc
++ psm->RetryCount = 0;
++ psm->BufIndex += SSFDC_SECTSIZE;
++ request_complete = (--psm->ReqSectorSize == 0);
++ if (request_complete) {
++ // completed the read, req->buffer now has requested sector(s).
++ // End the request waking sleeping process and reschedule initxfer().
++#if DEBUG_SSFDC_READ
++ printk(KERN_DEBUG "readsector() - req %x complete\n", req);
++#endif
++ read_status = 1;
++ }
++ else if (IncMediaAddr(psm)) {
++ printk(KERN_DEBUG "readsector() - IncMediaAddr() error.\n");
++ goto read_exit;
++ }
++ } // while (psm->ReqSectorSize)
++
++read_exit:
++ psm->XferState = xfer_idle;
++
++ return read_status;
++
++}
++
++/*
++ ReadBlkCopy(ssfdc_dev *psm, unsigned char *buf)
++*/
++int ReadBlkCopy(ssfdc_dev *psm, unsigned char *buf, char *rd_sector_status)
++{
++ int err, read_error=0, rw_retry=0;
++ unsigned long PrevBlock=NO_ASSIGN;
++
++ if ( ! buf ) {
++ printk(KERN_ERR "NULL buffer pointer\n");
++ return ERROR;
++ }
++
++ if (psm->PhyBlock == NO_ASSIGN) {
++ memset(buf, 0xff, psm->MaxSectors * SSFDC_SECTSIZE);
++ memset(rd_sector_status, 1, sizeof(char) * MAX_SECTNUM);
++ return SUCCESS;
++ }
++
++#if 0
++ printk(KERN_ERR "ReadBlkCopy() - LogBlk %d\n", psm->LogBlock);
++#endif
++
++ for (psm->Sector = 0;
++ psm->PhyBlock != NO_ASSIGN && psm->Sector < psm->MaxSectors;
++ ++psm->Sector)
++ {
++ if (PrevBlock != psm->PhyBlock) {
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _SetSsfdcAddr(psm, EVEN);
++ PrevBlock = psm->PhyBlock;
++ _CheckSsfdcBusy(psm, BUSY_ADDR_SET);
++ }
++
++ if ( _HwChkBusy(psm) ) {
++ printk(KERN_ERR "%s: HW busy during block copy!\n", MAJOR_NAME);
++ goto error_state;
++ }
++
++ _ReadSsfdcBuf( psm, psm->SectBuf, psm->Redundant);
++ if (CheckDataStatus(psm->Redundant)) {
++ printk("KERN_ERR reading Block %d, sector %d\n", psm->PhyBlock, psm->Sector);
++ goto error_state;
++ }
++
++ // Attempt to correct
++ switch (err = CheckECCdata(psm->SectBuf,psm->Redundant))
++ {
++ case CORRECT:
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "ReadBlkCopy() - err == CORRECT\n");
++#endif
++ SetECCdata(psm->SectBuf,psm->Redundant);
++ case SUCCESS:
++ read_error = 0;
++ rw_retry = 0;
++ memcpy(buf + (psm->Sector * SSFDC_SECTSIZE), psm->SectBuf, SSFDC_SECTSIZE);
++ rd_sector_status[psm->Sector] = 1;
++ read_error = 0;
++ break;
++
++ case ERROR:
++error_state:
++/*bjm*/ printk("ERR - ECC error reading Block %d, Sector %d\n", psm->PhyBlock,psm->Sector);
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "ReadBlkCopy() - err == ERROR\n");
++ printk("_ResetSsfdcErr(psm)\n");
++#endif
++ _ResetSsfdcErr(psm);
++ PrevBlock = NO_ASSIGN;
++ if (++rw_retry < RD_RETRY_LIMIT) {
++ // retry current Sector/loop counter on next loop iteration.
++ --psm->Sector;
++ }
++ else {
++ // set sector data in copy buf to the unassigned value 0xFF
++ // next loop iteration will read next Sector, zero RetryCount
++ // for next sectors read
++ // map bad sector...
++ memset(buf + psm->Sector * SSFDC_SECTSIZE, 0xFF, SSFDC_SECTSIZE);
++ rw_retry = 0;
++ rd_sector_status[psm->Sector] = 0;
++ ++psm->Sect_rd_errs_ttl;
++ read_error = 1;
++ }
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "Unable to read Blk %d Sector %d\n", psm->PhyBlock, psm->Sector);
++#endif
++ break;
++ }
++ }
++ if (!read_error) {
++ if (SsfdcEraseBlock(psm)) {
++ MarkFailPhyOneBlock(psm);
++ ++psm->Bad_blks_erase;
++ }
++ else {
++ ClrBit(psm->Assign[psm->Zone], psm->PhyBlock);
++ }
++ }
++ else {
++ printk("Read error block %d\n", psm->PhyBlock);
++ MarkFailPhyOneBlock(psm);
++ }
++ psm->Sector = 0;
++ return read_error ? ERROR : SUCCESS;
++}
++
++/*
++ WriteBlock()
++*/
++int WriteBlock(ssfdc_dev *psm, char *buf, char *wr_sector_status)
++{
++ int write_error=0, reassign_retry=0;
++
++ for ( reassign_retry = 0; reassign_retry < REASSIGN_RETRY_LIMIT; ++reassign_retry)
++ {
++ /*
++ assign new write block for write req
++ - set new write address
++ - write buffer to new block
++ */
++#if DEBUG_SSFDC_WRITE
++ if (AssignWriteBlock(psm,1)) {
++#else
++ if (AssignWriteBlock(psm,0)) {
++#endif
++ write_error = 1;
++ printk(KERN_ERR "sm%dd Unable to assign new write block.\n", psm->sm_minor);
++ memset(wr_sector_status, 1, sizeof(char) * MAX_SECTNUM);
++ // ssfdc_terminate_request(psm, req);
++ return ERROR;
++ }
++
++#if 0
++ printk(KERN_ERR "WriteBlock() - LogBlock %d\n", psm->LogBlock);
++#endif
++
++ for (psm->Sector = 0; psm->Sector < psm->MaxSectors; ++psm->Sector)
++ {
++ memcpy(psm->SectBuf,buf+psm->Sector*SSFDC_SECTSIZE,SSFDC_SECTSIZE);
++
++ _SetSsfdcCmd(psm,SSFDC_WRDATA);
++ _SetSsfdcAddr(psm,EVEN);
++ ClrRedundantData(psm->Redundant);
++ SetLogBlockAddr(psm,psm->Redundant);
++ SetECCdata(psm->SectBuf,psm->Redundant);
++ _WriteSsfdcBuf(psm,psm->SectBuf,psm->Redundant);
++
++#if DEBUG_SSFDC_WRITE
++ printk("%d ", psm->Sector);
++#endif
++
++ _SetSsfdcCmd(psm, SSFDC_WRITE);
++ if ( ! _CheckSsfdcBusy(psm, BUSY_PROG) && !SsfdcCheckStatus(psm)) {
++#if DEBUG_SSFDC_WRITE
++ printk("\nMulti-Sector write OK!\n");
++#endif
++ _SetSsfdcStandby(psm);
++ // mark status a success
++ wr_sector_status[psm->Sector] = 1;
++
++#if 0 // bjm removed
++ { unsigned char parbuf[SSFDC_SECTSIZE];
++ unsigned char redtpar[REDTSIZE];
++
++ _SetSsfdcCmd(psm,SSFDC_READ);
++ _SetSsfdcAddr(psm, EVEN);
++
++ udelay(30);
++ if ( _HwChkBusy(psm) ) {
++ _ResetSsfdcErr(psm);
++ printk("paranoid read failure\n");
++ }
++ else {
++ _ReadSsfdcBuf(psm, parbuf, redtpar);
++ if (CheckDataStatus(redtpar)) {
++ printk("paranoid read, bad data status\n");
++ }
++ else {
++ switch( err = CheckECCdata(parbuf,redtpar))
++ {
++ case CORRECT:
++ printk("paranoid correctable\n");
++ SetECCdata(parbuf,redtpar);
++ case SUCCESS:
++ if (memcmp(parbuf,psm->SectBuf, SSFDC_SECTSIZE))
++ write_error = 1;
++ else
++ write_error = 0;
++ break;
++ case ERROR:
++ MarkFailPhyOneBlock(psm);
++ write_error=1;
++ break;
++ }
++ }
++ }
++ } // bjm end of paranoid read back test...
++#endif
++ }
++ else {
++#if DEBUG_SSFDC_WRITE
++ printk("\nMulti-Sector write FAILED!\n");
++#endif
++ // mark status a failure
++ wr_sector_status[psm->Sector] = 0;
++ _ResetSsfdcErr(psm);
++ write_error = 1;
++ break;
++ } // for (psm->Sector ...)
++ if (write_error)
++ break;
++ }
++ if ( ! write_error ) {
++ psm->Log2Phy[psm->Zone][psm->LogBlock] = psm->WriteBlock;
++ break;
++ }
++ }
++ psm->Sector = 0;
++ return write_error ? ERROR : SUCCESS;
++}
++
++/*
++ MediaWriteSector()
++
++*/
++static int MediaWriteSector(ssfdc_dev *psm, struct request *req, char * bbuf, long start, int count)
++{
++ int write_error=0, unwritten_block=0;
++ char *buf;
++ unsigned long curr_sector, blksize, PrevBlock;
++ unsigned long writebuf_index, readbio_index;
++ int i, sector, rw_retry=0;
++ int sectors_in_block;
++ char rd_sector_status[MAX_SECTNUM];
++ char wr_sector_status[MAX_SECTNUM];
++
++ // optimized write, new vars
++ int bio_endios=0;
++ int bio_bvecs=0;
++ struct bio *bio;
++ // optimized for write
++
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "+MediaWriteSector()\n");
++#endif
++
++ if (!count) {
++ printk("MediaWriteSector() count == 0!\n");
++ ssfdc_end_request(psm, req, 0);
++ return 1;
++ }
++
++ if (CheckMediaWP(psm)) {
++ printk(KERN_DEBUG "%s: write protected media.\n", MAJOR_NAME);
++ ssfdc_terminate_request( psm, req);
++ psm->XferState = xfer_idle;
++ return -EIO;
++ }
++
++ // allocate block size buffer
++ blksize = psm->MaxSectors * SSFDC_SECTSIZE;
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "%s: Allocate %d sized block.\n", MAJOR_NAME, blksize);
++#endif
++ if ((buf = kmalloc(blksize, GFP_ATOMIC)) == NULL) {
++ printk(KERN_ERR "%s: Null buffer allocated!\n", MAJOR_NAME);
++ ssfdc_terminate_request( psm, req);
++ goto the_exit;
++ }
++
++ /*
++ Loop to handle a request at the curr_sector of count sectors.
++ The write operation my encompas more than one phys block.
++ */
++ curr_sector = start;
++ sectors_in_block = 0;
++ // zero out our sector R/W status array
++ memset(rd_sector_status, 1, sizeof(char) * MAX_SECTNUM);
++ memset(wr_sector_status, 1, sizeof(char) * MAX_SECTNUM);
++
++ // rangecheck this sector within the device.
++ if (ConvMediaAddr(psm, curr_sector)) {
++ ssfdc_terminate_request(psm, req);
++ printk(KERN_ERR "WriteSector: ConvMediaAddr() error\n");
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "-MediaWriteSector()\n");
++#endif
++ return 0;
++ }
++
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "MediaWriteSector() Zone %d, LogBlock %d PhyBlock %d, Sector %d\n",
++ psm->Zone,psm->LogBlock, psm->PhyBlock,psm->Sector);
++#endif
++
++ PrevBlock = NO_ASSIGN;
++ rw_retry = 0;
++
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "Copy Zone %d, Phys %d\n", psm->Zone, psm->PhyBlock);
++#endif
++ // As a technique for wear leveling, a write to the SM results in the contents
++ // of the block to be copied into a blocksize buffer, the write data of the
++ // write request being overlayed onto the buffer containing the copied block,
++ // a new logical to physical mapping defined, and the buffer written into this
++ // newly mapped (logically) physical block.
++
++ // read the physical block into the buffer.
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "ReadBlock = %d LogBlock %d\n", psm->PhyBlock, psm->LogBlock);
++#endif
++ if (ReadBlkCopy(psm, buf, rd_sector_status) != SUCCESS) {
++ printk(KERN_ERR "Unable to read block.\n");
++ goto the_exit;
++ }
++
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "Read from pending write request ");
++#endif
++
++#if 0
++ int bio_idx=0;
++#endif
++ rq_for_each_bio(bio, req) {
++ struct bio_vec *bvec;
++ int i, break_flag=0;
++#if 0
++ int segment_idx;
++ printk(KERN_ERR "bio %d\n", bio_idx++);
++
++ segment_idx = 0;
++#endif
++ // bio_bvecs = 0;
++ bio_for_each_segment(bvec, bio, i) {
++#if 0
++ printk(KERN_ERR "segment %d\n", segment_idx++);
++#endif
++ // The conditions...
++ // bio fits within block
++ if (WriteReqInCurrBlk(psm,curr_sector + (bvec->bv_len >> 9) - 1,&sector)
++ && WriteReqInCurrBlk(psm,curr_sector, &sector))
++ {
++#if 0
++ printk(KERN_ERR "LogBlk %d: write at %d, %d sectors\n",
++ psm->LogBlock, curr_sector % psm->MaxSectors, bio_cur_sectors(bio));
++#endif
++ // write bio into copied block
++ ++bio_bvecs;
++ writebuf_index = sector * SSFDC_SECTSIZE;
++#if 0
++ printk(KERN_ERR "memcpy buf at 0x%x, 0x%x bytes\n",
++ writebuf_index, bvec->bv_len);
++#endif
++ memcpy(buf + writebuf_index,
++ page_address(bvec->bv_page) + bvec->bv_offset, bvec->bv_len);
++ unwritten_block = 1;
++ curr_sector += bvec->bv_len >> 9;
++ }
++ // bio fits partially within block
++ else if (WriteReqInCurrBlk(psm,curr_sector, &sector))
++ {
++ // put portion of bio in block
++ ++bio_bvecs;
++ writebuf_index = sector * SSFDC_SECTSIZE;
++ sectors_in_block = psm->MaxSectors - sector;
++ readbio_index = sectors_in_block * SSFDC_SECTSIZE;
++#if 0
++ printk(KERN_ERR "memcpy buf at %x, %x bytes\n",
++ writebuf_index, readbio_index);
++#endif
++ memcpy(buf + writebuf_index,
++ page_address(bvec->bv_page) + bvec->bv_offset, readbio_index);
++#if 0
++ printk(KERN_ERR "LogBlk %d: partial-write at %d, %d sectors first\n",
++ psm->LogBlock, curr_sector % psm->MaxSectors, sectors_in_block);
++#endif
++ // write block
++ unwritten_block = 0;
++ if (WriteBlock(psm, buf, wr_sector_status) != SUCCESS) {
++ printk(KERN_ERR "Unable to write block %d\n", psm->LogBlock);
++ // write_error - writing this block failed
++ break_flag = 1;
++ break;
++ }
++ // incr addr & read next block,
++ curr_sector += sectors_in_block;
++ if (ConvMediaAddr(psm,curr_sector) != SUCCESS) {
++ printk(KERN_ERR "MediaWriteSector() IncMediaAddr() error!\n");
++ // write_error - address into next block is bogus
++ write_error = 1;
++ break_flag = 1;
++ break;
++ }
++ if (ReadBlkCopy(psm, buf, rd_sector_status) != SUCCESS) {
++ printk(KERN_ERR "MediaWriteSector() ReadBlkCopy() error!\n");
++ // write error - next block read error
++ write_error = 1;
++ break_flag =1;
++ break;
++ }
++ // write remainder of bio into block
++#if 0
++ printk(KERN_ERR "LogBlk %d: partial-write at %d, %d sectors, second write\n",
++ psm->LogBlock, curr_sector % psm->MaxSectors, (bvec->bv_len >> 9) - sectors_in_block);
++#endif
++#if 0
++ printk(KERN_ERR "memcpy buf at 0x%x, from bio 0x%x, for 0x%x bytes\n",
++ 0, readbio_index, ((bvec->bv_len >> 9) - sectors_in_block) * SSFDC_SECTSIZE);
++#endif
++ memcpy(buf, (page_address(bvec->bv_page) + bvec->bv_offset) + readbio_index,
++ ((bvec->bv_len >> 9) - sectors_in_block) * SSFDC_SECTSIZE);
++ writebuf_index = ((bvec->bv_len >> 9) - sectors_in_block) * SSFDC_SECTSIZE;
++ unwritten_block = 1;
++ curr_sector += (bvec->bv_len >> 9) - sectors_in_block;
++ }
++ // bio is not in block at all. coplete unwritten block and exit loop.
++ else {
++ // write current block
++#if 0
++ printk(KERN_ERR "bio no longer in block\n");
++#endif
++ if (unwritten_block) {
++ if (WriteBlock(psm, buf, wr_sector_status) != SUCCESS) {
++ printk(KERN_ERR "MediaWriteSector() WriteBlock() error!\n");
++ // write_error
++ }
++ unwritten_block = 0;
++ }
++ break_flag = 1;
++ break;
++ }
++ }
++ // bjm if (bio_bvecs) +bio_bvecs;
++
++ if (break_flag)
++ break;
++ }
++
++ if (unwritten_block) {
++ if (WriteBlock(psm, buf, wr_sector_status) != SUCCESS) {
++ printk(KERN_ERR "MediaWriteSector() WriteBlock() error!\n");
++ write_error = 1;
++ }
++ }
++
++ if (!(bio_endios=bio_bvecs)) {
++ if (static_ssfdc_debug)
++ printk("no bios from request!\n");
++ ++bio_endios;
++ write_error = 0;
++ }
++
++the_exit:
++ // log sector status for the copied/unmodified Sectors and flag any that have cpy errors
++ for (sector = 0; sector < psm->MaxSectors; ++sector) {
++ if ( ! rd_sector_status[sector] )
++ printk(KERN_ERR "%s: READ sector %d invalid for block %d!\n", \
++ MAJOR_NAME, sector, psm->LogBlock);
++ if ( ! wr_sector_status[sector])
++ printk(KERN_ERR "%s: WRITTEN sector %d invalid for block %d!\n", \
++ MAJOR_NAME, sector, psm->LogBlock);
++ }
++
++ // free our prev allocated block for copy...
++ if (buf)
++ kfree(buf);
++
++ psm->XferState = xfer_idle;
++
++#if DEBUG_SSFDC_WRITE
++ printk(KERN_DEBUG "-MediaWriteSector()\n");
++#endif
++ if (static_ssfdc_debug)
++ printk("end_request(%d) ", ! write_error);
++ for (i = 0; i < bio_endios; ++i) {
++ if (static_ssfdc_debug)
++ printk("%d ", i);
++ ssfdc_end_request(psm, req, ! write_error);
++ }
++ if (static_ssfdc_debug)
++ printk("\n");
++
++ return ! write_error;
++
++}
++
++
++/***************************************************************************
++ SmartMedia Logical Format Subroutine
++ ***************************************************************************/
++int CheckLogCHS(ssfdc_dev *psm, unsigned int *c,unsigned char *h,unsigned char *s)
++{
++ switch(psm->Model) {
++ case SSFDC1MB: *c=125; *h= 4; *s= 4; break;
++ case SSFDC2MB: *c=125; *h= 4; *s= 8; break;
++ case SSFDC4MB: *c=250; *h= 4; *s= 8; break;
++ case SSFDC8MB: *c=250; *h= 4; *s=16; break;
++ case SSFDC16MB: *c=500; *h= 4; *s=16; break;
++ case SSFDC32MB: *c=500; *h= 8; *s=16; break;
++ case SSFDC64MB: *c=500; *h= 8; *s=32; break;
++ case SSFDC128MB: *c=500; *h=16; *s=32; break;
++ default:
++ *c= 0; *h= 0; *s= 0;
++ psm->ErrCode=ERR_NoSmartMedia;
++ return(ERROR);
++ }
++ return(SUCCESS);
++}
++/***************************************************************************
++ Power Control & Media Exist Check Subroutine
++ ***************************************************************************/
++
++int CheckMediaWP(ssfdc_dev *psm)
++{
++ if(psm->Attribute &MWP)
++ { psm->ErrCode=ERR_WrtProtect; return(ERROR); }
++ return(SUCCESS);
++}
++
++/***************************************************************************
++ SmartMedia Physical Address Control Subroutine
++ ***************************************************************************/
++int ConvMediaAddr(ssfdc_dev *psm, long addr)
++{
++ long temp;
++ temp =addr/psm->MaxSectors;
++ psm->Sector =addr%psm->MaxSectors;
++ psm->LogBlock=temp%psm->MaxLogBlocks;
++ psm->Zone =temp/psm->MaxLogBlocks;
++ if(psm->Zone<psm->MaxZones) {
++ ClrRedundantData(psm->Redundant);
++ SetLogBlockAddr(psm,psm->Redundant);
++ psm->PhyBlock=psm->Log2Phy[psm->Zone][psm->LogBlock];
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "ConvMediaAddr() LogBlock %d -> PhyBlock %d\n",
++ psm->LogBlock, psm->PhyBlock);
++#endif
++ return(SUCCESS);
++ }
++ psm->ErrCode=ERR_OutOfLBA;
++ return(ERROR);
++}
++
++int IncMediaAddr(ssfdc_dev *psm)
++{
++ if(++psm->Sector<psm->MaxSectors)
++ return(SUCCESS);
++ psm->Sector=0;
++ if(++psm->LogBlock<psm->MaxLogBlocks) {
++ ClrRedundantData(psm->Redundant);
++ SetLogBlockAddr(psm,psm->Redundant);
++ psm->PhyBlock=psm->Log2Phy[psm->Zone][psm->LogBlock];
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "IncMediaAddr() PhyBlock %d <- LogBlock %d\n",
++ psm->PhyBlock, psm->LogBlock);
++#endif
++ return(SUCCESS);
++ }
++ psm->LogBlock=0;
++ if(++psm->Zone<psm->MaxZones) {
++ ClrRedundantData(psm->Redundant);
++ SetLogBlockAddr(psm,psm->Redundant);
++ psm->PhyBlock=psm->Log2Phy[psm->Zone][psm->LogBlock];
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "IncMediaAddr() PhyBlock %d <- LogBlock %d\n",
++ psm->PhyBlock, psm->LogBlock);
++#endif
++ return(SUCCESS);
++ }
++ psm->Zone=0;
++ psm->ErrCode=ERR_OutOfLBA;
++ return(ERROR);
++}
++
++/***************************************************************************/
++
++
++static int WriteReqInCurrBlk(ssfdc_dev *psm, long sector, int *blksector)
++{
++ long temp;
++ unsigned char Zone; /* Zone Number */
++ unsigned int LogBlock; /* Logical Block Number of Zone */
++
++ if (!psm)
++ return 0;
++
++ temp = sector / psm->MaxSectors;
++ *blksector = sector % psm->MaxSectors;
++ LogBlock = temp % psm->MaxLogBlocks;
++ Zone = temp / psm->MaxLogBlocks;
++
++ return (psm->LogBlock == LogBlock && psm->Zone == Zone);
++}
++
++/***************************************************************************
++ SmartMedia Read/Write Subroutine with Retry
++ ***************************************************************************/
++
++/***************************************************************************
++ SmartMedia Physical Block Assign/Release Subroutine
++ ***************************************************************************/
++int AssignWriteBlock(ssfdc_dev *psm, int verbose_flag)
++{
++ psm->ReadBlock=psm->PhyBlock;
++#if DEBUG_SSFDC_WRITE
++ int Zonesave=psm->Zone, ZoneIndex;
++#endif
++
++#if DEBUG_SSFDC_WRITE
++ if (verbose_flag) {
++ printk("AssignWriteBlock() verbose mode. psm->Zone %d\n",psm->Zone);
++ for (psm->Zone = 0; psm->Zone < psm->MaxZones; psm->Zone++) {
++ int free_blk=0;
++ printk("\tZone %d, AssignStart %d and ", psm->Zone, psm->AssignStart[psm->Zone]);
++ for (psm->WriteBlock=0; psm->WriteBlock < psm->MaxLogBlocks; psm->WriteBlock++)
++ if (! ChkBit(psm->Assign[psm->Zone],psm->WriteBlock)) ++free_blk;
++ printk("%d free blocks.\n", free_blk);
++ }
++ psm->Zone = Zonesave;
++ }
++#endif
++ for(psm->WriteBlock=psm->AssignStart[psm->Zone]; psm->WriteBlock<psm->MaxBlocks; psm->WriteBlock++)
++ if(! ChkBit(psm->Assign[psm->Zone],psm->WriteBlock)) {
++ SetBit(psm->Assign[psm->Zone],psm->WriteBlock);
++ psm->AssignStart[psm->Zone]=psm->WriteBlock+1;
++ psm->PhyBlock=psm->WriteBlock;
++ psm->SectCopyMode=REQ_ERASE;
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "AssignWriteBlock() - WriteBlock %d ReadBlock %d LogBlock %d\n",
++ psm->WriteBlock, psm->ReadBlock, psm->LogBlock);
++#endif
++ return(SUCCESS);
++ }
++ for(psm->WriteBlock=0; psm->WriteBlock<psm->AssignStart[psm->Zone]; psm->WriteBlock++)
++ if(! ChkBit(psm->Assign[psm->Zone],psm->WriteBlock)) {
++ SetBit(psm->Assign[psm->Zone],psm->WriteBlock);
++ psm->AssignStart[psm->Zone]=psm->WriteBlock+1;
++ psm->PhyBlock=psm->WriteBlock;
++ psm->SectCopyMode=REQ_ERASE;
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ printk(KERN_DEBUG "AssignWriteBlock() - WriteBlock %d PhyBlock %d LogBlock %d\n",
++ psm->WriteBlock, psm->PhyBlock, psm->LogBlock);
++#endif
++ return(SUCCESS);
++ }
++ psm->WriteBlock=NO_ASSIGN;
++ psm->ErrCode=ERR_WriteFault;
++ return(ERROR);
++}
++
++/***************************************************************************
++ SmartMedia Physical Format Check Local Subroutine
++ ***************************************************************************/
++static int SetPhyFmtValue(ssfdc_dev *psm)
++{
++ unsigned int idcode;
++ SsfdcReadID(psm, &idcode);
++ if(SetSsfdcModel(psm,(unsigned char)idcode))
++ return(ERROR);
++ if(CheckSsfdcWP(psm))
++ psm->Attribute|=WP;
++ return(SUCCESS);
++}
++
++static int SearchCIS(ssfdc_dev *psm, unsigned int *pcis)
++{
++ psm->Zone=0; psm->Sector=0;
++ for(psm->PhyBlock=0; psm->PhyBlock<(psm->MaxBlocks-psm->MaxLogBlocks-1); psm->PhyBlock++) {
++ if(SsfdcReadRedtData(psm, psm->Redundant))
++ { SsfdcReset(psm); return(ERROR); }
++ if(! CheckFailBlock(psm->Redundant)) {
++ if(CheckCisBlock(psm->Redundant))
++ { SsfdcReset(psm); return(ERROR); }
++ break;
++ }
++ }
++ while(psm->Sector<psm->MaxSectors) {
++ if(psm->Sector)
++ if(SsfdcReadRedtData(psm, psm->Redundant))
++ { SsfdcReset(psm); return(ERROR); }
++ if(! CheckDataStatus(psm->Redundant)) {
++ if(SsfdcReadSect(psm,psm->WorkBuf,psm->Redundant))
++ { SsfdcReset(psm); return(ERROR); }
++ if(CheckCISdata(psm->WorkBuf,psm->Redundant))
++ { SsfdcReset(psm); return(ERROR); }
++ *pcis=psm->PhyBlock;
++ SsfdcReset(psm);
++ return(SUCCESS);
++ }
++ psm->Sector++;
++ }
++ SsfdcReset(psm);
++ return(ERROR);
++}
++
++/***************************************************************************/
++static int MakeLogTable(ssfdc_dev *psm, unsigned int start)
++{
++ unsigned int block;
++ unsigned int blk_total=0, blk_blank=0, blk_nologaddr=0,
++ blk_fail=0, blk_assigned=0;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "MakeLogTable()\n");
++#endif
++ psm->DataBuf_Valid = 1;
++ psm->Sector=0;
++ for(psm->Zone=0; psm->Zone<psm->MaxZones; psm->Zone++) {
++ /* set all LogBlocks to NO_ASSIGN */
++ for(psm->LogBlock=0; psm->LogBlock<psm->MaxLogBlocks; psm->LogBlock++)
++ psm->Log2Phy[psm->Zone][psm->LogBlock]=NO_ASSIGN;
++ /* for all Assigns[zone][PhyBlock] = 0x00 */
++ for(psm->PhyBlock=0; psm->PhyBlock<(MAX_BLOCKNUM/8); psm->PhyBlock++)
++ psm->Assign[psm->Zone][psm->PhyBlock]=0x00;
++ /*******************************************************************/
++ for(psm->PhyBlock=0; psm->PhyBlock<psm->MaxBlocks; psm->PhyBlock++) {
++ if((! psm->Zone) && (psm->PhyBlock<start)) {
++ SetBit(psm->Assign[psm->Zone],psm->PhyBlock);
++ continue;
++ }
++ ++blk_total;
++ if(SsfdcReadRedtData(psm,psm->Redundant)) {
++ SsfdcReset(psm);
++#if 0
++ printk(KERN_ERR "error 1 PhyBlock %d\n", psm->PhyBlock);
++#endif
++ return(ERROR);
++ }
++ if(! CheckDataBlank(psm->Redundant)) {
++ ++blk_blank;
++ continue;
++ }
++ SetBit(psm->Assign[psm->Zone],psm->PhyBlock);
++ if(CheckFailBlock(psm->Redundant)) {
++#if 0
++ printk("Zone %d, Block %d failed\n", psm->Zone, psm->PhyBlock);
++#endif
++ ++blk_fail;
++ continue;
++ }
++ if(LoadLogBlockAddr(psm)) {
++ ++blk_nologaddr;
++ continue;
++ }
++ if(psm->LogBlock>=psm->MaxLogBlocks)
++ continue;
++ ++blk_assigned;
++ if(psm->Log2Phy[psm->Zone][psm->LogBlock]==NO_ASSIGN) {
++#if DEBUG_SSFDC_ASSIGNRELEASE
++ if (psm->LogBlock == 0)
++ printk(KERN_DEBUG "MakeLogTable() LogBlock %d = PhyBlock %d\n",
++ psm->LogBlock, psm->PhyBlock);
++#endif
++ psm->Log2Phy[psm->Zone][psm->LogBlock]=psm->PhyBlock;
++ continue;
++ }
++ psm->Sector=psm->MaxSectors-1;
++ if(SsfdcReadRedtData(psm,psm->Redundant)) {
++ SsfdcReset(psm);
++#if 0
++ printk(KERN_ERR "error 2\n");
++#endif
++ return(ERROR);
++ }
++ psm->Sector=0;
++ block=psm->LogBlock;
++ if(! LoadLogBlockAddr(psm))
++ if(psm->LogBlock==block) {
++#ifdef L2P_ERR_ERASE /***************************************************/
++ block=psm->Log2Phy[psm->Zone][psm->LogBlock];
++ psm->Log2Phy[psm->Zone][psm->LogBlock]=psm->PhyBlock;
++ psm->PhyBlock=block;
++ if(!(psm->Attribute &MWP)) {
++ SsfdcReset(psm);
++ if(SsfdcEraseBlock(psm)) {
++ printk(KERN_ERR "error 3\n");
++ return(ERROR);
++ }
++ if(SsfdcCheckStatus(psm)) {
++ if(MarkFailPhyOneBlock(psm)) {
++ printk(KERN_ERR "error 4\n");
++ return(ERROR);
++ }
++ }
++ else ClrBit(psm->Assign[psm->Zone],psm->PhyBlock);
++ }
++ psm->PhyBlock=psm->Log2Phy[psm->Zone][psm->LogBlock];
++#else /*******************************************************************/
++ psm->Log2Phy[psm->Zone][psm->LogBlock]=psm->PhyBlock;
++#endif /*******************************************************************/
++ continue;
++ }
++#ifdef L2P_ERR_ERASE /***************************************************/
++ if(!(psm->Attribute &MWP)) {
++ SsfdcReset(psm);
++ if(SsfdcEraseBlock(psm)) {
++ printk(KERN_ERR "error 5\n");
++ return(ERROR);
++ }
++ if(SsfdcCheckStatus(psm)) {
++ if(MarkFailPhyOneBlock(psm)) {
++ printk(KERN_ERR "error 6\n");
++ return(ERROR);
++ }
++ }
++ else ClrBit(psm->Assign[psm->Zone],psm->PhyBlock);
++ }
++#endif /*******************************************************************/
++ }
++ psm->AssignStart[psm->Zone]=0;
++ }
++ SsfdcReset(psm);
++#if 0
++ printk("MakeLogTable()\n");
++ printk("\t%d failed\n", blk_fail);
++ printk("\t%d blank\n", blk_blank);
++ printk("\t%d assigned\n", blk_assigned);
++ printk("\t%d no logical addr\n", blk_nologaddr);
++ printk("\n\t%d total\n", blk_total);
++ printk("\t%d sum total\n", blk_fail + blk_blank + blk_assigned + blk_nologaddr);
++#endif
++ return(SUCCESS);
++}
++
++/***************************************************************************/
++static int MarkFailPhyOneBlock(ssfdc_dev *psm)
++{
++ unsigned char sect;
++ sect=psm->Sector;
++ SetFailBlock(psm->WorkRedund);
++ SsfdcWriteRedtMode(psm);
++ for(psm->Sector=0; psm->Sector<psm->MaxSectors; psm->Sector++)
++ if(SsfdcWriteRedtData(psm,psm->WorkRedund)) {
++ SsfdcReset(psm);
++ psm->Sector=sect;
++ psm->ErrCode=ERR_HwError;
++ return(ERROR);
++ } /* NO Status Check */
++ SsfdcReset(psm);
++ psm->Sector=sect;
++ return(SUCCESS);
++}
++
++/***************************************************************************
++ SmartMedia Control subroutine
++ Rev 0.30('98-06-30) ***** BETA RELEASE *****
++ Copyright (c) 1997-98, Toshiba Corporation. All rights reserved.
++ ***************************************************************************/
++
++
++/* Linux Driver Modifications */
++/*
++dump_ssfdc_state
++*/
++#if DEBUG_SSFDC
++void dump_ssfdc_state(ssfdc_dev * psm)
++{
++#if DEBUG_SSFDC_STRUCT
++ // misc structure dump information
++ printk(KERN_DEBUG "psm->\n");
++ /* unsigned long */ printk(KERN_DEBUG "\t address %x\n", psm->address);
++ /* int */ printk(KERN_DEBUG "\t sm_minor %d\n",psm->sm_minor);
++ /* struct dentry printk(KERN_DEBUG "\t *sm_dentry %x\n",psm->sm_dentry );*/
++ /* kdev_t */ printk(KERN_DEBUG "\t sm_device %x\n",psm->sm_device);
++ /* int */ printk(KERN_DEBUG "\t sm_flags %x\n",psm->sm_flags);
++ /* unsigned int */ printk(KERN_DEBUG "\t UseCount %d\n",psm->UseCount);
++ /* unsigned int */ printk(KERN_DEBUG "\t ErrCode %d\n",psm->ErrCode);
++ /* unsigned int */ printk(KERN_DEBUG "\t MediaChange %d\n",psm->MediaChange);
++ /* unsigned int */ printk(KERN_DEBUG "\t SectCopyMode %d\n",psm->SectCopyMode);
++ /* unsigned int */ printk(KERN_DEBUG "\t HostCyl %d\n",psm->HostCyl );
++ /* unsigned char */ printk(KERN_DEBUG "\t HostHead %d\n",psm->HostHead );
++ /* unsigned char */ printk(KERN_DEBUG "\t HostSect %d\n",psm->HostSect );
++ /* unsigned int */ printk(KERN_DEBUG "\t ReadBlock %d\n",psm->ReadBlock );
++ /* unsigned int */ printk(KERN_DEBUG "\t WriteBlock %d\n",psm->WriteBlock );
++
++ /* Card attributes */
++ /* unsigned char */ printk(KERN_DEBUG "\t Model %d\n",psm->Model );
++ /* unsigned char */ printk(KERN_DEBUG "\t Attribute %x\n",psm->Attribute );
++ /* unsigned char */ printk(KERN_DEBUG "\t MaxZones %d\n",psm->MaxZones );
++ /* unsigned char */ printk(KERN_DEBUG "\t MaxSectors %d\n",psm->MaxSectors );
++ /* unsigned int */ printk(KERN_DEBUG "\t MaxBlocks %d\n",psm->MaxBlocks );
++ /* unsigned int */ printk(KERN_DEBUG "\t MaxLogBlocks %d\n",psm->MaxLogBlocks );
++ /* unsigned char */ printk(KERN_DEBUG "\t Zone %d\n",psm->Zone );
++ /* unsigned char */ printk(KERN_DEBUG "\t Sector %d\n",psm->Sector );
++ /* unsigned int */ printk(KERN_DEBUG "\t PhyBlock %d\n",psm->PhyBlock );
++ /* unsigned int */ printk(KERN_DEBUG "\t LogBlock %d\n",psm->LogBlock );
++#endif
++}
++#endif
++
++typedef struct {
++ int sm_error;
++ int lnx_error;
++ char *smerrstr;
++} errmap;
++
++static errmap error_map_table [] = {
++ { NO_ERROR, 0x0000, ""},
++ { ERR_WriteFault, EIO, "Peripheral Device Write Fault "},
++ { ERR_HwError, EIO, "Hardware Error"},
++ { ERR_DataStatus, EIO, "DataStatus Error"},
++ { ERR_EccReadErr, EIO, "Unrecovered Read Error" },
++ { ERR_CorReadErr, EIO, "Recovered Read Data with ECC" },
++ { ERR_OutOfLBA, EIO, "Illegal Logical Block Address" },
++ { ERR_WrtProtect, EROFS, "Write Protected" },
++ { ERR_ChangedMedia, EIO, "Medium Changed" },
++ { ERR_UnknownMedia, EIO, "Incompatible Medium Installed" },
++ { ERR_IllegalFmt, EIO, "Medium Format Corrupted" },
++ { ERR_NoSmartMedia, EIO, "Medium Not Present" }
++};
++
++static int ssfdc_maperror(int ssfdc_error) {
++ int loopus=0;
++
++ if (!ssfdc_error) return 0;
++
++ do {
++ if (error_map_table[loopus].sm_error == ssfdc_error) {
++ printk("%s\n", error_map_table[loopus].smerrstr);
++ return -error_map_table[loopus].lnx_error;
++ }
++ } while (++loopus < (sizeof(error_map_table) / (sizeof(errmap))));
++
++ printk(KERN_ERR "%s: error code %d is not mapped, EIO\n", MAJOR_NAME, ssfdc_error);
++ return -EIO;
++}
++
++static int ssfdc_thread(void * arg)
++{
++ ssfdc_dev *psm = arg;
++ unsigned long flags;
++
++ daemonize("sm%dd",psm->sm_minor);
++
++ spin_lock_irqsave(&current->sighand->siglock,flags); // _irq
++ sigfillset(&current->blocked);
++ recalc_sigpending();
++ spin_unlock_irqrestore(&current->sighand->siglock,flags); // _irq
++
++ while (!psm->exiting) {
++ if ( ssfdc_get_request(psm) )
++ initxfer(psm->sm_minor);
++
++ spin_lock_irqsave(&psm->req_queue_lock,flags); // _irq
++ // bjm spin_lock(&psm->req_queue_lock); // _irq
++ psm->waiting = 0;
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags); // _irq
++ // bjm spin_unlock(&psm->req_queue_lock); // _irq
++ if (wait_event_interruptible(psm->thread_wq,ssfdc_get_request(psm)))
++ printk("ssfdc_thread() interrupted\n");
++ // wait_event(psm->thread_wq,ssfdc_get_request(psm));
++ spin_lock_irqsave(&psm->req_queue_lock,flags); // _irq
++ // bjm spin_lock(&psm->req_queue_lock); // _irq
++ psm->waiting = 1;
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags); // _irq
++ // bjm spin_unlock(&psm->req_queue_lock); // _irq
++ }
++
++ printk("ssfdcd Exiting!\n");
++
++ complete_and_exit(&psm->thread_dead, 0);
++
++}
++
++/*
++ssfdc_init_device(ssfdc_dev *, int minor, unsigned long baseaddr, int removable)
++ reset and initialize the ssfdc_dev structure
++*/
++static int ssfdc_init_device(ssfdc_dev *psm, int minor, unsigned long baseaddr)
++{
++ int pid;
++
++ // Establish ssfdc state
++ psm->XferState = xfer_idle;
++ psm->ErrCode = NO_ERROR;
++ psm->MediaChange = SUCCESS;
++ psm->SectCopyMode = COMPLETED;
++ psm->UseCount = 0;
++ psm->DataBuf_Valid = 0;
++
++ // set minor number
++ psm->sm_minor = minor;
++ // io address
++ psm->address = baseaddr;
++ if (!request_region(psm->address, 3, "sm")) {
++ printk(KERN_ERR "sm: memory already in use!\n");
++ return ERROR;
++ }
++ spin_lock_init(&psm->req_queue_lock);
++
++ // thread related inititializations...
++ init_completion(&psm->thread_dead);
++ init_waitqueue_head(&psm->thread_wq);
++
++ pid = kernel_thread(ssfdc_thread, psm, CLONE_KERNEL);
++ if (pid < 0)
++ printk("ssfdc: ERROR starting thread!\n");
++ else
++ printk("ssfdc: started kernel thread sm%dd pid %d\n", psm->sm_minor, pid);
++
++ // switch on power to device, and set basic attributes of card (no logical to phys mapping)
++ if ( ! CntPowerOn(psm) && ! CheckCardExist(psm) ) {
++ SetPhyFmtValue(psm);
++ }
++ else {
++ printk(KERN_ERR "ssfdc_init_device() unable to SetPhyFmtValue()\n");
++ }
++
++#if DEBUG_SSFDC
++ dump_ssfdc_state(psm);
++#endif
++
++ return SUCCESS;
++}
++
++static int ssfdc_dev_blk_size(ssfdc_dev *psm)
++{
++ if (!psm)
++ return 0;
++
++ // because of the physical to logical block mapping, not as many blocks
++ // as expected...
++ switch(psm->Model) {
++ case SSFDC1MB:
++ return (250 * 8 * 512) / SSFDC_BLKSIZE;
++ case SSFDC2MB:
++ return (500 * 8 * 512) / SSFDC_BLKSIZE;
++ case SSFDC4MB:
++ return (500 * 16 * 512) / SSFDC_BLKSIZE;
++ case SSFDC8MB:
++ return (1000 * 16 * 512) / SSFDC_BLKSIZE;
++ case SSFDC16MB:
++ return (1000 * 32 * 512) / SSFDC_BLKSIZE;
++ case SSFDC32MB:
++ return (2000 * 32 * 512) / SSFDC_BLKSIZE;
++ case SSFDC64MB:
++ return (4000 * 32 * 512) / SSFDC_BLKSIZE;
++ case SSFDC128MB:
++ return (8000 * 32 * 512) / SSFDC_BLKSIZE;
++ default:
++ return 0;
++ }
++}
++
++inline int ssfdc_dev_sectors(ssfdc_dev *psm) {
++ return ssfdc_dev_blk_size(psm) * (SSFDC_BLKSIZE/SSFDC_SECTSIZE);
++}
++
++static int ssfdc_open(struct inode *in, struct file *fptr)
++{
++ int error_code=NO_ERROR;
++ ssfdc_dev *psm = in->i_bdev->bd_disk->private_data;
++ unsigned long flags;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "+ssfdc_open()\n");
++#endif
++
++ if (!fptr) {
++ return -EIO;
++ }
++
++ spin_lock_irqsave(&psm->req_queue_lock,flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++ // Power up smartmedia device, check for card, check media
++ if ((error_code=CntPowerOn(psm))) {
++ printk(KERN_ERR "%s PowerUP error\n", MAJOR_NAME);
++ }
++ else if ((error_code=CheckCardExist(psm))) {// Check the existence of a card
++ printk(KERN_ERR "%s No Card!\n", MAJOR_NAME);
++ }
++ else if ( ! psm->UseCount++ ) {
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++ check_disk_change(in->i_bdev);
++ spin_lock_irqsave(&psm->req_queue_lock,flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++ }
++
++ if ( ! psm->ErrCode ) {
++ // check our open mode against that of removable media's
++ if (WRITE_PROTECTED(psm)) {
++ printk(KERN_ERR "mount read only detected.\n");
++ }
++ }
++
++#if DEBUG_SSFDC
++ dump_ssfdc_state(psm);
++ printk(KERN_DEBUG "-ssfdc_open() error_code %d\n", error_code);
++#endif
++
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags);
++
++#if DEBUG_SSFDC
++ printk("-ssfdc_open()\n");
++#endif
++
++ return ssfdc_maperror(error_code);
++}
++
++static int ssfdc_release(struct inode *i_node, struct file *fptr)
++{
++ int drive;
++ ssfdc_dev *psm=NULL;
++ unsigned long flags;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "+ssfdc_release(");
++#endif
++
++ psm = (ssfdc_dev *) i_node->i_bdev->bd_disk->private_data;
++ drive = psm->sm_minor;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "%d)\n", drive);
++#endif
++ if (drive < 0 || drive >= MAX_SSFDC)
++ return -ENODEV;
++
++ spin_lock_irqsave(&psm->req_queue_lock,flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++
++ if (!psm->UseCount)
++ printk(KERN_ERR "sm: Zero use count!\n");
++ else {
++ --psm->UseCount;
++ }
++
++#if DEBUG_SSFDC
++ dump_ssfdc_state(psm);
++#endif
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "-ssfdc_release()\n");
++#endif
++
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++
++ return 0;
++}
++
++static int ssfdc_ioctl(struct inode *i_node, struct file *fptr, unsigned cmd, unsigned long arg)
++{
++ int drive, int_val;
++ ssfdc_dev *psm;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "ssfdc_ioctl(%d)", cmd);
++#endif
++
++ if (i_node == NULL)
++ return -EINVAL;
++
++ psm = (ssfdc_dev *) i_node->i_bdev->bd_disk->private_data;
++ drive = psm->sm_minor;
++
++ if (drive < 0 || drive >= MAX_SSFDC)
++ return -ENODEV;
++ switch(cmd) {
++ case BLKROSET: /* set device read-only (0 = read-write) */
++ if (!capable(CAP_SYS_ADMIN))
++ return -EACCES;
++ if (copy_from_user((void *) &int_val, (int *)arg, sizeof(int_val)))
++ return -EFAULT;
++ if (int_val)
++ psm->Attribute |= MWP;
++ else
++ psm->Attribute &= ~MWP;
++ return 0;
++
++ case BLKROGET:/* get read-only status (0 = read_write) */
++ int_val = psm->Attribute & MWP;
++ copy_to_user(arg, (void *) &int_val, sizeof(int_val));
++ return 0;
++
++ /* case BLKRRPART: */ /* re-read partition table */
++
++ case BLKGETSIZE:
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "BLKGETSIZE");
++#else
++ printk(KERN_DEBUG "ssfdc_ioctl(BLKGETSIZE) not handled.\n");
++#endif
++ break;
++ }
++ return -EINVAL;
++}
++
++
++static int ssfdc_getgeo(struct block_device *bdev, struct hd_geometry *geo)
++{
++ unsigned char heads, sectors;
++ unsigned int cylinders;
++ struct gendisk *disk = bdev->bd_disk;
++ ssfdc_dev *psm = disk->private_data;
++ int drive = psm->sm_minor;
++ int err;
++
++ if (drive < 0 || drive >= MAX_SSFDC)
++ return -ENODEV;
++
++ err = CheckLogCHS(psm, &cylinders, &heads, &sectors);
++ if (err)
++ return ssfdc_maperror(err);
++
++ geo->heads = heads;
++ geo->sectors = sectors;
++ geo->cylinders = cylinders;
++ return 0;
++}
++
++
++static int ssfdc_revalidate(struct gendisk *disk)
++{
++ unsigned int cis;
++ ssfdc_dev *psm=NULL;
++ int error_code=NO_ERROR;
++ unsigned long flags;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "ssfdc_revalidate()\n");
++#endif
++
++ psm = disk->private_data;
++
++ spin_lock_irqsave(&psm->req_queue_lock,flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++
++ if ( ! psm->DataBuf_Valid ) {
++ if ((error_code=SetPhyFmtValue(psm)))
++ printk(KERN_ERR "ssfdc_revalidate() SetPhyFmtValue error\n");
++ else if ((error_code=SearchCIS(psm,&cis)))
++ printk(KERN_ERR "ssfdc_revalidate() SearchCIS error\n");
++ else if ((error_code=MakeLogTable(psm,cis+1)))
++ printk(KERN_ERR "ssfdc_revalidate() MakeLogTable error\n");
++ }
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++
++ return ssfdc_maperror(error_code);
++}
++
++int __init ssfdc_init(void)
++{
++ int i;
++ int err = 0;
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "+ssfdc_init()\n");
++#endif
++
++ memset(disks, 0, sizeof(struct gendisk *) * MAX_SSFDC);
++ memset(ssfdc, 0, sizeof(struct ssfdc_dev *) * MAX_SSFDC);
++ for (i=0; i<MAX_SSFDC; ++i) {
++ disks[i] = alloc_disk(1 << SSFDC_PARTN_BITS);
++ ssfdc[i] = kmalloc(sizeof(ssfdc_dev), GFP_KERNEL);
++ if (!disks[i] || !ssfdc[i]) {
++ err = -ENOMEM;
++ goto no_memory_error;
++ }
++ memset( ssfdc[i], 0, sizeof(ssfdc_dev));
++ }
++
++ if (register_blkdev(SSFDC_MAJOR, "smartmedia")) {
++ printk(KERN_ERR "Unable to get major number %d for ssfdc device\n",
++ SSFDC_MAJOR);
++ err = -EBUSY;
++ goto busy_error;
++ }
++
++ devfs_mk_dir("sm");
++
++ for ( i=0; i < MAX_SSFDC; ++i) {
++ disks[i]->major = SSFDC_MAJOR;
++ disks[i]->first_minor = i << SSFDC_PARTN_BITS;
++ disks[i]->fops = &ssfdc_fops;
++ sprintf(disks[i]->disk_name, "sm%d", i);
++ sprintf(disks[i]->devfs_name, "sm/%d", i);
++ disks[i]->private_data = ssfdc[i];
++ ssfdc_init_device(ssfdc[i], i << SSFDC_PARTN_BITS,
++ CPLD_BASE_ADDRESS + SMART_MEDIA_ONE_OFFSET);
++
++ disks[i]->queue = ssfdc[i]->req_queue =
++ blk_init_queue(do_ssfdc_request, &ssfdc[i]->req_queue_lock);
++ ssfdc[i]->req_queue->queuedata = ssfdc[i];
++
++ set_capacity(disks[i], ssfdc_dev_sectors(ssfdc[i]));
++ // bjm blk_queue_max_sectors(disks[i]->queue, 32);
++ // bjm blk_queue_max_phys_segments(disks[i]->queue, 4);
++ blk_queue_max_segment_size(disks[i]->queue, (ssfdc[i]->MaxSectors / 2) * K_BYTE);
++ add_disk(disks[i]);
++ }
++
++#if 0 // bjm debug
++#ifndef CONFIG_SH_NIMBLE_MINI
++ mediachangetest(0L);
++#else
++ mediachangetest(1L);
++#endif
++#endif // bjm debug
++
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "-ssfdc_init(0)\n");
++#endif
++ return 0;
++
++busy_error:
++no_memory_error:
++ for (i=0; i < MAX_SSFDC; ++i) {
++ if (disks[i] && disks[i]->queue)
++ kfree(disks[i]->queue);
++ put_disk(disks[i]);
++ if (ssfdc[i])
++ kfree(ssfdc[i]);
++ }
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG "-ssfdc_init(%d)\n", -ENOMEM);
++#endif
++ return -ENOMEM;
++}
++
++void __init ssfdc_clean(void)
++{
++ int i;
++
++ printk(KERN_DEBUG "SSFDC exit code\n");
++
++ for (i=0; i < MAX_SSFDC; ++i) {
++ if (disks[i] != NULL) {
++ blk_cleanup_queue(disks[i]->queue);
++ del_gendisk(disks[i]);
++ put_disk(disks[i]);
++ }
++
++ if (ssfdc[i]) {
++ // signal thread to exit...
++ ssfdc[i]->exiting = 1;
++ wake_up(&ssfdc[i]->thread_wq);
++ wait_for_completion(&ssfdc[i]->thread_dead);
++
++ if (ssfdc[i]->address)
++ release_region(ssfdc[i]->address, 3);
++ kfree(ssfdc[i]);
++ }
++ }
++
++ if (unregister_blkdev(SSFDC_MAJOR, "smartmedia"))
++ printk(KERN_WARNING "smartmedia: cannot unregister blkdev\n");
++ devfs_remove("sm");
++}
++
++#if DEBUG_SSFDC
++void dump_request(struct request *req)
++{
++#if DEBUG_SSFDC_REQUEST && DEBUG_SSFDC_REQUEST
++ printk(KERN_DEBUG "req->\n");
++ /* int */ printk(KERN_DEBUG "\t req->cmd %x\n", req->cmd); /* READ or WRITE */
++ /* int errors */ printk(KERN_DEBUG "\t req->errors %d\n", req->errors);
++ /* unsigned long */ printk(KERN_DEBUG "\t req->sector %d\n", req->sector);
++ /* unsigned long */ printk(KERN_DEBUG "\t req->nr_sectors %d\n",req->nr_sectors);
++ /* unsigned long */ printk(KERN_DEBUG "\t req->hard_sector %d\n", req->hard_sector);
++ /* unsigned int */ printk(KERN_DEBUG "\t req->nr_hw_segments %d\n",req->nr_hw_segments);
++ /* unsigned long */ printk(KERN_DEBUG "\t req->current_nr_sectors %d\n",req->current_nr_sectors);
++
++#endif
++}
++#endif
++
++void do_ssfdc_request(request_queue_t * rq)
++{
++ ssfdc_dev *psm = rq->queuedata;
++
++ if ( ! psm->waiting )
++ wake_up(&psm->thread_wq);
++}
++
++static struct request * ssfdc_get_request(ssfdc_dev *psm)
++{
++ struct request *treq;
++ unsigned long flags;
++
++ spin_lock_irqsave(&psm->req_queue_lock, flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++ treq = elv_next_request(psm->req_queue);
++ spin_unlock_irqrestore(&psm->req_queue_lock, flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++
++ return treq;
++}
++
++static void ssfdc_terminate_request(ssfdc_dev *psm, struct request *req)
++{
++ unsigned long flags;
++
++ if (psm && req) {
++ spin_lock_irqsave(&psm->req_queue_lock, flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++ end_request(req,0);
++ spin_unlock_irqrestore(&psm->req_queue_lock, flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++ }
++}
++
++
++static int ssfdc_end_request(ssfdc_dev *psm, struct request *req, int status)
++{
++ unsigned long flags;
++
++ if (!psm || !req) {
++ printk(KERN_DEBUG "ssfdc_end_request() NULL psm or req!\n");
++ return 0;
++ }
++
++#if DEBUG_SSFDC_REQUEST
++ printk("ssfdc_end_request(%p)\n", req);
++#endif
++
++ spin_lock_irqsave(&psm->req_queue_lock,flags);
++ // bjm spin_lock(&psm->req_queue_lock);
++ end_request(req,status);
++ spin_unlock_irqrestore(&psm->req_queue_lock,flags);
++ // bjm spin_unlock(&psm->req_queue_lock);
++ return 0;
++}
++
++void initxfer(unsigned long dev_idx)
++{
++ ssfdc_dev *psm = ssfdc[dev_idx];
++ struct request *req;
++ int error_code;
++ unsigned int cis;
++
++#if DEBUG_SSFDC
++ // printk(KERN_DEBUG "+initxfer(%d)", dev_idx);
++#endif
++ // get device lock, and check idle flag, setting if not busy
++
++ req = ssfdc_get_request(psm);
++
++ // if the device is idle, setup a read or write operation
++ if (psm->XferState == xfer_idle) {
++ // get the current request from our device's request list.
++ if (!req) {
++#if DEBUG_SSFDC
++// printk(KERN_DEBUG "initxfer() terminate, no schedule.\n");
++#endif
++ }
++ // Absence of power indicates absence of card.
++ // terminate request and exit...
++ if ( ! _HwChkPower(psm) ) {
++ printk(KERN_DEBUG "initxfer() - Media power NOT!\n");
++ ssfdc_terminate_request(psm,req);
++ return;
++ }
++
++ // We have a request and we have a card. Is the Log2Phys mapping still valid?
++ if ( ! psm->DataBuf_Valid ) {
++ if ((error_code = SetPhyFmtValue(psm)))
++ printk(KERN_DEBUG "%s SetPhyFmtValue error\n", MAJOR_NAME);
++ else if ((error_code = SearchCIS(psm,&cis)))
++ printk(KERN_DEBUG "%s SearchCIS error\n", MAJOR_NAME);
++ else if ((error_code = MakeLogTable(psm,cis+1)))
++ printk(KERN_DEBUG "%s MakeLogTable error\n", MAJOR_NAME);
++ if (error_code) {
++ printk(KERN_DEBUG "%s error %d\n", MAJOR_NAME, error_code);
++ ssfdc_terminate_request(psm,req);
++ return;
++ }
++ }
++
++ psm->XferState = xfer_busy;
++#if DEBUG_SSFDC
++ printk(KERN_DEBUG " initxfer() - do the request %x\n", req);
++#endif
++ ssfdc_rw_request(psm, req);
++ }
++#if DEBUG_SSFDC
++ else {
++ printk(KERN_DEBUG "initxfer(%d) dev is busy, no reschedule.\n", dev_idx);
++ }
++#endif
++
++}
++
++
++void ssfdc_rw_request(ssfdc_dev *psm, struct request *req)
++{
++ int (*rwsector)(ssfdc_dev *, struct request *, char *, long, int);
++ unsigned sector, count;
++ int rw_return=1;
++
++ if (rq_data_dir(req) == WRITE)
++ rwsector = MediaWriteSector;
++ else if (rq_data_dir(req) == READ)
++ rwsector = MediaReadSector;
++ else {
++ printk(KERN_DEBUG "%s: command %d not implemented!\n", MAJOR_NAME, (int) rq_data_dir(req));
++ goto terminal_error;
++ }
++
++ /*
++ */
++ sector = req->sector;
++ count = req->nr_sectors;
++
++ // check that the request does not extend past ssfdc's max size
++ if ( (sector + count) > ssfdc_dev_sectors(psm) ) {
++ printk(KERN_ERR "Attempt to read past end of device!");
++ goto terminal_error;
++ }
++ else {
++
++ // for each segment in each bio_vec R/W from/to device.
++
++ count = req->current_nr_sectors;
++ rw_return = rwsector(psm, req, req->buffer, sector, count);
++
++ if (rq_data_dir(req) == READ)
++ ssfdc_end_request(psm, req, rw_return);
++ }
++
++ // things appear OK...
++ return;
++
++terminal_error:
++ ssfdc_terminate_request( psm, req);
++ psm->XferState = xfer_idle;
++}
++
++module_init(ssfdc_init);
++module_exit(ssfdc_clean);
++
++MODULE_LICENSE("GPL");
++
++/* End of Linux Driver Modifications */
+diff -duNr linux-2.6.16-orig/drivers/block/ssfdc.h linux-2.6.16/drivers/block/ssfdc.h
+--- linux-2.6.16-orig/drivers/block/ssfdc.h 1970-01-01 10:00:00.000000000 +1000
++++ linux-2.6.16/drivers/block/ssfdc.h 2006-06-29 16:13:27.000000000 +1000
+@@ -0,0 +1,372 @@
++/* $id: $ */
++#ifndef _SSFDC_H
++#define _SSFDC_H
++
++/*
++ Linux related defines
++*/
++
++#ifdef CONFIG_SH_NIMBLE_MINI
++#define MAX_SSFDC 2 /* two drives */
++#else
++#define MAX_SSFDC 1 /* only one drive */
++#endif
++
++#define SSFDC_MAJOR_NAME "sm"
++#define MAJOR_NAME SSFDC_MAJOR_NAME
++#define SSFDC_PARTN_BITS 4 /* number of minor dev bits for partitions */
++#define PARTN_MASK ((1<<SSFDC_PARTN_BITS)-1) /* a useful bit mask */
++#define MAX_DRIVES MAX_SSFDC
++
++/***************************************************************************
++ SmartMedia Controll Header
++ Rev 0.30('98-06-30) ***** BETA RELEASE *****
++ Copyright (c) 1997-98, Toshiba Corporation. All rights reserved.
++ ***************************************************************************/
++
++/***************************************************************************
++ Define Difinetion
++ ***************************************************************************/
++#define SUCCESS 0 /* SUCCESS */
++#define ERROR -1 /* ERROR */
++#define CORRECT 1 /* CORRECTABLE */
++
++/***************************************************************************/
++#define NO_ERROR 0x0000 /* NO ERROR */
++#define ERR_WriteFault 0x0003 /* Peripheral Device Write Fault */
++#define ERR_HwError 0x0004 /* Hardware Error */
++#define ERR_DataStatus 0x0010 /* DataStatus Error */
++#define ERR_EccReadErr 0x0011 /* Unrecovered Read Error */
++#define ERR_CorReadErr 0x0018 /* Recovered Read Data with ECC */
++#define ERR_OutOfLBA 0x0021 /* Illegal Logical Block Address */
++#define ERR_WrtProtect 0x0027 /* Write Protected */
++#define ERR_ChangedMedia 0x0028 /* Medium Changed */
++#define ERR_UnknownMedia 0x0030 /* Incompatible Medium Installed */
++#define ERR_IllegalFmt 0x0031 /* Medium Format Corrupted */
++#define ERR_NoSmartMedia 0x003A /* Medium Not Present */
++
++/***************************************************************************
++ Common Controll Header
++ Rev 1.30('98-06-30) ***** BETA RELEASE *****
++ Copyright (c) 1997-98, Toshiba Corporation. All rights reserved.
++ ***************************************************************************/
++
++/***************************************************************************
++ SmartMedia Controller Definition
++ ***************************************************************************/
++/* I/O Mode Address */
++#define DATA(p) (p->address+0x00) /* R/W Data Reg */
++#define STATUS(p) (p->address+0x02) /* R/- Status Reg */
++#define MODE(p) (p->address+0x02) /* -/W Mode Reg */
++
++/* Controller Status Reg (Read Only) */
++#define STS_BUSY 0x80
++#define STS_VCC 0x10
++#define STS_SCHG 0x08
++#define STS_WP 0x01
++#define STS_CENB 0x04
++
++#ifdef CONFIG_SH_TITAN
++/* Controller Mode Reg (Write Only) */
++/* keep PCI clock running on bit 3 */
++/* CE# on bit 2, CLE on bit 1 and ALE on bit 0 */
++#define STANDBY (0x00 | 0x00 | 0x08)
++#define WR_DATA (0x00 | 0x04 | 0x08)
++#define WR_CMD (0x02 | 0x04 | 0x08)
++#define WR_ADR (0x01 | 0x04 | 0x08)
++#else
++/* Controller Mode Reg (Write Only) */
++#define STANDBY 0x00
++#define WR_DATA 0x10
++#define WR_CMD 0x11
++#define WR_ADR 0x12
++#define PW_OFF 0x80
++#define PW_ON 0x88
++#endif
++
++/***************************************************************************/
++#define _HwSetData(p) ctrl_outb(WR_DATA,MODE(p))
++#define _HwSetCmd(p) ctrl_outb(WR_CMD,MODE(p))
++#define _HwSetAddr(p) ctrl_outb(WR_ADR,MODE(p))
++#define _HwSetStandby(p) ctrl_outb(STANDBY,MODE(p))
++
++#define _HwInData(p) ctrl_inb(DATA(p))
++#define _HwOutData(p,a) ctrl_outb((a),DATA(p))
++
++#ifdef CONFIG_SH_TITAN
++#define _HwVccOn(p)
++#define _HwVccOff(p)
++#else
++#define _HwVccOn(p) ctrl_outb(PW_ON,MODE(p))
++#define _HwVccOff(p) ctrl_outb(PW_OFF,MODE(p))
++#endif
++
++#ifdef CONFIG_SH_TITAN
++#define _HwChkCardIn(p) (1)
++#define _HwChkStatus(p) (0)
++#define _HwChkWP(p) (0)
++#define _HwChkPower(p) (1)
++#define _HwChkBusy(p) (ctrl_inb(STATUS(p))&STS_BUSY)
++
++#else
++
++#define _HwChkCardIn(p) (ctrl_inb(STATUS(p))&STS_CENB)
++#define _HwChkStatus(p) (ctrl_inb(STATUS(p))&(STS_SCHG))
++#define _HwChkWP(p) (ctrl_inb(STATUS(p))&(STS_WP))
++#define _HwChkPower(p) (ctrl_inb(STATUS(p))&(STS_VCC))
++#define _HwChkBusy(p) (ctrl_inb(STATUS(p))&STS_BUSY)
++
++#endif
++
++#define _HwRdStatus(p) (ctrl_inb(STATUS(p)))
++/***************************************************************************/
++#ifdef CONFIG_SH_NIMBLE_MINI
++#define CPLD_BASE_ADDRESS 0xB4030000L
++#define SMART_MEDIA_ONE_OFFSET 0x08 // The "built-in" SmartMedia
++#define SMART_MEDIA_TWO_OFFSET 0x00 // The "removable" SmartMedia
++#elif CONFIG_SH_TITAN
++#define CPLD_BASE_ADDRESS 0xA4000000L
++#define SMART_MEDIA_ONE_OFFSET 0x00
++#else
++#define CPLD_BASE_ADDRESS 0xB8030000L
++#define SMART_MEDIA_ONE_OFFSET 0x00 // The "built-in" SmartMedia
++#endif
++
++/***************************************************************************
++ Program & Macro for SmartMedia Controller
++ Rev 0.30('98-06-30) ***** BETA RELEASE *****
++ Copyright (c) 1997-98, Toshiba Corporation. All rights reserved.
++ ***************************************************************************/
++/***************************************************************************
++ Define Definition
++ ***************************************************************************/
++#define K_BYTE 1024 /* Kilo Byte */
++#define SSFDC_SECTSIZE 512 /* Sector buffer size */
++#define SSFDC_BLKSIZE (K_BYTE * 4)
++#define REDTSIZE 16 /* Redundant buffer size */
++
++/***************************************************************************/
++#define DUMMY_DATA 0xFF /* No Assign Sector Read Data */
++
++/***************************************************************************
++ Max Zone/Block/Sectors Data Definition
++ ***************************************************************************/
++#define MAX_ZONENUM 0x08 /* Max Zone Numbers in a SmartMedia */
++#define MAX_BLOCKNUM 0x0400 /* Max Block Numbers in a Zone */
++#define MAX_SECTNUM 0x20 /* Max Sector Numbers in a Block */
++#define MAX_LOGBLOCK 1000 /* Max Logical Block Numbers in a Zone */
++
++/***************************************************************************
++ Logical to Physical Block Table Data Definition
++ ***************************************************************************/
++#define NO_ASSIGN 0xFFFF /* No Assign Logical Block Address */
++
++/***************************************************************************
++ 'SectCopyMode' Data
++ ***************************************************************************/
++#define COMPLETED 0 /* Sector Copy Completed */
++#define REQ_ERASE 1 /* Request Read Block Erase */
++#define REQ_FAIL 2 /* Request Read Block Failed */
++
++/***************************************************************************
++ Retry Counter Definition
++ ***************************************************************************/
++#define RDERR_REASSIGN 1 /* Reassign with Read Error */
++#define L2P_ERR_ERASE 1 /* BlockErase for Contradicted L2P Table */
++
++/***************************************************************************
++ SmartMedia Command & Status Definition
++ ***************************************************************************/
++/* SmartMedia Command */
++#define SSFDC_WRDATA 0x80
++#define SSFDC_READ 0x00
++#define SSFDC_READ_REDT 0x50
++#define SSFDC_READ1 0x00
++#define SSFDC_READ2 0x01
++#define SSFDC_READ3 0x50
++#define SSFDC_RST_CHIP 0xFF
++#define SSFDC_WRITE 0x10
++#define SSFDC_DUMMY_WRITE 0x11
++#define SSFDC_MULTI_WRITE 0x15
++#define SSFDC_ERASE1 0x60
++#define SSFDC_ERASE2 0xD0
++#define SSFDC_RDSTATUS 0x70
++#define SSFDC_READ_ID 0x90
++
++/* SmartMedia Status */
++#define WR_FAIL 0x01 /* 0:Pass, 1:Fail */
++#define SUSPENDED 0x20 /* 0:Not Suspended, 1:Suspended */
++#define READY 0x40 /* 0:Busy, 1:Ready */
++#define WR_PRTCT 0x80 /* 0:Protect, 1:Not Protect */
++
++#define USEC 1
++#define MSEC 1000 * USEC
++#define JIFFY_TICK_MS (MSEC / HZ)
++
++// #define BUSY_PROG 20 * MSEC /* 200-1000us ----- Program Time */
++#define BUSY_PROG 1000 * USEC /* 200-1000us ----- Program Time */
++#define BUSY_DUMMY_WRITE 10 * USEC /* 2-10us dummy write */
++#define BUSY_MULTI_WRITE 1000 * USEC /* 200 - 1000 usec */
++#define BUSY_ERASE 10 * MSEC /* 2-10ms ----- Block Erase Time */
++#define BUSY_READ 100 * USEC /* tR : 100us ----- Data transfer Time */
++#define BUSY_RESET 10 * USEC /* tRST : 10us ----- Device Resetting Time */
++#define BUSY_ADDR_SET 25 * USEC
++
++#define TIME_PON 30 /* 300ms ------ Power On Wait Time */
++#define TIME_CDCHK 2 /* 20ms ------ Card Check Interval Timer */
++#define TIME_WPCHK 1 /* 5ms ------ WP Check Interval Timer */
++
++/* Power On Timeout */
++#define POWER_ON_TIMEOUT (HZ*2)
++
++/* Default retry limit for Read/Write */
++#define RD_RETRY_LIMIT 3
++#define WR_RETRY_LIMIT 4
++#define BLOCK_READ_RETRY_LIMIT 2
++#define BLOCK_WRITE_RETRY_LIMIT 3
++#define REASSIGN_RETRY_LIMIT 4
++
++/***************************************************************************
++ Redundant Data
++ ***************************************************************************/
++#define REDT_DATA 0x04
++#define REDT_BLOCK 0x05
++
++#define REDT_ADDR1H 0x06
++#define REDT_ADDR1L 0x07
++#define REDT_ADDR2H 0x0B
++#define REDT_ADDR2L 0x0C
++
++#define REDT_ECC10 0x0D
++#define REDT_ECC11 0x0E
++#define REDT_ECC12 0x0F
++
++#define REDT_ECC20 0x08
++#define REDT_ECC21 0x09
++#define REDT_ECC22 0x0A
++
++/***************************************************************************
++ SmartMedia Model & Attribute
++ ***************************************************************************/
++/* SmartMedia Attribute */
++#define NOWP 0x00 /* 0... .... No Write Protect */
++#define WP 0x80 /* 1... .... Write Protected */
++#define MASK 0x00 /* .00. .... NAND MASK ROM Model */
++#define FLASH 0x20 /* .01. .... NAND Flash ROM Model */
++#define AD3CYC 0x00 /* ...0 .... Address 3-cycle */
++#define AD4CYC 0x10 /* ...1 .... Address 4-cycle */
++#define BS16 0x00 /* .... 00.. 16page/block */
++#define BS32 0x04 /* .... 01.. 32page/block */
++#define PS256 0x00 /* .... ..00 256byte/page */
++#define PS512 0x01 /* .... ..01 512byte/page */
++
++#define MWP 0x80 /* WriteProtect mask */
++#define MFLASH 0x60 /* Flash Rom mask */
++#define MADC 0x10 /* Address Cycle */
++#define MBS 0x0C /* BlockSize mask */
++#define MPS 0x03 /* PageSize mask */
++
++/* SmartMedia Model */
++#define NOSSFDC 0x00 /* NO SmartMedia */
++#define SSFDC1MB 0x01 /* 1MB SmartMedia */
++#define SSFDC2MB 0x02 /* 2MB SmartMedia */
++#define SSFDC4MB 0x03 /* 4MB SmartMedia */
++#define SSFDC8MB 0x04 /* 8MB SmartMedia */
++#define SSFDC16MB 0x05 /* 16MB SmartMedia */
++#define SSFDC32MB 0x06 /* 32MB SmartMedia */
++#define SSFDC64MB 0x07 /* 64MB SmartMedia */
++#define SSFDC128MB 0x08 /*128MB SmartMedia */
++
++#define EVEN 0 /* Even Page for 256byte/page */
++#define ODD 1 /* Odd Page for 256byte/page */
++
++/***************************************************************************
++ Struct Definition
++ ***************************************************************************/
++/* Linux kernel additions */
++
++/* device buffer xfer status */
++typedef enum { xfer_idle, xfer_busy} xfer_states;
++
++/* Smartmedia device structure */
++typedef struct {
++ unsigned long address;
++ int sm_minor;
++ int sm_flags;
++ int busy;
++ int waiting;
++
++ /* queue of io requests for the device */
++ spinlock_t req_queue_lock;
++ request_queue_t *req_queue;
++
++ /* our thread related parameters */
++ struct completion thread_dead;
++ int exiting;
++ wait_queue_head_t thread_wq;
++
++ /* accounting variables for each buffer io operation
++ each request may have a chain of buffers, each of
++ which may require I/O of multiple sectors */
++ unsigned int ReqSectorSize;
++ unsigned int BufIndex;
++ unsigned int SectorWriteIndex;
++
++ /* CHS parameters */
++ unsigned int HostCyl;
++ unsigned char HostHead;
++ unsigned char HostSect;
++
++ /* State Information */
++ xfer_states XferState;
++ unsigned int UseCount;
++ unsigned int RetryCount;
++ unsigned int ErrCode;
++ unsigned int MediaChange;
++ unsigned int CardPresent;
++ unsigned int SectCopyMode;
++
++ /* Working Databuf Area */
++ unsigned char SectBuf[SSFDC_SECTSIZE];
++ unsigned char WorkBuf[SSFDC_SECTSIZE];
++ unsigned char Redundant[REDTSIZE];
++ unsigned char WorkRedund[REDTSIZE];
++ unsigned int DataBuf_Valid;
++ unsigned int Log2Phy[MAX_ZONENUM][MAX_LOGBLOCK];
++ unsigned char Assign[MAX_ZONENUM][MAX_BLOCKNUM/8];
++ unsigned int AssignStart[MAX_ZONENUM];
++ unsigned int ReadBlock;
++ unsigned int WriteBlock;
++
++ /* Card attributes */
++ unsigned char Model;
++ unsigned char Attribute;
++ unsigned char MaxZones;
++ unsigned char MaxSectors;
++ unsigned int MaxBlocks;
++ unsigned int MaxLogBlocks;
++
++ /* Address of current access (Media) */
++ unsigned char Zone; /* Zone Number */
++ unsigned char Sector; /* Sector(512byte) Number on Block */
++ unsigned int PhyBlock; /* Physical Block Number on Zone */
++ unsigned int LogBlock; /* Logical Block Number of Zone */
++
++ /* device statistics */
++ unsigned int Sector_reads;
++ unsigned int Sector_writes;
++ unsigned int Sect_rd_errs_ttl;
++ unsigned int Sect_wr_errs_ttl;
++ unsigned int Bad_blks_rd;
++ unsigned int Bad_blks_wr;
++ unsigned int Bad_blks_erase;
++} ssfdc_dev;
++
++
++/****************************************************************************/
++/* Handy defines */
++/****************************************************************************/
++#define WRITE_PROTECTED(p) (p->Attribute & WP)
++
++/* End of Linux kernel additions */
++#endif /* #ifndef _SSFDC_H */
diff --git a/packages/linux/linux-titan-sh4_2.6.16.bb b/packages/linux/linux-titan-sh4_2.6.16.bb
new file mode 100644
index 0000000000..da10945447
--- /dev/null
+++ b/packages/linux/linux-titan-sh4_2.6.16.bb
@@ -0,0 +1,52 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for SH4 based TITAN router appliance"
+LICENSE = "GPL"
+MAINTAINER = "Jamie Lenehan <lenehan@twibble.org>
+PR = "r0"
+
+# The "date=20060328" should be changed to "tag=linux-2_6_16" - but the
+# tag won't exit till 2.6.17 is released
+SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+cvs://anonymous@linuxsh.cvs.sourceforge.net/cvsroot/linuxsh;module=linux;date=20060331 \
+ file://titan-flash.patch;patch=1 \
+ file://titan-config"
+S = "${WORKDIR}/linux-${PV}"
+
+COMPATIBLE_HOST = 'sh4.*-linux'
+
+inherit kernel
+
+ARCH = "sh"
+KERNEL_IMAGETYPE = "zImage"
+KERNEL_OUTPUT = "arch/${ARCH}/boot/${KERNEL_IMAGETYPE}"
+
+# Fix up kernel version - sh kernels get -sh added automatically
+KERNEL_RELEASE = "${KERNEL_VERSION}"
+
+#
+# The linux-sh cvs tree is a "drop in source tree" and needs to be copied
+# over the top of the normal linux source since it only includes modified
+# files.
+#
+do_unpack_extra(){
+ cp -pPR ${WORKDIR}/linux/* ${S}
+}
+addtask unpack_extra after do_unpack before do_patch
+
+#
+# Use an updated defconfig which includes the flash driver
+# The flash driver quality doesn't allow it to be a part of the main kernel
+#
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/titan-config ${S}/arch/sh/configs/titan_defconfig
+ yes '' | oe_runmake titan_defconfig
+}
+
+#
+# Should I make the nfs boot image?
+#
+#do_deploy_titan() {
+# To NFS boot you need to objcopy the image...
+# ${HOST_PREFIX}objcopy -O binary -R .note -R .comment -S arch/sh/boot/compressed/vmlinux ${DEPLOY_DIR}/linux.bin
+#}
+#addtask deploy before do_build after do_compile
diff --git a/packages/mc/mc_4.6.1.bb b/packages/mc/mc_4.6.1.bb
new file mode 100644
index 0000000000..58a8fdf51b
--- /dev/null
+++ b/packages/mc/mc_4.6.1.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "GNU Midnight Commander is a file \
+manager for free operating systems."
+HOMEPAGE = "http://www.ibiblio.org/mc/"
+LICENSE = "GPLv2"
+SECTION = "console/utils"
+PRIORITY = "optional"
+DEPENDS = "ncurses glib-2.0"
+RDEPENDS = "ncurses-terminfo"
+PR ="r1"
+
+SRC_URI = "http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/mc-${PV}.tar.gz"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-glibtest --without-x --without-samba \
+--without-nfs --without-gpm-mouse --with-screen=ncurses"
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
+
+do_install() {
+ cd src
+ oe_runmake 'DESTDIR=${D}' install
+ cd ../syntax
+ oe_runmake 'DESTDIR=${D}' install
+ cd ../po
+ oe_runmake 'DESTDIR=${D}' install
+ cd ../vfs
+ oe_runmake 'DESTDIR=${D}' install
+ cd ..
+
+ install -m 0644 lib/cedit.menu ${D}${datadir}/mc/
+ install -m 0644 lib/edit.indent.rc ${D}${datadir}/mc/
+ install -m 0644 lib/edit.spell.rc ${D}${datadir}/mc/
+ install -m 0644 lib/mc.charsets ${D}${datadir}/mc/
+ install -m 0644 lib/mc.ext ${D}${datadir}/mc/
+ install -m 0644 lib/mc.lib ${D}${datadir}/mc/
+ install -m 0644 lib/mc.menu ${D}${datadir}/mc/
+ install -m 0644 lib/mc.menu.sr ${D}${datadir}/mc/
+}
diff --git a/packages/mdadm/mdadm.inc b/packages/mdadm/mdadm.inc
index 25a4a5ed1d..5b293b7a68 100644
--- a/packages/mdadm/mdadm.inc
+++ b/packages/mdadm/mdadm.inc
@@ -7,6 +7,9 @@ LICENSE = "GPL"
SRC_URI = "ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/${PN}-${PV}.tar.bz2"
+CFLAGS += "-fno-strict-aliasing"
+
+
inherit autotools
INHIBIT_AUTO_STAGE = "1"
diff --git a/packages/mdadm/mdadm_1.12.0.bb b/packages/mdadm/mdadm_1.12.0.bb
index f41b36fba9..9fa79120b7 100644
--- a/packages/mdadm/mdadm_1.12.0.bb
+++ b/packages/mdadm/mdadm_1.12.0.bb
@@ -1,4 +1,4 @@
include mdadm.inc
-PR = "r2"
+PR = "r3"
SRC_URI += " file://build_flags.patch;patch=1 "
diff --git a/packages/meta/jlime-opie.bb b/packages/meta/jlime-opie.bb
new file mode 100644
index 0000000000..0d81066778
--- /dev/null
+++ b/packages/meta/jlime-opie.bb
@@ -0,0 +1,68 @@
+export IMAGE_BASENAME = "jlime-opie"
+export IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+PR = "r21"
+
+DEPENDS = "task-bootstrap task-opie"
+RDEPENDS = "${INSTALL_PACKAGES}"
+
+extra_stuff := '${@base_conditional("ROOT_FLASH_SIZE", "24", "", "task-opie-extra-games task-opie-extra-apps task-opie-extra-styles konqueror-embedded",d)}'
+
+INSTALL_PACKAGES = "task-bootstrap task-opie-base task-opie-base-applets \
+ task-opie-base-inputmethods task-opie-base-apps \
+ task-opie-base-settings task-opie-base-decorations \
+ task-opie-base-styles task-opie-base-pim \
+ task-opie-extra-settings \
+ task-opie-bluetooth task-opie-irda \
+ ${extra_stuff}"
+
+export IPKG_INSTALL = "${INSTALL_PACKAGES}"
+
+# merge feed-sources into ipkg.conf for opie-aqpkg as it can't handle feed-sources outside of ipkg.conf.
+merge_feeds() {
+
+ if ! test -z "${FEED_URIS}"
+ then
+ # Die gracefully if ipkg-collateral failed
+ if ! test -e "${IMAGE_ROOTFS}/etc/ipkg.conf"
+ then
+ echo "[${IMAGE_ROOTFS}/etc/ipkg.conf] is missing!"
+ exit 1
+ fi
+
+ # comment out existing feed-sources inserted by ipkg-collateral
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | sed "s/^src\ /#src\ /" > ${IMAGE_ROOTFS}/etc/ipkg.conf_
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
+
+ # extract, then delete destinations
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep -v "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf_
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
+
+
+ for line in ${FEED_URIS}
+ do
+ # strip leading and trailing spaces/tabs, then split into name and uri
+ line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
+ feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
+ feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
+
+ # insert new feed-sources
+ echo "src/gz $feed_name $feed_uri" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ done
+
+ # remove temporary files and rebuild ipkg.conf
+ echo "" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ cat ${IMAGE_ROOTFS}/etc/ipkg.conf.dest >> ${IMAGE_ROOTFS}/etc/ipkg.conf
+ rm ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
+
+ # remove -feed.conf files which are no longer needed
+ cd ${IMAGE_ROOTFS}/etc/ipkg/ && rm -- *-feed.conf
+ fi
+}
+
+# merge feed-sources into ipkg.conf and create /etc/timestamp from build date
+IMAGE_PREPROCESS_COMMAND = "merge_feeds; create_etc_timestamp"
+
+inherit image_ipk
diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb
index 97f4c4437f..4a04c945ae 100644
--- a/packages/meta/slugos-packages.bb
+++ b/packages/meta/slugos-packages.bb
@@ -6,7 +6,7 @@ DESCRIPTION = "Packages that are compatible with the SlugOS firmware"
MAINTAINER = "NSLU2 Linux <nslu2-linux@yahoogroups.com>"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r4"
+PR = "r5"
CONFLICTS = "db3"
PROVIDES += "${SLUGOS_IMAGENAME}-packages"
@@ -103,7 +103,6 @@ SLUGOS_PACKAGES = "\
make \
masqmail \
mdadm \
- memtester \
mgetty \
miau \
microcom \
@@ -175,6 +174,7 @@ SLUGOS_PACKAGES = "\
# Packages currently broken on all platforms
SLUGOS_BROKEN_PACKAGES = "\
irssi \
+ memtester \
obexftp \
qc-usb-messenger \
unionfs-modules \
diff --git a/packages/meta/task-bootstrap-unionroot.bb b/packages/meta/task-bootstrap-unionroot.bb
index c800fca9f1..0df162a9e5 100644
--- a/packages/meta/task-bootstrap-unionroot.bb
+++ b/packages/meta/task-bootstrap-unionroot.bb
@@ -1,8 +1,6 @@
DESCRIPTION = "Core packages required for a basic installation with unionroot"
MAINTAINER = "Chris Lord <cwiiis@handhelds.org>"
PROVIDES = "task-bootstrap"
-PN = "task-bootstrap"
-PV = "1.0unionroot"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/misc-binary-only/acx-firmware_1.0.bb b/packages/misc-binary-only/acx-firmware_1.0.bb
index f703dc93b4..bfeaae773f 100644
--- a/packages/misc-binary-only/acx-firmware_1.0.bb
+++ b/packages/misc-binary-only/acx-firmware_1.0.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "ACX (iPAQ HX4700/HTC Universal) wireless firmware."
SECTION = "base"
LICENSE = "Unknown"
-PR = "r1"
-RDEPENDS = "kernel-module-firmware-class"
+PR = "r2"
+RRECOMMENDS = "kernel-module-firmware-class"
SRC_URI = "http://sdgsystems.com/pub/ipaq/hx4700/src/RADIO0d.BIN \
http://sdgsystems.com/pub/ipaq/hx4700/src/RADIO11.BIN \
diff --git a/packages/mplayer/mplayer-1.0pre8/.mtn2git_empty b/packages/mplayer/mplayer-1.0pre8/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mplayer/mplayer-1.0pre8/.mtn2git_empty
diff --git a/packages/mplayer/mplayer-1.0pre8/libmpcodecs-ogg-include.patch b/packages/mplayer/mplayer-1.0pre8/libmpcodecs-ogg-include.patch
new file mode 100644
index 0000000000..619c4b0cd2
--- /dev/null
+++ b/packages/mplayer/mplayer-1.0pre8/libmpcodecs-ogg-include.patch
@@ -0,0 +1,13 @@
+--- MPlayer-1.0pre8/libmpcodecs/Makefile.orig 2006-06-30 23:26:33.000000000 +0100
++++ MPlayer-1.0pre8/libmpcodecs/Makefile 2006-06-30 23:28:52.000000000 +0100
+@@ -267,8 +267,8 @@
+ SRCS2=$(ENCODER_SRCS)
+ OBJS2=$(SRCS2:.c=.o)
+
+-CFLAGS = $(OPTFLAGS) \
+- -I. -I.. \
++CFLAGS = -I.. $(OPTFLAGS) \
++ -I. \
+ -Inative \
+ -I../libmpdemux \
+ -I../loader \
diff --git a/packages/mplayer/mplayer-1.0pre8/libmpdemux-ogg-include.patch b/packages/mplayer/mplayer-1.0pre8/libmpdemux-ogg-include.patch
new file mode 100644
index 0000000000..541f4a03ee
--- /dev/null
+++ b/packages/mplayer/mplayer-1.0pre8/libmpdemux-ogg-include.patch
@@ -0,0 +1,13 @@
+--- MPlayer-1.0pre8/libmpdemux/Makefile.orig 2006-06-30 23:26:49.000000000 +0100
++++ MPlayer-1.0pre8/libmpdemux/Makefile 2006-06-30 23:27:10.000000000 +0100
+@@ -156,8 +156,8 @@
+
+ OBJS = $(SRCS:.c=.o)
+ OBJS += $(CPLUSPLUSSRCS:.cpp=.o)
+-INCLUDE = -I.. -I../loader $(CSS_INC) $(EXTRA_INC) $(LIBAV_INC)
+-CFLAGS = $(OPTFLAGS) $(INCLUDE) $(XMMS_CFLAGS) $(CDPARANOIA_INC) $(DVB_INC)
++INCLUDE = -I../loader $(CSS_INC) $(EXTRA_INC) $(LIBAV_INC)
++CFLAGS = -I.. $(OPTFLAGS) $(INCLUDE) $(XMMS_CFLAGS) $(CDPARANOIA_INC) $(DVB_INC)
+ CPLUSPLUSFLAGS = $(CFLAGS) $(CPLUSPLUSINCLUDE) -D__STDC_LIMIT_MACROS
+ CPLUSPLUS = $(CC)
+
diff --git a/packages/mplayer/mplayer_1.0pre8.bb b/packages/mplayer/mplayer_1.0pre8.bb
index a55c59dc96..9c66221f57 100644
--- a/packages/mplayer/mplayer_1.0pre8.bb
+++ b/packages/mplayer/mplayer_1.0pre8.bb
@@ -13,7 +13,9 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-${PV}.tar.bz2 \
file://w100-configure.patch;patch=1 \
file://w100-Makefile.patch;patch=1 \
file://w100-video_out.patch;patch=1 \
- file://w100-mplayer.patch;patch=1"
+ file://w100-mplayer.patch;patch=1 \
+ file://libmpdemux-ogg-include.patch;patch=1 \
+ file://libmpcodecs-ogg-include.patch;patch=1"
MAINTAINER="Graeme Gregory <dp@xora.org.uk>"
RCONFLICTS_${PN} = "mplayer-atty"
diff --git a/packages/musicpd/mpd-alsa_0.11.5.bb b/packages/musicpd/mpd-alsa_0.11.5.bb
index d4ee65abba..ceb491a192 100644
--- a/packages/musicpd/mpd-alsa_0.11.5.bb
+++ b/packages/musicpd/mpd-alsa_0.11.5.bb
@@ -5,7 +5,7 @@ MAINTAINER = "Chris Larson <kergoth@handhelds.org>"
SECTION = "console/multimedia"
DEPENDS = "libvorbis libogg libid3tag libao-alsa zlib libmikmod libmad flac audiofile virtual/libiconv"
RDEPENDS = "libao-alsa"
-PR = "r1"
+PR = "r3"
SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/mpd-${PV}.tar.gz \
file://mpd/save-volume-state.patch;patch=1 file://mpd/mpd.init"
@@ -20,6 +20,14 @@ INITSCRIPT_NAME = "mpd"
# versions.
EXTRA_OECONF = "--enable-ogg \
+ --with-iconv-libraries=${STAGING_LIBDIR} \
+ --with-iconv-includes=${STAGING_INCDIR} \
+ --with-vorbis-libraries=${STAGING_LIBDIR} \
+ --with-vorbis-includes=${STAGING_INCDIR} \
+ --with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-ogg-includes=${STAGING_INCDIR} \
+ --with-ao-libraries=${STAGING_LIBDIR} \
+ --with-ao-includes=${STAGING_INCDIR} \
--with-id3tag-libraries=${STAGING_LIBDIR} \
--with-id3tag-includes=${STAGING_INCDIR} \
--with-mad-libraries=${STAGING_LIBDIR} \
diff --git a/packages/musicpd/mpd_0.11.5.bb b/packages/musicpd/mpd_0.11.5.bb
index a4ef4e9289..95fe05cf41 100644
--- a/packages/musicpd/mpd_0.11.5.bb
+++ b/packages/musicpd/mpd_0.11.5.bb
@@ -4,7 +4,7 @@ LICENSE = "GPLv2"
MAINTAINER = "Chris Larson <kergoth@handhelds.org>"
SECTION = "console/multimedia"
DEPENDS = "libvorbis libogg libid3tag libao zlib libmikmod libmad flac audiofile virtual/libiconv"
-PR = "r5"
+PR = "r7"
SRC_URI = "${SOURCEFORGE_MIRROR}/musicpd/mpd-${PV}.tar.gz \
file://save-volume-state.patch;patch=1"
@@ -17,6 +17,14 @@ inherit autotools
# versions.
EXTRA_OECONF = "--enable-ogg \
+ --with-iconv-libraries=${STAGING_LIBDIR} \
+ --with-iconv-includes=${STAGING_INCDIR} \
+ --with-vorbis-libraries=${STAGING_LIBDIR} \
+ --with-vorbis-includes=${STAGING_INCDIR} \
+ --with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-ogg-includes=${STAGING_INCDIR} \
+ --with-ao-libraries=${STAGING_LIBDIR} \
+ --with-ao-includes=${STAGING_INCDIR} \
--with-id3tag-libraries=${STAGING_LIBDIR} \
--with-id3tag-includes=${STAGING_INCDIR} \
--with-mad-libraries=${STAGING_LIBDIR} \
diff --git a/packages/mutt/mutt-1.5.4i/keymap.h.patch b/packages/mutt/mutt-1.5.4i/keymap.h.patch
new file mode 100644
index 0000000000..40995aa58f
--- /dev/null
+++ b/packages/mutt/mutt-1.5.4i/keymap.h.patch
@@ -0,0 +1,11 @@
+--- mutt-1.5.4/keymap.h.orig 2006-07-01 16:50:25.000000000 +0200
++++ mutt-1.5.4/keymap.h 2006-07-01 16:50:58.000000000 +0200
+@@ -19,6 +19,8 @@
+ #ifndef KEYMAP_H
+ #define KEYMAP_H
+
++#include "mapping.h"
++
+ /* maximal length of a key binding sequence used for buffer in km_bindkey */
+ #define MAX_SEQ 8
+
diff --git a/packages/mutt/mutt_1.5.4i.bb b/packages/mutt/mutt_1.5.4i.bb
index e6e90dfd1e..50c6019e21 100644
--- a/packages/mutt/mutt_1.5.4i.bb
+++ b/packages/mutt/mutt_1.5.4i.bb
@@ -7,6 +7,7 @@ bindings, keyboard macros, mail threading, regular expression \
searches, and a powerful pattern matching language for selecting \
groups of messages."
LICENSE = "GPL"
+PR = "r1"
SRC_URI = "ftp://ftp.mutt.org/mutt/devel/mutt-${PV}.tar.gz \
http://mutt.kiev.ua/download/mutt-1.5.4/patch-1.5.4.rr.compressed.gz;patch=1 \
http://mutt.kiev.ua/download/mutt-1.5.4/patch-1.5.4.vvv.nntp.gz;patch=1 \
@@ -14,6 +15,7 @@ SRC_URI = "ftp://ftp.mutt.org/mutt/devel/mutt-${PV}.tar.gz \
http://mutt.kiev.ua/download/mutt-1.5.4/patch-1.5.4.vvv.quote.gz;patch=1 \
file://cppflags.patch;patch=1 \
file://posix1_lim.patch;patch=1 \
+ file://keymap.h.patch;patch=1 \
file://configure.patch;patch=1"
S = "${WORKDIR}/mutt-1.5.4"
diff --git a/packages/mutt/mutt_1.5.9i.bb b/packages/mutt/mutt_1.5.9i.bb
index c6939454d2..3192eb50f5 100644
--- a/packages/mutt/mutt_1.5.9i.bb
+++ b/packages/mutt/mutt_1.5.9i.bb
@@ -7,6 +7,7 @@ bindings, keyboard macros, mail threading, regular expression \
searches, and a powerful pattern matching language for selecting \
groups of messages."
LICENSE = "GPL"
+PR = "r0"
SRC_URI = "ftp://ftp.mutt.org/mutt/devel/mutt-${PV}.tar.gz \
http://mutt.kiev.ua/download/mutt-1.5.9/patch-1.5.9.rr.compressed.gz;patch=1 \
http://mutt.kiev.ua/download/mutt-1.5.9/patch-1.5.9.vvv.nntp.gz;patch=1 \
diff --git a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/add-hrw-to-authors.patch b/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/add-hrw-to-authors.patch
deleted file mode 100644
index 93a251ccac..0000000000
--- a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/add-hrw-to-authors.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Backport from CVS
-
-Index: widget.ui
-===================================================================
-RCS file: /cvs/opie/core/applets/aboutapplet/widget.ui,v
-retrieving revision 1.6
-retrieving revision 1.7
-diff -u -u -r1.6 -r1.7
---- aboutapplet/widget.ui 22 Apr 2005 13:01:47 -0000 1.6
-+++ aboutapplet/widget.ui 13 Nov 2005 14:40:31 -0000 1.7
-@@ -134,6 +134,7 @@
- &lt;b&gt;Holger 'Zecke' Freyther&lt;/b&gt; (zecke@handhelds.org)&lt;br/&gt;
- &lt;b&gt;Robert 'Sandman' Griebl&lt;/b&gt; (sandman@handhelds.org)&lt;br/&gt;
- &lt;b&gt;Alberto 'Skyhusker' Hierro&lt;/b&gt; (skyhusker@handhelds.org)&lt;br/&gt;
-+&lt;b&gt;Marcin 'Hrw' Juszkiewicz&lt;/b&gt; (hrw@handhelds.org)&lt;br/&gt;
- &lt;b&gt;Chris 'Kergoth' Larson&lt;/b&gt; (kergoth@handhelds.org)&lt;br/&gt;
- &lt;b&gt;Michael 'Mickey' Lauer&lt;/b&gt; (mickeyl@handhelds.org)&lt;br/&gt;
- &lt;b&gt;Lorn 'ljp' Potter&lt;/b&gt; (ljp@handhelds.org)&lt;br/&gt;
diff --git a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/opie-1.2.1.patch b/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/opie-1.2.1.patch
deleted file mode 100644
index 31e66ced31..0000000000
--- a/packages/opie-aboutapplet/opie-aboutapplet-1.2.1/opie-1.2.1.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Backport from CVS
-
-Index: widget.ui
-===================================================================
-RCS file: /cvs/opie/core/applets/aboutapplet/widget.ui,v
-retrieving revision 1.7
-diff -u -u -r1.7 widget.ui
---- aboutapplet/widget.ui 13 Nov 2005 14:40:31 -0000 1.7
-+++ aboutapplet/widget.ui 22 Jan 2006 20:49:33 -0000
-@@ -42,7 +42,7 @@
- </property>
- <property stdset="1">
- <name>text</name>
-- <string>&lt;center&gt;&lt;b&gt;The Open Palmtop Integrated Environment V1.2&lt;/b&gt;&lt;/center&gt;</string>
-+ <string>&lt;center&gt;&lt;b&gt;The Open Palmtop Integrated Environment V1.2.1&lt;/b&gt;&lt;/center&gt;</string>
- </property>
- </widget>
- <widget row="1" column="1" >
diff --git a/packages/opie-aboutapplet/opie-aboutapplet_1.2.1.bb b/packages/opie-aboutapplet/opie-aboutapplet_1.2.1.bb
deleted file mode 100644
index 41533f8d3b..0000000000
--- a/packages/opie-aboutapplet/opie-aboutapplet_1.2.1.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-include ${PN}.inc
-
-PR = "r2"
-
-SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/aboutapplet \
- file://opie-1.2.1.patch;patch=1 \
- file://add-hrw-to-authors.patch;patch=1"
diff --git a/packages/opie-aboutapplet/opie-aboutapplet_1.2.2.bb b/packages/opie-aboutapplet/opie-aboutapplet_1.2.2.bb
new file mode 100644
index 0000000000..65cb96a6e1
--- /dev/null
+++ b/packages/opie-aboutapplet/opie-aboutapplet_1.2.2.bb
@@ -0,0 +1,4 @@
+include ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/aboutapplet"
diff --git a/packages/opie-addressbook/opie-addressbook_1.2.1.bb b/packages/opie-addressbook/opie-addressbook_1.2.2.bb
index a8bf6f7e5a..a8bf6f7e5a 100644
--- a/packages/opie-addressbook/opie-addressbook_1.2.1.bb
+++ b/packages/opie-addressbook/opie-addressbook_1.2.2.bb
diff --git a/packages/opie-advancedfm/opie-advancedfm_1.2.1.bb b/packages/opie-advancedfm/opie-advancedfm_1.2.2.bb
index 8a4cc0ebc5..8a4cc0ebc5 100644
--- a/packages/opie-advancedfm/opie-advancedfm_1.2.1.bb
+++ b/packages/opie-advancedfm/opie-advancedfm_1.2.2.bb
diff --git a/packages/opie-alarm/opie-alarm_1.2.1.bb b/packages/opie-alarm/opie-alarm_1.2.2.bb
index ada72aea1b..ada72aea1b 100644
--- a/packages/opie-alarm/opie-alarm_1.2.1.bb
+++ b/packages/opie-alarm/opie-alarm_1.2.2.bb
diff --git a/packages/opie-appearance/opie-appearance_1.2.1.bb b/packages/opie-appearance/opie-appearance_1.2.2.bb
index d6ba9fb452..ee26b50ca6 100644
--- a/packages/opie-appearance/opie-appearance_1.2.1.bb
+++ b/packages/opie-appearance/opie-appearance_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/appearance2 \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-aqpkg/opie-aqpkg_1.2.1.bb b/packages/opie-aqpkg/opie-aqpkg_1.2.2.bb
index 17a7683cef..17a7683cef 100644
--- a/packages/opie-aqpkg/opie-aqpkg_1.2.1.bb
+++ b/packages/opie-aqpkg/opie-aqpkg_1.2.2.bb
diff --git a/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.1.bb b/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.2.bb
index f1b992d7c8..f1b992d7c8 100644
--- a/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.1.bb
+++ b/packages/opie-autorotateapplet/opie-autorotateapplet_1.2.2.bb
diff --git a/packages/opie-backgammon/opie-backgammon_1.2.1.bb b/packages/opie-backgammon/opie-backgammon_1.2.2.bb
index 0cae5c2a10..0cae5c2a10 100644
--- a/packages/opie-backgammon/opie-backgammon_1.2.1.bb
+++ b/packages/opie-backgammon/opie-backgammon_1.2.2.bb
diff --git a/packages/opie-backup/opie-backup_1.2.1.bb b/packages/opie-backup/opie-backup_1.2.2.bb
index 8f276e0c3c..3004eeae34 100644
--- a/packages/opie-backup/opie-backup_1.2.1.bb
+++ b/packages/opie-backup/opie-backup_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/backup \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-bartender/opie-bartender_1.2.1.bb b/packages/opie-bartender/opie-bartender_1.2.2.bb
index 40c46f0070..40c46f0070 100644
--- a/packages/opie-bartender/opie-bartender_1.2.1.bb
+++ b/packages/opie-bartender/opie-bartender_1.2.2.bb
diff --git a/packages/opie-batteryapplet/opie-batteryapplet_1.2.1.bb b/packages/opie-batteryapplet/opie-batteryapplet_1.2.2.bb
index 3feba24a63..f8136964fc 100644
--- a/packages/opie-batteryapplet/opie-batteryapplet_1.2.1.bb
+++ b/packages/opie-batteryapplet/opie-batteryapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/batteryapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb b/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
index f7148388a2..8f109df1cc 100644
--- a/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
+++ b/packages/opie-batteryapplet/opie-batteryapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/batteryapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-bluepin/opie-bluepin_1.2.1.bb b/packages/opie-bluepin/opie-bluepin_1.2.2.bb
index 4df972dc5a..fdfdffa0a5 100644
--- a/packages/opie-bluepin/opie-bluepin_1.2.1.bb
+++ b/packages/opie-bluepin/opie-bluepin_1.2.2.bb
@@ -1,5 +1,4 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/blue-pin"
diff --git a/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.1.bb b/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.2.bb
index 43d21d82db..43d21d82db 100644
--- a/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.1.bb
+++ b/packages/opie-bluetoothapplet/opie-bluetoothapplet_1.2.2.bb
diff --git a/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.1.bb b/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.2.bb
index 7f022404b1..3232b06c61 100644
--- a/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.1.bb
+++ b/packages/opie-bluetoothmanager/opie-bluetoothmanager_1.2.2.bb
@@ -1,5 +1,4 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/opietooth/manager \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
diff --git a/packages/opie-bluetoothmanager/opie-bluetoothmanager_cvs.bb b/packages/opie-bluetoothmanager/opie-bluetoothmanager_cvs.bb
index 0dcb90892f..7ff2ac0f64 100644
--- a/packages/opie-bluetoothmanager/opie-bluetoothmanager_cvs.bb
+++ b/packages/opie-bluetoothmanager/opie-bluetoothmanager_cvs.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/net/opietooth/manager \
${HANDHELDS_CVS};module=opie/apps \
diff --git a/packages/opie-bounce/opie-bounce_1.2.1.bb b/packages/opie-bounce/opie-bounce_1.2.2.bb
index 3c49e91391..3c49e91391 100644
--- a/packages/opie-bounce/opie-bounce_1.2.1.bb
+++ b/packages/opie-bounce/opie-bounce_1.2.2.bb
diff --git a/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.1.bb b/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.2.bb
index 854ebd07fa..854ebd07fa 100644
--- a/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.1.bb
+++ b/packages/opie-brightnessapplet/opie-brightnessapplet_1.2.2.bb
diff --git a/packages/opie-button-settings/opie-button-settings-1.2.1/1624-bugfix.patch b/packages/opie-button-settings/opie-button-settings-1.2.1/1624-bugfix.patch
deleted file mode 100644
index 91a22bc976..0000000000
--- a/packages/opie-button-settings/opie-button-settings-1.2.1/1624-bugfix.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Index: button/buttonsettings.cpp
-===================================================================
-RCS file: /cvs/opie/core/settings/button/buttonsettings.cpp,v
-retrieving revision 1.13
-retrieving revision 1.14
-diff -u -u -r1.13 -r1.14
---- button/buttonsettings.cpp 24 Apr 2005 20:24:00 -0000 1.13
-+++ button/buttonsettings.cpp 12 Oct 2005 21:08:35 -0000 1.14
-@@ -37,7 +37,7 @@
- #include <qlabel.h>
- #include <qtimer.h>
- #include <qscrollview.h>
--
-+#include <qcopchannel_qws.h>
-
- using namespace Opie::Core;
-
-@@ -157,6 +157,7 @@
- ButtonSettings::~ButtonSettings ( )
- {
- QPEApplication::ungrabKeyboard ( );
-+ QCopChannel::send ("QPE/System", "deviceButtonMappingChanged()" );
- }
-
- void ButtonSettings::updateLabels ( )
diff --git a/packages/opie-button-settings/opie-button-settings.inc b/packages/opie-button-settings/opie-button-settings.inc
index ec935e7112..733b7d9a5d 100644
--- a/packages/opie-button-settings/opie-button-settings.inc
+++ b/packages/opie-button-settings/opie-button-settings.inc
@@ -1,4 +1,4 @@
-DESCRIPTION = "Device-buttons settings dialog"
+DESCRIPTION = "Opie device buttons settings dialog"
SECTION = "opie/settings"
PRIORITY = "optional"
MAINTAINER = "Team Opie <opie@handhelds.org>"
diff --git a/packages/opie-button-settings/opie-button-settings_1.2.1.bb b/packages/opie-button-settings/opie-button-settings_1.2.1.bb
deleted file mode 100644
index 1f671597ba..0000000000
--- a/packages/opie-button-settings/opie-button-settings_1.2.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-include ${PN}.inc
-
-PR = "r1"
-
-SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/button \
- ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
- ${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
- file://1624-bugfix.patch;patch=1"
diff --git a/packages/opie-button-settings/opie-button-settings_1.2.2.bb b/packages/opie-button-settings/opie-button-settings_1.2.2.bb
new file mode 100644
index 0000000000..576eba1dba
--- /dev/null
+++ b/packages/opie-button-settings/opie-button-settings_1.2.2.bb
@@ -0,0 +1,6 @@
+include ${PN}.inc
+
+
+SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/button \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
+ ${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-buzzword/opie-buzzword_1.2.1.bb b/packages/opie-buzzword/opie-buzzword_1.2.2.bb
index f87d0bbf1f..f87d0bbf1f 100644
--- a/packages/opie-buzzword/opie-buzzword_1.2.1.bb
+++ b/packages/opie-buzzword/opie-buzzword_1.2.2.bb
diff --git a/packages/opie-calculator/opie-calculator_1.2.1.bb b/packages/opie-calculator/opie-calculator_1.2.2.bb
index 984765fe89..984765fe89 100644
--- a/packages/opie-calculator/opie-calculator_1.2.1.bb
+++ b/packages/opie-calculator/opie-calculator_1.2.2.bb
diff --git a/packages/opie-camera/opie-camera_1.2.1.bb b/packages/opie-camera/opie-camera_1.2.2.bb
index 22b4c9b773..22b4c9b773 100644
--- a/packages/opie-camera/opie-camera_1.2.1.bb
+++ b/packages/opie-camera/opie-camera_1.2.2.bb
diff --git a/packages/opie-cardmon/opie-cardmon_1.2.1.bb b/packages/opie-cardmon/opie-cardmon_1.2.2.bb
index 7283fa75f8..7283fa75f8 100644
--- a/packages/opie-cardmon/opie-cardmon_1.2.1.bb
+++ b/packages/opie-cardmon/opie-cardmon_1.2.2.bb
diff --git a/packages/opie-checkbook/opie-checkbook_1.2.1.bb b/packages/opie-checkbook/opie-checkbook_1.2.2.bb
index 8a4cc0ebc5..8a4cc0ebc5 100644
--- a/packages/opie-checkbook/opie-checkbook_1.2.1.bb
+++ b/packages/opie-checkbook/opie-checkbook_1.2.2.bb
diff --git a/packages/opie-citytime/opie-citytime_1.2.1.bb b/packages/opie-citytime/opie-citytime_1.2.2.bb
index 29d244a555..29d244a555 100644
--- a/packages/opie-citytime/opie-citytime_1.2.1.bb
+++ b/packages/opie-citytime/opie-citytime_1.2.2.bb
diff --git a/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.1.bb b/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.2.bb
index a9d681b5b9..f123790cea 100644
--- a/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.1.bb
+++ b/packages/opie-clipboardapplet/opie-clipboardapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/clipboardapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb b/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
index b0ba1ba507..67cc639a0b 100644
--- a/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
+++ b/packages/opie-clipboardapplet/opie-clipboardapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/clipboardapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-clock/opie-clock_1.2.1.bb b/packages/opie-clock/opie-clock_1.2.2.bb
index f86c3d2832..f86c3d2832 100644
--- a/packages/opie-clock/opie-clock_1.2.1.bb
+++ b/packages/opie-clock/opie-clock_1.2.2.bb
diff --git a/packages/opie-clockapplet/opie-clockapplet_1.2.1.bb b/packages/opie-clockapplet/opie-clockapplet_1.2.2.bb
index 9d4dfa7723..6810381989 100644
--- a/packages/opie-clockapplet/opie-clockapplet_1.2.1.bb
+++ b/packages/opie-clockapplet/opie-clockapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/clockapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-clockapplet/opie-clockapplet_cvs.bb b/packages/opie-clockapplet/opie-clockapplet_cvs.bb
index 52276b64c3..8b107589c0 100644
--- a/packages/opie-clockapplet/opie-clockapplet_cvs.bb
+++ b/packages/opie-clockapplet/opie-clockapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/clockapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-confeditor/opie-confeditor_1.2.1.bb b/packages/opie-confeditor/opie-confeditor_1.2.2.bb
index dce2d43da5..dce2d43da5 100644
--- a/packages/opie-confeditor/opie-confeditor_1.2.1.bb
+++ b/packages/opie-confeditor/opie-confeditor_1.2.2.bb
diff --git a/packages/opie-console/opie-console_1.2.1.bb b/packages/opie-console/opie-console_1.2.2.bb
index 061c489c7e..5dbdba0790 100644
--- a/packages/opie-console/opie-console_1.2.1.bb
+++ b/packages/opie-console/opie-console_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r3"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/apps/${APPNAME} \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-dagger/opie-dagger_1.2.1.bb b/packages/opie-dagger/opie-dagger_1.2.2.bb
index 52b34898aa..52b34898aa 100644
--- a/packages/opie-dagger/opie-dagger_1.2.1.bb
+++ b/packages/opie-dagger/opie-dagger_1.2.2.bb
diff --git a/packages/opie-dasher/opie-dasher_1.2.1.bb b/packages/opie-dasher/opie-dasher_1.2.2.bb
index a8b5176961..a8b5176961 100644
--- a/packages/opie-dasher/opie-dasher_1.2.1.bb
+++ b/packages/opie-dasher/opie-dasher_1.2.2.bb
diff --git a/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.1.bb b/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.2.bb
index 515c5c9de1..515c5c9de1 100644
--- a/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.1.bb
+++ b/packages/opie-datebook-birthdayplugin/opie-datebook-birthdayplugin_1.2.2.bb
diff --git a/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.1.bb b/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.2.bb
index bf937db7e1..bf937db7e1 100644
--- a/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.1.bb
+++ b/packages/opie-datebook-chrisholidayplugin/opie-datebook-chrisholidayplugin_1.2.2.bb
diff --git a/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.1.bb b/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.2.bb
index d6d19655a7..d6d19655a7 100644
--- a/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.1.bb
+++ b/packages/opie-datebook-nationalholidayplugin/opie-datebook-nationalholidayplugin_1.2.2.bb
diff --git a/packages/opie-datebook/opie-datebook_1.2.1.bb b/packages/opie-datebook/opie-datebook_1.2.2.bb
index 1470bc05f0..83493f01a3 100644
--- a/packages/opie-datebook/opie-datebook_1.2.1.bb
+++ b/packages/opie-datebook/opie-datebook_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/pim/datebook \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
diff --git a/packages/opie-deco-flat/opie-deco-flat_1.2.1.bb b/packages/opie-deco-flat/opie-deco-flat_1.2.2.bb
index 59aa1d2a23..59aa1d2a23 100644
--- a/packages/opie-deco-flat/opie-deco-flat_1.2.1.bb
+++ b/packages/opie-deco-flat/opie-deco-flat_1.2.2.bb
diff --git a/packages/opie-deco-liquid/opie-deco-liquid_1.2.1.bb b/packages/opie-deco-liquid/opie-deco-liquid_1.2.2.bb
index 6f07a57e40..6f07a57e40 100644
--- a/packages/opie-deco-liquid/opie-deco-liquid_1.2.1.bb
+++ b/packages/opie-deco-liquid/opie-deco-liquid_1.2.2.bb
diff --git a/packages/opie-deco-polished/opie-deco-polished_1.2.1.bb b/packages/opie-deco-polished/opie-deco-polished_1.2.2.bb
index 2dde102adf..2dde102adf 100644
--- a/packages/opie-deco-polished/opie-deco-polished_1.2.1.bb
+++ b/packages/opie-deco-polished/opie-deco-polished_1.2.2.bb
diff --git a/packages/opie-doctab/opie-doctab_1.2.1.bb b/packages/opie-doctab/opie-doctab_1.2.2.bb
index 317b556300..317b556300 100644
--- a/packages/opie-doctab/opie-doctab_1.2.1.bb
+++ b/packages/opie-doctab/opie-doctab_1.2.2.bb
diff --git a/packages/opie-drawpad/opie-drawpad_1.2.1.bb b/packages/opie-drawpad/opie-drawpad_1.2.2.bb
index d4a6c7a665..d4a6c7a665 100644
--- a/packages/opie-drawpad/opie-drawpad_1.2.1.bb
+++ b/packages/opie-drawpad/opie-drawpad_1.2.2.bb
diff --git a/packages/opie-dvorak/opie-dvorak_1.2.1.bb b/packages/opie-dvorak/opie-dvorak_1.2.2.bb
index f7c4394c3f..f7c4394c3f 100644
--- a/packages/opie-dvorak/opie-dvorak_1.2.1.bb
+++ b/packages/opie-dvorak/opie-dvorak_1.2.2.bb
diff --git a/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.1.bb b/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.2.bb
index 68af4cfec6..68af4cfec6 100644
--- a/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.1.bb
+++ b/packages/opie-embeddedkonsole/opie-embeddedkonsole_1.2.2.bb
diff --git a/packages/opie-euroconv/opie-euroconv_1.2.1.bb b/packages/opie-euroconv/opie-euroconv_1.2.2.bb
index 2397fda504..2397fda504 100644
--- a/packages/opie-euroconv/opie-euroconv_1.2.1.bb
+++ b/packages/opie-euroconv/opie-euroconv_1.2.2.bb
diff --git a/packages/opie-examples-python/opie-examples-python_1.2.1.bb b/packages/opie-examples-python/opie-examples-python_1.2.2.bb
index 3dd011c0b9..57a745a480 100644
--- a/packages/opie-examples-python/opie-examples-python_1.2.1.bb
+++ b/packages/opie-examples-python/opie-examples-python_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/examples/python \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-examples-python/opie-examples-python_cvs.bb b/packages/opie-examples-python/opie-examples-python_cvs.bb
index 75a52cb7a7..25cfe334b4 100644
--- a/packages/opie-examples-python/opie-examples-python_cvs.bb
+++ b/packages/opie-examples-python/opie-examples-python_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/examples/python \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-examples/opie-examples_1.2.1.bb b/packages/opie-examples/opie-examples_1.2.2.bb
index 7b28fc1a9c..7b28fc1a9c 100644
--- a/packages/opie-examples/opie-examples_1.2.1.bb
+++ b/packages/opie-examples/opie-examples_1.2.2.bb
diff --git a/packages/opie-eye/opie-eye_1.2.1.bb b/packages/opie-eye/opie-eye_1.2.2.bb
index 0fc47e6b10..0fc47e6b10 100644
--- a/packages/opie-eye/opie-eye_1.2.1.bb
+++ b/packages/opie-eye/opie-eye_1.2.2.bb
diff --git a/packages/opie-fifteen/opie-fifteen_1.2.1.bb b/packages/opie-fifteen/opie-fifteen_1.2.2.bb
index d80333bada..d80333bada 100644
--- a/packages/opie-fifteen/opie-fifteen_1.2.1.bb
+++ b/packages/opie-fifteen/opie-fifteen_1.2.2.bb
diff --git a/packages/opie-formatter/opie-formatter_1.2.1.bb b/packages/opie-formatter/opie-formatter_1.2.2.bb
index f8020d60a0..f8020d60a0 100644
--- a/packages/opie-formatter/opie-formatter_1.2.1.bb
+++ b/packages/opie-formatter/opie-formatter_1.2.2.bb
diff --git a/packages/opie-freetype/opie-freetype_1.2.1.bb b/packages/opie-freetype/opie-freetype_1.2.2.bb
index 81996992a2..81996992a2 100644
--- a/packages/opie-freetype/opie-freetype_1.2.1.bb
+++ b/packages/opie-freetype/opie-freetype_1.2.2.bb
diff --git a/packages/opie-ftp/opie-ftp_1.2.1.bb b/packages/opie-ftp/opie-ftp_1.2.2.bb
index 7a7335ca67..7a7335ca67 100644
--- a/packages/opie-ftp/opie-ftp_1.2.1.bb
+++ b/packages/opie-ftp/opie-ftp_1.2.2.bb
diff --git a/packages/opie-ftplib/opie-ftplib_1.2.1.bb b/packages/opie-ftplib/opie-ftplib_1.2.2.bb
index 0339703a5d..0339703a5d 100644
--- a/packages/opie-ftplib/opie-ftplib_1.2.1.bb
+++ b/packages/opie-ftplib/opie-ftplib_1.2.2.bb
diff --git a/packages/opie-go/opie-go_1.2.1.bb b/packages/opie-go/opie-go_1.2.2.bb
index 4c9f590e9e..4c9f590e9e 100644
--- a/packages/opie-go/opie-go_1.2.1.bb
+++ b/packages/opie-go/opie-go_1.2.2.bb
diff --git a/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.1.bb b/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.2.bb
index 19d2a29213..19d2a29213 100644
--- a/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.1.bb
+++ b/packages/opie-gutenbrowser/opie-gutenbrowser_1.2.2.bb
diff --git a/packages/opie-handwriting/opie-handwriting_1.2.1.bb b/packages/opie-handwriting/opie-handwriting_1.2.2.bb
index ba3da45f95..ba3da45f95 100644
--- a/packages/opie-handwriting/opie-handwriting_1.2.1.bb
+++ b/packages/opie-handwriting/opie-handwriting_1.2.2.bb
diff --git a/packages/opie-help-en/opie-help-en_1.2.1.bb b/packages/opie-help-en/opie-help-en_1.2.2.bb
index 7bf8bd0ad4..7bf8bd0ad4 100644
--- a/packages/opie-help-en/opie-help-en_1.2.1.bb
+++ b/packages/opie-help-en/opie-help-en_1.2.2.bb
diff --git a/packages/opie-help-en/opie-help-en_cvs.bb b/packages/opie-help-en/opie-help-en_cvs.bb
index c54c006709..09c56ae9f4 100644
--- a/packages/opie-help-en/opie-help-en_cvs.bb
+++ b/packages/opie-help-en/opie-help-en_cvs.bb
@@ -1,6 +1,6 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/help/en/html "
diff --git a/packages/opie-helpbrowser/opie-helpbrowser_1.2.1.bb b/packages/opie-helpbrowser/opie-helpbrowser_1.2.2.bb
index f2e144d3ca..f2e144d3ca 100644
--- a/packages/opie-helpbrowser/opie-helpbrowser_1.2.1.bb
+++ b/packages/opie-helpbrowser/opie-helpbrowser_1.2.2.bb
diff --git a/packages/opie-homeapplet/opie-homeapplet_1.2.1.bb b/packages/opie-homeapplet/opie-homeapplet_1.2.2.bb
index b80e85ac52..b80e85ac52 100644
--- a/packages/opie-homeapplet/opie-homeapplet_1.2.1.bb
+++ b/packages/opie-homeapplet/opie-homeapplet_1.2.2.bb
diff --git a/packages/opie-i18n/opie-i18n_1.2.1.bb b/packages/opie-i18n/opie-i18n_1.2.2.bb
index b5011c0501..b5011c0501 100644
--- a/packages/opie-i18n/opie-i18n_1.2.1.bb
+++ b/packages/opie-i18n/opie-i18n_1.2.2.bb
diff --git a/packages/opie-i18n/opie-i18n_cvs.bb b/packages/opie-i18n/opie-i18n_cvs.bb
index 1a1ef7c35b..93183b79a3 100644
--- a/packages/opie-i18n/opie-i18n_cvs.bb
+++ b/packages/opie-i18n/opie-i18n_cvs.bb
@@ -1,7 +1,7 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/i18n \
${HANDHELDS_CVS};module=opie/etc/dict"
diff --git a/packages/opie-i18n/opie-lrelease-native_1.2.1.bb b/packages/opie-i18n/opie-lrelease-native_1.2.2.bb
index 699a72256c..699a72256c 100644
--- a/packages/opie-i18n/opie-lrelease-native_1.2.1.bb
+++ b/packages/opie-i18n/opie-lrelease-native_1.2.2.bb
diff --git a/packages/opie-i18n/opie-lrelease-native_cvs.bb b/packages/opie-i18n/opie-lrelease-native_cvs.bb
index 6f52c45d74..be811dd010 100644
--- a/packages/opie-i18n/opie-lrelease-native_cvs.bb
+++ b/packages/opie-i18n/opie-lrelease-native_cvs.bb
@@ -1,6 +1,6 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/development/translation/opie-lrelease \
${HANDHELDS_CVS};module=opie/development/translation/shared"
diff --git a/packages/opie-i18n/opie-lupdate-native_1.2.1.bb b/packages/opie-i18n/opie-lupdate-native_1.2.2.bb
index d4e7f18284..d4e7f18284 100644
--- a/packages/opie-i18n/opie-lupdate-native_1.2.1.bb
+++ b/packages/opie-i18n/opie-lupdate-native_1.2.2.bb
diff --git a/packages/opie-i18n/opie-lupdate-native_cvs.bb b/packages/opie-i18n/opie-lupdate-native_cvs.bb
index f7f9a79c25..2628d23224 100644
--- a/packages/opie-i18n/opie-lupdate-native_cvs.bb
+++ b/packages/opie-i18n/opie-lupdate-native_cvs.bb
@@ -1,6 +1,6 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/development/translation/opie-lupdate \
${HANDHELDS_CVS};module=opie/development/translation/shared"
diff --git a/packages/opie-icon-reload/opie-icon-reload_1.2.1.bb b/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb
index c541bc78ed..c541bc78ed 100644
--- a/packages/opie-icon-reload/opie-icon-reload_1.2.1.bb
+++ b/packages/opie-icon-reload/opie-icon-reload_1.2.2.bb
diff --git a/packages/opie-icon-reload/opie-icon-reload_cvs.bb b/packages/opie-icon-reload/opie-icon-reload_cvs.bb
index 0ce2a6b704..a8fb137b9e 100644
--- a/packages/opie-icon-reload/opie-icon-reload_cvs.bb
+++ b/packages/opie-icon-reload/opie-icon-reload_cvs.bb
@@ -1,5 +1,5 @@
include ${PN}.inc
#Remove the dash below when 1.2.1 changes
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
diff --git a/packages/opie-irc/opie-irc_1.2.1.bb b/packages/opie-irc/opie-irc_1.2.2.bb
index a186316b10..a186316b10 100644
--- a/packages/opie-irc/opie-irc_1.2.1.bb
+++ b/packages/opie-irc/opie-irc_1.2.2.bb
diff --git a/packages/opie-irdaapplet/opie-irdaapplet_1.2.1.bb b/packages/opie-irdaapplet/opie-irdaapplet_1.2.2.bb
index 0dda1a3918..2d05c1fbf4 100644
--- a/packages/opie-irdaapplet/opie-irdaapplet_1.2.1.bb
+++ b/packages/opie-irdaapplet/opie-irdaapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/irdaapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb b/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
index 836c6dfeef..4fde5d8591 100644
--- a/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
+++ b/packages/opie-irdaapplet/opie-irdaapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/irdaapplet \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-jumpx/opie-jumpx_1.2.1.bb b/packages/opie-jumpx/opie-jumpx_1.2.2.bb
index 24b86582c5..24b86582c5 100644
--- a/packages/opie-jumpx/opie-jumpx_1.2.1.bb
+++ b/packages/opie-jumpx/opie-jumpx_1.2.2.bb
diff --git a/packages/opie-kbill/opie-kbill_1.2.1.bb b/packages/opie-kbill/opie-kbill_1.2.2.bb
index 90f2a1c1b8..90f2a1c1b8 100644
--- a/packages/opie-kbill/opie-kbill_1.2.1.bb
+++ b/packages/opie-kbill/opie-kbill_1.2.2.bb
diff --git a/packages/opie-kcheckers/opie-kcheckers_1.2.1.bb b/packages/opie-kcheckers/opie-kcheckers_1.2.2.bb
index 868d99e868..868d99e868 100644
--- a/packages/opie-kcheckers/opie-kcheckers_1.2.1.bb
+++ b/packages/opie-kcheckers/opie-kcheckers_1.2.2.bb
diff --git a/packages/opie-keyboard/opie-keyboard_1.2.1.bb b/packages/opie-keyboard/opie-keyboard_1.2.2.bb
index ec608f70d9..ec608f70d9 100644
--- a/packages/opie-keyboard/opie-keyboard_1.2.1.bb
+++ b/packages/opie-keyboard/opie-keyboard_1.2.2.bb
diff --git a/packages/opie-keypebble/opie-keypebble_1.2.1.bb b/packages/opie-keypebble/opie-keypebble_1.2.2.bb
index ec7979ea82..ec7979ea82 100644
--- a/packages/opie-keypebble/opie-keypebble_1.2.1.bb
+++ b/packages/opie-keypebble/opie-keypebble_1.2.2.bb
diff --git a/packages/opie-keytabs/opie-keytabs_1.2.1.bb b/packages/opie-keytabs/opie-keytabs_1.2.2.bb
index 71588448ee..71588448ee 100644
--- a/packages/opie-keytabs/opie-keytabs_1.2.1.bb
+++ b/packages/opie-keytabs/opie-keytabs_1.2.2.bb
diff --git a/packages/opie-keytabs/opie-keytabs_cvs.bb b/packages/opie-keytabs/opie-keytabs_cvs.bb
index 51c58328ca..853405f2fd 100644
--- a/packages/opie-keytabs/opie-keytabs_cvs.bb
+++ b/packages/opie-keytabs/opie-keytabs_cvs.bb
@@ -1,6 +1,6 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/etc"
diff --git a/packages/opie-keyview/opie-keyview_1.2.1.bb b/packages/opie-keyview/opie-keyview_1.2.2.bb
index f922d2f629..f922d2f629 100644
--- a/packages/opie-keyview/opie-keyview_1.2.1.bb
+++ b/packages/opie-keyview/opie-keyview_1.2.2.bb
diff --git a/packages/opie-kjumpx/opie-kjumpx_1.2.1.bb b/packages/opie-kjumpx/opie-kjumpx_1.2.2.bb
index 6b29e8833d..6b29e8833d 100644
--- a/packages/opie-kjumpx/opie-kjumpx_1.2.1.bb
+++ b/packages/opie-kjumpx/opie-kjumpx_1.2.2.bb
diff --git a/packages/opie-kpacman/opie-kpacman_1.2.1.bb b/packages/opie-kpacman/opie-kpacman_1.2.2.bb
index b8372fbbad..b8372fbbad 100644
--- a/packages/opie-kpacman/opie-kpacman_1.2.1.bb
+++ b/packages/opie-kpacman/opie-kpacman_1.2.2.bb
diff --git a/packages/opie-language/opie-language_1.2.1.bb b/packages/opie-language/opie-language_1.2.2.bb
index 891999851d..891999851d 100644
--- a/packages/opie-language/opie-language_1.2.1.bb
+++ b/packages/opie-language/opie-language_1.2.2.bb
diff --git a/packages/opie-launcher-settings/opie-launcher-settings_1.2.1.bb b/packages/opie-launcher-settings/opie-launcher-settings_1.2.2.bb
index 4590f81108..4590f81108 100644
--- a/packages/opie-launcher-settings/opie-launcher-settings_1.2.1.bb
+++ b/packages/opie-launcher-settings/opie-launcher-settings_1.2.2.bb
diff --git a/packages/opie-libqrsync/opie-libqrsync_1.2.1.bb b/packages/opie-libqrsync/opie-libqrsync_1.2.2.bb
index 884cce4a93..884cce4a93 100644
--- a/packages/opie-libqrsync/opie-libqrsync_1.2.1.bb
+++ b/packages/opie-libqrsync/opie-libqrsync_1.2.2.bb
diff --git a/packages/opie-light-and-power/opie-light-and-power_1.2.1.bb b/packages/opie-light-and-power/opie-light-and-power_1.2.2.bb
index c881fdcf41..c881fdcf41 100644
--- a/packages/opie-light-and-power/opie-light-and-power_1.2.1.bb
+++ b/packages/opie-light-and-power/opie-light-and-power_1.2.2.bb
diff --git a/packages/opie-lockapplet/opie-lockapplet_1.2.1.bb b/packages/opie-lockapplet/opie-lockapplet_1.2.2.bb
index add4ad4b4f..a903dbde2e 100644
--- a/packages/opie-lockapplet/opie-lockapplet_1.2.1.bb
+++ b/packages/opie-lockapplet/opie-lockapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/lockapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics "
diff --git a/packages/opie-lockapplet/opie-lockapplet_cvs.bb b/packages/opie-lockapplet/opie-lockapplet_cvs.bb
index 4a67fc8558..d9dcb81fd0 100644
--- a/packages/opie-lockapplet/opie-lockapplet_cvs.bb
+++ b/packages/opie-lockapplet/opie-lockapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/lockapplet \
${HANDHELDS_CVS};module=opie/pics "
diff --git a/packages/opie-login/opie-login_1.2.1.bb b/packages/opie-login/opie-login_1.2.2.bb
index a8753f95ce..a8753f95ce 100644
--- a/packages/opie-login/opie-login_1.2.1.bb
+++ b/packages/opie-login/opie-login_1.2.2.bb
diff --git a/packages/opie-logoutapplet/opie-logoutapplet_1.2.1.bb b/packages/opie-logoutapplet/opie-logoutapplet_1.2.2.bb
index 0da3119e9d..0da3119e9d 100644
--- a/packages/opie-logoutapplet/opie-logoutapplet_1.2.1.bb
+++ b/packages/opie-logoutapplet/opie-logoutapplet_1.2.2.bb
diff --git a/packages/opie-mail/opie-mail_1.2.1.bb b/packages/opie-mail/opie-mail_1.2.2.bb
index 9d322d38b7..9d322d38b7 100644
--- a/packages/opie-mail/opie-mail_1.2.1.bb
+++ b/packages/opie-mail/opie-mail_1.2.2.bb
diff --git a/packages/opie-mailapplet/opie-mailapplet_1.2.1.bb b/packages/opie-mailapplet/opie-mailapplet_1.2.2.bb
index fdea7ee361..fdea7ee361 100644
--- a/packages/opie-mailapplet/opie-mailapplet_1.2.1.bb
+++ b/packages/opie-mailapplet/opie-mailapplet_1.2.2.bb
diff --git a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.1.bb b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb
index 44f420ce08..44f420ce08 100644
--- a/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.1.bb
+++ b/packages/opie-mediaplayer1-libmadplugin/opie-mediaplayer1-libmadplugin_1.2.2.bb
diff --git a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.1.bb b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb
index 47adefb1a8..47adefb1a8 100644
--- a/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.1.bb
+++ b/packages/opie-mediaplayer1-libmodplugin/opie-mediaplayer1-libmodplugin_1.2.2.bb
diff --git a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.1.bb b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb
index 3cbb3caba8..3cbb3caba8 100644
--- a/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.1.bb
+++ b/packages/opie-mediaplayer1-libtremorplugin/opie-mediaplayer1-libtremorplugin_1.2.2.bb
diff --git a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.1.bb b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb
index 47adefb1a8..47adefb1a8 100644
--- a/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.1.bb
+++ b/packages/opie-mediaplayer1-libwavplugin/opie-mediaplayer1-libwavplugin_1.2.2.bb
diff --git a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.1.bb b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb
index e6e8fa3762..e6e8fa3762 100644
--- a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.1.bb
+++ b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.1.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.2.bb
index 7707e9671a..7707e9671a 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.1.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_1.2.2.bb
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb
index 387af9c0e8..81d4c9d7a9 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default-landscape_cvs.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
MAINTAINER = "Team Opie <opie@handhelds.org>"
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
APPNAME = "opieplayer2"
RPROVIDES = "opie-mediaplayer2-skin"
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.1.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.2.bb
index 43fe357625..43fe357625 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.1.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_1.2.2.bb
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb
index 2e189417dc..60990e99f1 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-default_cvs.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
MAINTAINER = "Team Opie <opie@handhelds.org>"
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
APPNAME = "opieplayer2"
RPROVIDES = "opie-mediaplayer2-skin"
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.1.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.2.bb
index f40e4ea658..f40e4ea658 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.1.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_1.2.2.bb
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb
index 279eb2caff..170c26c42a 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-pod_cvs.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
MAINTAINER = "Team Opie <opie@handhelds.org>"
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
APPNAME = "opieplayer2"
RPROVIDES = "opie-mediaplayer2-skin"
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.1.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.2.bb
index bcff4f1702..bcff4f1702 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.1.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_1.2.2.bb
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb
index 17c3a030c5..27f4745d57 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2-skin-techno_cvs.bb
@@ -4,7 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
MAINTAINER = "Team Opie <opie@handhelds.org>"
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
APPNAME = "opieplayer2"
RPROVIDES = "opie-mediaplayer2-skin"
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2_1.2.1.bb b/packages/opie-mediaplayer2/opie-mediaplayer2_1.2.2.bb
index 41de8fc487..1dcf37adae 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2_1.2.1.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/multimedia/opieplayer2 \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-mediaplayer2/opie-mediaplayer2_cvs.bb b/packages/opie-mediaplayer2/opie-mediaplayer2_cvs.bb
index 5d887b073f..19c16f8e10 100644
--- a/packages/opie-mediaplayer2/opie-mediaplayer2_cvs.bb
+++ b/packages/opie-mediaplayer2/opie-mediaplayer2_cvs.bb
@@ -1,8 +1,7 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
-PR = "r1"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/multimedia/opieplayer2 \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-mediummount/opie-mediummount_1.2.1.bb b/packages/opie-mediummount/opie-mediummount_1.2.2.bb
index c80bbb032b..a4a432c193 100644
--- a/packages/opie-mediummount/opie-mediummount_1.2.1.bb
+++ b/packages/opie-mediummount/opie-mediummount_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r2"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/mediummount \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-memoryapplet/opie-memoryapplet_1.2.1.bb b/packages/opie-memoryapplet/opie-memoryapplet_1.2.2.bb
index 0947c45cc1..cb1d51f468 100644
--- a/packages/opie-memoryapplet/opie-memoryapplet_1.2.1.bb
+++ b/packages/opie-memoryapplet/opie-memoryapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/memoryapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/sysinfo \
diff --git a/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb b/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
index e219cf59bb..f15720105b 100644
--- a/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
+++ b/packages/opie-memoryapplet/opie-memoryapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/memoryapplet \
${HANDHELDS_CVS};module=opie/noncore/settings/sysinfo \
diff --git a/packages/opie-mindbreaker/opie-mindbreaker_1.2.1.bb b/packages/opie-mindbreaker/opie-mindbreaker_1.2.2.bb
index 1955e77482..1955e77482 100644
--- a/packages/opie-mindbreaker/opie-mindbreaker_1.2.1.bb
+++ b/packages/opie-mindbreaker/opie-mindbreaker_1.2.2.bb
diff --git a/packages/opie-minesweep/opie-minesweep_1.2.1.bb b/packages/opie-minesweep/opie-minesweep_1.2.2.bb
index a88f61e387..a88f61e387 100644
--- a/packages/opie-minesweep/opie-minesweep_1.2.1.bb
+++ b/packages/opie-minesweep/opie-minesweep_1.2.2.bb
diff --git a/packages/opie-multikey/opie-multikey_1.2.1.bb b/packages/opie-multikey/opie-multikey_1.2.2.bb
index 307a92f100..307a92f100 100644
--- a/packages/opie-multikey/opie-multikey_1.2.1.bb
+++ b/packages/opie-multikey/opie-multikey_1.2.2.bb
diff --git a/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.1.bb b/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.2.bb
index ee8694a02d..e287e321c8 100644
--- a/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.1.bb
+++ b/packages/opie-multikeyapplet/opie-multikeyapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/multikeyapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb b/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
index be6a1ed2d6..fb7346513f 100644
--- a/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
+++ b/packages/opie-multikeyapplet/opie-multikeyapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/multikeyapplet \
${HANDHELDS_CVS};module=opie/apps"
diff --git a/packages/opie-networkapplet/opie-networkapplet_1.2.1.bb b/packages/opie-networkapplet/opie-networkapplet_1.2.2.bb
index aae7d373b1..aae7d373b1 100644
--- a/packages/opie-networkapplet/opie-networkapplet_1.2.1.bb
+++ b/packages/opie-networkapplet/opie-networkapplet_1.2.2.bb
diff --git a/packages/opie-networksettings/opie-networksettings_1.2.1.bb b/packages/opie-networksettings/opie-networksettings_1.2.2.bb
index e652b48e36..e652b48e36 100644
--- a/packages/opie-networksettings/opie-networksettings_1.2.1.bb
+++ b/packages/opie-networksettings/opie-networksettings_1.2.2.bb
diff --git a/packages/opie-notesapplet/opie-notesapplet_1.2.1.bb b/packages/opie-notesapplet/opie-notesapplet_1.2.2.bb
index b0b468ec69..b0b468ec69 100644
--- a/packages/opie-notesapplet/opie-notesapplet_1.2.1.bb
+++ b/packages/opie-notesapplet/opie-notesapplet_1.2.2.bb
diff --git a/packages/opie-odict/opie-odict_1.2.1.bb b/packages/opie-odict/opie-odict_1.2.2.bb
index eb9b93180d..eb9b93180d 100644
--- a/packages/opie-odict/opie-odict_1.2.1.bb
+++ b/packages/opie-odict/opie-odict_1.2.2.bb
diff --git a/packages/opie-oxygen/opie-oxygen_1.2.1.bb b/packages/opie-oxygen/opie-oxygen_1.2.2.bb
index da2e79c01d..da2e79c01d 100644
--- a/packages/opie-oxygen/opie-oxygen_1.2.1.bb
+++ b/packages/opie-oxygen/opie-oxygen_1.2.2.bb
diff --git a/packages/opie-oyatzee/opie-oyatzee_1.2.1.bb b/packages/opie-oyatzee/opie-oyatzee_1.2.2.bb
index 41e557f09f..41e557f09f 100644
--- a/packages/opie-oyatzee/opie-oyatzee_1.2.1.bb
+++ b/packages/opie-oyatzee/opie-oyatzee_1.2.2.bb
diff --git a/packages/opie-packagemanager/opie-packagemanager_1.2.1.bb b/packages/opie-packagemanager/opie-packagemanager_1.2.2.bb
index 66dfd0604d..4e032baf63 100644
--- a/packages/opie-packagemanager/opie-packagemanager_1.2.1.bb
+++ b/packages/opie-packagemanager/opie-packagemanager_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/${APPNAME};cvsdate=${SRCDATE} \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics;cvsdate=${SRCDATE} \
diff --git a/packages/opie-parashoot/opie-parashoot_1.2.1.bb b/packages/opie-parashoot/opie-parashoot_1.2.2.bb
index 60816499b8..60816499b8 100644
--- a/packages/opie-parashoot/opie-parashoot_1.2.1.bb
+++ b/packages/opie-parashoot/opie-parashoot_1.2.2.bb
diff --git a/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.1.bb b/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.2.bb
index 570155a275..565cec4272 100644
--- a/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.1.bb
+++ b/packages/opie-pcmciaapplet/opie-pcmciaapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/pcmcia \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-pickboard/opie-pickboard_1.2.1.bb b/packages/opie-pickboard/opie-pickboard_1.2.2.bb
index 9737c8d192..9737c8d192 100644
--- a/packages/opie-pickboard/opie-pickboard_1.2.1.bb
+++ b/packages/opie-pickboard/opie-pickboard_1.2.2.bb
diff --git a/packages/opie-pics/opie-pics_1.2.1.bb b/packages/opie-pics/opie-pics_1.2.2.bb
index 95c945ffd0..95c945ffd0 100644
--- a/packages/opie-pics/opie-pics_1.2.1.bb
+++ b/packages/opie-pics/opie-pics_1.2.2.bb
diff --git a/packages/opie-pics/opie-pics_cvs.bb b/packages/opie-pics/opie-pics_cvs.bb
index 55b3caf94d..7574464e02 100644
--- a/packages/opie-pics/opie-pics_cvs.bb
+++ b/packages/opie-pics/opie-pics_cvs.bb
@@ -1,7 +1,7 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/pics \
${HANDHELDS_CVS};module=opie/pics-hires"
diff --git a/packages/opie-pimconverter/opie-pimconverter_1.2.1.bb b/packages/opie-pimconverter/opie-pimconverter_1.2.2.bb
index b1920c1290..011d9bfdbd 100644
--- a/packages/opie-pimconverter/opie-pimconverter_1.2.1.bb
+++ b/packages/opie-pimconverter/opie-pimconverter_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/tools/pimconverter \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-pimconverter/opie-pimconverter_cvs.bb b/packages/opie-pimconverter/opie-pimconverter_cvs.bb
index 736ecca4aa..671a37401f 100644
--- a/packages/opie-pimconverter/opie-pimconverter_cvs.bb
+++ b/packages/opie-pimconverter/opie-pimconverter_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/tools/pimconverter \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-powerchord/opie-powerchord_1.2.1.bb b/packages/opie-powerchord/opie-powerchord_1.2.2.bb
index 81edc26a73..81edc26a73 100644
--- a/packages/opie-powerchord/opie-powerchord_1.2.1.bb
+++ b/packages/opie-powerchord/opie-powerchord_1.2.2.bb
diff --git a/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.1.bb b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.2.bb
index 3e3dc6d919..247a163f67 100644
--- a/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.1.bb
+++ b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/applets/pyquicklaunch \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_cvs.bb b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_cvs.bb
index c0e9c777e5..dc7e3c78ef 100644
--- a/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_cvs.bb
+++ b/packages/opie-pyquicklaunchapplet/opie-pyquicklaunchapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/noncore/applets/pyquicklaunch \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-qasteroids/opie-qasteroids_1.2.1.bb b/packages/opie-qasteroids/opie-qasteroids_1.2.2.bb
index 19ed04a4ec..19ed04a4ec 100644
--- a/packages/opie-qasteroids/opie-qasteroids_1.2.1.bb
+++ b/packages/opie-qasteroids/opie-qasteroids_1.2.2.bb
diff --git a/packages/opie-qcop/opie-qcop_1.2.1.bb b/packages/opie-qcop/opie-qcop_1.2.2.bb
index bcde99c437..bcde99c437 100644
--- a/packages/opie-qcop/opie-qcop_1.2.1.bb
+++ b/packages/opie-qcop/opie-qcop_1.2.2.bb
diff --git a/packages/opie-qss/opie-qss_1.2.1.bb b/packages/opie-qss/opie-qss_1.2.2.bb
index 1ef8cb4c29..1ef8cb4c29 100644
--- a/packages/opie-qss/opie-qss_1.2.1.bb
+++ b/packages/opie-qss/opie-qss_1.2.2.bb
diff --git a/packages/opie-quicklauncher/opie-quicklauncher_1.2.1.bb b/packages/opie-quicklauncher/opie-quicklauncher_1.2.2.bb
index bda2b41f8d..bda2b41f8d 100644
--- a/packages/opie-quicklauncher/opie-quicklauncher_1.2.1.bb
+++ b/packages/opie-quicklauncher/opie-quicklauncher_1.2.2.bb
diff --git a/packages/opie-rdesktop/opie-rdesktop_1.2.1.bb b/packages/opie-rdesktop/opie-rdesktop_1.2.2.bb
index 57991916f4..57991916f4 100644
--- a/packages/opie-rdesktop/opie-rdesktop_1.2.1.bb
+++ b/packages/opie-rdesktop/opie-rdesktop_1.2.2.bb
diff --git a/packages/opie-reader/opie-reader_1.2.1.bb b/packages/opie-reader/opie-reader_1.2.2.bb
index 6765f70718..6765f70718 100644
--- a/packages/opie-reader/opie-reader_1.2.1.bb
+++ b/packages/opie-reader/opie-reader_1.2.2.bb
diff --git a/packages/opie-recorder/opie-recorder_1.2.1.bb b/packages/opie-recorder/opie-recorder_1.2.2.bb
index 7bc13602bc..7bc13602bc 100644
--- a/packages/opie-recorder/opie-recorder_1.2.1.bb
+++ b/packages/opie-recorder/opie-recorder_1.2.2.bb
diff --git a/packages/opie-remote/opie-remote_1.2.1.bb b/packages/opie-remote/opie-remote_1.2.2.bb
index a71e0657aa..a71e0657aa 100644
--- a/packages/opie-remote/opie-remote_1.2.1.bb
+++ b/packages/opie-remote/opie-remote_1.2.2.bb
diff --git a/packages/opie-restartapplet/opie-restartapplet2_1.2.1.bb b/packages/opie-restartapplet/opie-restartapplet2_1.2.2.bb
index d38fcba863..d38fcba863 100644
--- a/packages/opie-restartapplet/opie-restartapplet2_1.2.1.bb
+++ b/packages/opie-restartapplet/opie-restartapplet2_1.2.2.bb
diff --git a/packages/opie-restartapplet/opie-restartapplet_1.2.1.bb b/packages/opie-restartapplet/opie-restartapplet_1.2.2.bb
index c4473724bd..c4473724bd 100644
--- a/packages/opie-restartapplet/opie-restartapplet_1.2.1.bb
+++ b/packages/opie-restartapplet/opie-restartapplet_1.2.2.bb
diff --git a/packages/opie-restartapplet2/opie-restartapplet2_1.2.1.bb b/packages/opie-restartapplet2/opie-restartapplet2_1.2.2.bb
index f1bdf5299a..f1bdf5299a 100644
--- a/packages/opie-restartapplet2/opie-restartapplet2_1.2.1.bb
+++ b/packages/opie-restartapplet2/opie-restartapplet2_1.2.2.bb
diff --git a/packages/opie-rotateapplet/opie-rotateapplet_1.2.1.bb b/packages/opie-rotateapplet/opie-rotateapplet_1.2.2.bb
index 48674b9dce..48674b9dce 100644
--- a/packages/opie-rotateapplet/opie-rotateapplet_1.2.1.bb
+++ b/packages/opie-rotateapplet/opie-rotateapplet_1.2.2.bb
diff --git a/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.1.bb b/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.2.bb
index ccc414ef94..3df01b4a55 100644
--- a/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.1.bb
+++ b/packages/opie-screenshotapplet/opie-screenshotapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/screenshotapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps \
diff --git a/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb b/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
index d03726301c..e06983da74 100644
--- a/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
+++ b/packages/opie-screenshotapplet/opie-screenshotapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/screenshotapplet \
${HANDHELDS_CVS};module=opie/apps \
diff --git a/packages/opie-search/opie-search_1.2.1.bb b/packages/opie-search/opie-search_1.2.2.bb
index f2682401f0..f2682401f0 100644
--- a/packages/opie-search/opie-search_1.2.1.bb
+++ b/packages/opie-search/opie-search_1.2.2.bb
diff --git a/packages/opie-security/opie-security_1.2.1.bb b/packages/opie-security/opie-security_1.2.2.bb
index 7ebe6cf5a0..ecdf14a187 100644
--- a/packages/opie-security/opie-security_1.2.1.bb
+++ b/packages/opie-security/opie-security_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/settings/security \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-security/opie-security_cvs.bb b/packages/opie-security/opie-security_cvs.bb
index 980b03b7c1..7f68f03cad 100644
--- a/packages/opie-security/opie-security_cvs.bb
+++ b/packages/opie-security/opie-security_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/settings/security \
${HANDHELDS_CVS};module=opie/pics \
diff --git a/packages/opie-securityplugins/opie-securityplugin-blueping_1.2.1.bb b/packages/opie-securityplugins/opie-securityplugin-blueping_1.2.2.bb
index 65de7b78ec..65de7b78ec 100644
--- a/packages/opie-securityplugins/opie-securityplugin-blueping_1.2.1.bb
+++ b/packages/opie-securityplugins/opie-securityplugin-blueping_1.2.2.bb
diff --git a/packages/opie-securityplugins/opie-securityplugin-dummy_1.2.1.bb b/packages/opie-securityplugins/opie-securityplugin-dummy_1.2.2.bb
index 4a5bc3c2e0..4a5bc3c2e0 100644
--- a/packages/opie-securityplugins/opie-securityplugin-dummy_1.2.1.bb
+++ b/packages/opie-securityplugins/opie-securityplugin-dummy_1.2.2.bb
diff --git a/packages/opie-securityplugins/opie-securityplugin-notice_1.2.1.bb b/packages/opie-securityplugins/opie-securityplugin-notice_1.2.2.bb
index 08bd1b13c0..08bd1b13c0 100644
--- a/packages/opie-securityplugins/opie-securityplugin-notice_1.2.1.bb
+++ b/packages/opie-securityplugins/opie-securityplugin-notice_1.2.2.bb
diff --git a/packages/opie-securityplugins/opie-securityplugin-pin_1.2.1.bb b/packages/opie-securityplugins/opie-securityplugin-pin_1.2.2.bb
index c5ccde6b5c..c5ccde6b5c 100644
--- a/packages/opie-securityplugins/opie-securityplugin-pin_1.2.1.bb
+++ b/packages/opie-securityplugins/opie-securityplugin-pin_1.2.2.bb
diff --git a/packages/opie-sfcave/opie-sfcave_1.2.1.bb b/packages/opie-sfcave/opie-sfcave_1.2.2.bb
index fda3aae425..fda3aae425 100644
--- a/packages/opie-sfcave/opie-sfcave_1.2.1.bb
+++ b/packages/opie-sfcave/opie-sfcave_1.2.2.bb
diff --git a/packages/opie-sh-snes/opie-sh-snes_1.2.1.bb b/packages/opie-sh-snes/opie-sh-snes_1.2.2.bb
index c541bc78ed..c541bc78ed 100644
--- a/packages/opie-sh-snes/opie-sh-snes_1.2.1.bb
+++ b/packages/opie-sh-snes/opie-sh-snes_1.2.2.bb
diff --git a/packages/opie-sh-snes/opie-sh-snes_cvs.bb b/packages/opie-sh-snes/opie-sh-snes_cvs.bb
index 0ce2a6b704..a8fb137b9e 100644
--- a/packages/opie-sh-snes/opie-sh-snes_cvs.bb
+++ b/packages/opie-sh-snes/opie-sh-snes_cvs.bb
@@ -1,5 +1,5 @@
include ${PN}.inc
#Remove the dash below when 1.2.1 changes
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
diff --git a/packages/opie-sh/opie-sh_1.2.1.bb b/packages/opie-sh/opie-sh_1.2.2.bb
index 69de686ed0..69de686ed0 100644
--- a/packages/opie-sh/opie-sh_1.2.1.bb
+++ b/packages/opie-sh/opie-sh_1.2.2.bb
diff --git a/packages/opie-sheet/opie-sheet_1.2.1.bb b/packages/opie-sheet/opie-sheet_1.2.2.bb
index a231ee9a90..a231ee9a90 100644
--- a/packages/opie-sheet/opie-sheet_1.2.1.bb
+++ b/packages/opie-sheet/opie-sheet_1.2.2.bb
diff --git a/packages/opie-snake/opie-snake_1.2.1.bb b/packages/opie-snake/opie-snake_1.2.2.bb
index 9bff0ac043..9bff0ac043 100644
--- a/packages/opie-snake/opie-snake_1.2.1.bb
+++ b/packages/opie-snake/opie-snake_1.2.2.bb
diff --git a/packages/opie-solitaire/opie-solitaire_1.2.1.bb b/packages/opie-solitaire/opie-solitaire_1.2.2.bb
index 5cd42c8d53..5cd42c8d53 100644
--- a/packages/opie-solitaire/opie-solitaire_1.2.1.bb
+++ b/packages/opie-solitaire/opie-solitaire_1.2.2.bb
diff --git a/packages/opie-sounds/opie-sounds_1.2.1.bb b/packages/opie-sounds/opie-sounds_1.2.2.bb
index 8053e4f26e..8053e4f26e 100644
--- a/packages/opie-sounds/opie-sounds_1.2.1.bb
+++ b/packages/opie-sounds/opie-sounds_1.2.2.bb
diff --git a/packages/opie-sounds/opie-sounds_cvs.bb b/packages/opie-sounds/opie-sounds_cvs.bb
index 63854616fa..f430ca0aee 100644
--- a/packages/opie-sounds/opie-sounds_cvs.bb
+++ b/packages/opie-sounds/opie-sounds_cvs.bb
@@ -1,6 +1,6 @@
include ${PN}.inc
# Remove the dash below when 1.2.1 changes in PV
-PV = "1.2.1+cvs-${SRCDATE}"
+PV = "1.2.2+cvs-${SRCDATE}"
SRC_URI = "${HANDHELDS_CVS};module=opie/sounds"
diff --git a/packages/opie-sshkeys/opie-sshkeys_1.2.1.bb b/packages/opie-sshkeys/opie-sshkeys_1.2.2.bb
index f04ccf5609..f04ccf5609 100644
--- a/packages/opie-sshkeys/opie-sshkeys_1.2.1.bb
+++ b/packages/opie-sshkeys/opie-sshkeys_1.2.2.bb
diff --git a/packages/opie-stumbler/opie-stumbler_1.2.1.bb b/packages/opie-stumbler/opie-stumbler_1.2.2.bb
index 93b3c1ff67..93b3c1ff67 100644
--- a/packages/opie-stumbler/opie-stumbler_1.2.1.bb
+++ b/packages/opie-stumbler/opie-stumbler_1.2.2.bb
diff --git a/packages/opie-style-flat/opie-style-flat_1.2.1.bb b/packages/opie-style-flat/opie-style-flat_1.2.2.bb
index 5e55870851..5e55870851 100644
--- a/packages/opie-style-flat/opie-style-flat_1.2.1.bb
+++ b/packages/opie-style-flat/opie-style-flat_1.2.2.bb
diff --git a/packages/opie-style-fresh/opie-style-fresh_1.2.1.bb b/packages/opie-style-fresh/opie-style-fresh_1.2.2.bb
index 9e56bb2750..9e56bb2750 100644
--- a/packages/opie-style-fresh/opie-style-fresh_1.2.1.bb
+++ b/packages/opie-style-fresh/opie-style-fresh_1.2.2.bb
diff --git a/packages/opie-style-liquid/opie-style-liquid_1.2.1.bb b/packages/opie-style-liquid/opie-style-liquid_1.2.2.bb
index fd1e93900f..fd1e93900f 100644
--- a/packages/opie-style-liquid/opie-style-liquid_1.2.1.bb
+++ b/packages/opie-style-liquid/opie-style-liquid_1.2.2.bb
diff --git a/packages/opie-style-metal/opie-style-metal_1.2.1.bb b/packages/opie-style-metal/opie-style-metal_1.2.2.bb
index 014734d8b3..014734d8b3 100644
--- a/packages/opie-style-metal/opie-style-metal_1.2.1.bb
+++ b/packages/opie-style-metal/opie-style-metal_1.2.2.bb
diff --git a/packages/opie-style-phase/opie-style-phase_1.2.1.bb b/packages/opie-style-phase/opie-style-phase_1.2.2.bb
index ee41eb027c..ee41eb027c 100644
--- a/packages/opie-style-phase/opie-style-phase_1.2.1.bb
+++ b/packages/opie-style-phase/opie-style-phase_1.2.2.bb
diff --git a/packages/opie-style-web/opie-style-web_1.2.1.bb b/packages/opie-style-web/opie-style-web_1.2.2.bb
index dda9db378c..dda9db378c 100644
--- a/packages/opie-style-web/opie-style-web_1.2.1.bb
+++ b/packages/opie-style-web/opie-style-web_1.2.2.bb
diff --git a/packages/opie-suspendapplet/opie-suspendapplet_1.2.1.bb b/packages/opie-suspendapplet/opie-suspendapplet_1.2.2.bb
index e88f417b7c..e88f417b7c 100644
--- a/packages/opie-suspendapplet/opie-suspendapplet_1.2.1.bb
+++ b/packages/opie-suspendapplet/opie-suspendapplet_1.2.2.bb
diff --git a/packages/opie-symlinker/opie-symlinker_1.2.1.bb b/packages/opie-symlinker/opie-symlinker_1.2.2.bb
index 682493bafd..682493bafd 100644
--- a/packages/opie-symlinker/opie-symlinker_1.2.1.bb
+++ b/packages/opie-symlinker/opie-symlinker_1.2.2.bb
diff --git a/packages/opie-sysinfo/opie-sysinfo_1.2.1.bb b/packages/opie-sysinfo/opie-sysinfo_1.2.2.bb
index 6aa27a6242..6aa27a6242 100644
--- a/packages/opie-sysinfo/opie-sysinfo_1.2.1.bb
+++ b/packages/opie-sysinfo/opie-sysinfo_1.2.2.bb
diff --git a/packages/opie-systemtime/opie-systemtime_1.2.1.bb b/packages/opie-systemtime/opie-systemtime_1.2.2.bb
index 97fa149a56..97fa149a56 100644
--- a/packages/opie-systemtime/opie-systemtime_1.2.1.bb
+++ b/packages/opie-systemtime/opie-systemtime_1.2.2.bb
diff --git a/packages/opie-tableviewer/opie-tableviewer_1.2.1.bb b/packages/opie-tableviewer/opie-tableviewer_1.2.2.bb
index 3d9158d616..3d9158d616 100644
--- a/packages/opie-tableviewer/opie-tableviewer_1.2.1.bb
+++ b/packages/opie-tableviewer/opie-tableviewer_1.2.2.bb
diff --git a/packages/opie-taskbar/opie-taskbar.inc b/packages/opie-taskbar/opie-taskbar.inc
index 6ca4e12d78..3f6c8bca2e 100644
--- a/packages/opie-taskbar/opie-taskbar.inc
+++ b/packages/opie-taskbar/opie-taskbar.inc
@@ -86,6 +86,15 @@ do_install() {
install -m 0644 ${WORKDIR}/pics/capslock.xpm ${D}${palmtopdir}/pics/
install -m 0644 ${WORKDIR}/pics/numlock.xpm ${D}${palmtopdir}/pics/
+
+ case ${MACHINE} in
+ c7x0)
+ install -d ${D}${sysconfdir}/apm/event.d/
+ install -m 0755 ${WORKDIR}/qpe-suspend-resume ${D}${sysconfdir}/apm/event.d/00-qpe-suspend-resume.sh
+ ;;
+ *)
+ ;;
+ esac
}
updatercd_postinst_mnci() {
@@ -97,6 +106,6 @@ fi
update-rc.d $D ${INITSCRIPT_NAME} ${INITSCRIPT_PARAMS}
}
-FILES_opie-taskbar_append = " /etc ${palmtopdir}/apps ${palmtopdir}/pics"
+FILES_opie-taskbar_append = " ${sysconfdir} ${palmtopdir}/apps ${palmtopdir}/pics"
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume b/packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume
new file mode 100644
index 0000000000..be37519512
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar/c7x0/qpe-suspend-resume
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+QTDIR=/opt/QtPalmtop
+LD_LIBRARY_PATH=$QTDIR
+export LD_LIBRARY_PATH QTDIR
+LOGGING=0
+log() {
+ if [ $LOGGING -eq 1 ]; then
+ echo "$(date +%y/%m/%d-%H:%m:%S): $@" >> /var/log/qte.log
+ fi
+}
+
+retcode=1
+tries=3
+
+if [ "$1" = suspend ]; then
+ while [ $retcode -ne 0 -a $tries -gt 0 ]; do
+ log "-> $QTDIR/bin/qcop QPE/System 'aboutToSuspend()'"
+ $QTDIR/bin/qcop QPE/System 'aboutToSuspend()'
+ retcode=$?
+ tries=`expr $tries - 1`
+ log "<- Result $retcode"
+ done
+elif [ "$1" = resume ]; then
+ while [ $retcode -ne 0 -a $tries -gt 0 ]; do
+ log "-> $QTDIR/bin/qcop QPE/System 'returnFromSuspend()'"
+ $QTDIR/bin/qcop QPE/System 'returnFromSuspend()'
+ retcode=$?
+ tries=`expr $tries - 1`
+ log "<- Result $retcode"
+ done
+fi
+
diff --git a/packages/opie-taskbar/opie-taskbar_1.2.1.bb b/packages/opie-taskbar/opie-taskbar_1.2.2.bb
index 359ea213ec..440ddf6465 100644
--- a/packages/opie-taskbar/opie-taskbar_1.2.1.bb
+++ b/packages/opie-taskbar/opie-taskbar_1.2.2.bb
@@ -1,5 +1,4 @@
include ${PN}.inc
-PR = "r3"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/settings/mediummount \
@@ -15,3 +14,5 @@ SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
file://qpe.conf \
file://locale.conf \
file://opie_defaults"
+
+SRC_URI_append_c7x0 = " file://qpe-suspend-resume"
diff --git a/packages/opie-taskbar/opie-taskbar_cvs.bb b/packages/opie-taskbar/opie-taskbar_cvs.bb
index f1874cf82a..63ce8c0d7f 100644
--- a/packages/opie-taskbar/opie-taskbar_cvs.bb
+++ b/packages/opie-taskbar/opie-taskbar_cvs.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r3"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};module=opie/noncore/settings/mediummount \
@@ -16,3 +15,5 @@ SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
file://qpe.conf \
file://locale.conf \
file://opie_defaults"
+
+SRC_URI_append_c7x0 = " file://qpe-suspend-resume"
diff --git a/packages/opie-tetrix/opie-tetrix_1.2.1.bb b/packages/opie-tetrix/opie-tetrix_1.2.2.bb
index 25435cb30a..25435cb30a 100644
--- a/packages/opie-tetrix/opie-tetrix_1.2.1.bb
+++ b/packages/opie-tetrix/opie-tetrix_1.2.2.bb
diff --git a/packages/opie-textedit/opie-textedit_1.2.1.bb b/packages/opie-textedit/opie-textedit_1.2.2.bb
index f2e144d3ca..f2e144d3ca 100644
--- a/packages/opie-textedit/opie-textedit_1.2.1.bb
+++ b/packages/opie-textedit/opie-textedit_1.2.2.bb
diff --git a/packages/opie-theme/opie-theme_1.2.1.bb b/packages/opie-theme/opie-theme_1.2.2.bb
index e79214dc88..e79214dc88 100644
--- a/packages/opie-theme/opie-theme_1.2.1.bb
+++ b/packages/opie-theme/opie-theme_1.2.2.bb
diff --git a/packages/opie-tictac/opie-tictac_1.2.1.bb b/packages/opie-tictac/opie-tictac_1.2.2.bb
index e8c07ccf64..e8c07ccf64 100644
--- a/packages/opie-tictac/opie-tictac_1.2.1.bb
+++ b/packages/opie-tictac/opie-tictac_1.2.2.bb
diff --git a/packages/opie-tinykate/opie-tinykate_1.2.1.bb b/packages/opie-tinykate/opie-tinykate_1.2.2.bb
index 70b03dfdd1..70b03dfdd1 100644
--- a/packages/opie-tinykate/opie-tinykate_1.2.1.bb
+++ b/packages/opie-tinykate/opie-tinykate_1.2.2.bb
diff --git a/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.1.bb b/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.2.bb
index 5e3bc26ae3..5e3bc26ae3 100644
--- a/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.1.bb
+++ b/packages/opie-today-addressbookplugin/opie-today-addressbookplugin_1.2.2.bb
diff --git a/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.1.bb b/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.2.bb
index a52ba48ef4..a52ba48ef4 100644
--- a/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.1.bb
+++ b/packages/opie-today-datebookplugin/opie-today-datebookplugin_1.2.2.bb
diff --git a/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.1.bb b/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.2.bb
index 90eec22eca..90eec22eca 100644
--- a/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.1.bb
+++ b/packages/opie-today-fortuneplugin/opie-today-fortuneplugin_1.2.2.bb
diff --git a/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.1.bb b/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.2.bb
index d9fa557397..d9fa557397 100644
--- a/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.1.bb
+++ b/packages/opie-today-mailplugin/opie-today-mailplugin_1.2.2.bb
diff --git a/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.1.bb b/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.2.bb
index b98d8170a6..b98d8170a6 100644
--- a/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.1.bb
+++ b/packages/opie-today-stocktickerplugin/opie-today-stocktickerplugin_1.2.2.bb
diff --git a/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.1.bb b/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.2.bb
index 73bd121a45..73bd121a45 100644
--- a/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.1.bb
+++ b/packages/opie-today-todolistplugin/opie-today-todolistplugin_1.2.2.bb
diff --git a/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.1.bb b/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.2.bb
index 6da83c79dc..6da83c79dc 100644
--- a/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.1.bb
+++ b/packages/opie-today-weatherplugin/opie-today-weatherplugin_1.2.2.bb
diff --git a/packages/opie-today/opie-today_1.2.1.bb b/packages/opie-today/opie-today_1.2.2.bb
index 6200f9e4e8..6200f9e4e8 100644
--- a/packages/opie-today/opie-today_1.2.1.bb
+++ b/packages/opie-today/opie-today_1.2.2.bb
diff --git a/packages/opie-todo/opie-todo_1.2.1.bb b/packages/opie-todo/opie-todo_1.2.2.bb
index 21151ae14a..21151ae14a 100644
--- a/packages/opie-todo/opie-todo_1.2.1.bb
+++ b/packages/opie-todo/opie-todo_1.2.2.bb
diff --git a/packages/opie-tonleiter/opie-tonleiter_1.2.1.bb b/packages/opie-tonleiter/opie-tonleiter_1.2.2.bb
index f24f4864d3..f24f4864d3 100644
--- a/packages/opie-tonleiter/opie-tonleiter_1.2.1.bb
+++ b/packages/opie-tonleiter/opie-tonleiter_1.2.2.bb
diff --git a/packages/opie-unikeyboard/opie-unikeyboard_1.2.1.bb b/packages/opie-unikeyboard/opie-unikeyboard_1.2.2.bb
index d83f21559f..d83f21559f 100644
--- a/packages/opie-unikeyboard/opie-unikeyboard_1.2.1.bb
+++ b/packages/opie-unikeyboard/opie-unikeyboard_1.2.2.bb
diff --git a/packages/opie-usermanager/opie-usermanager_1.2.1.bb b/packages/opie-usermanager/opie-usermanager_1.2.2.bb
index a37dc07e42..a37dc07e42 100644
--- a/packages/opie-usermanager/opie-usermanager_1.2.1.bb
+++ b/packages/opie-usermanager/opie-usermanager_1.2.2.bb
diff --git a/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.1.bb b/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.2.bb
index 0ae8478846..0ae8478846 100644
--- a/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.1.bb
+++ b/packages/opie-vmemo-settings/opie-vmemo-settings_1.2.2.bb
diff --git a/packages/opie-vmemo/opie-vmemo_1.2.1.bb b/packages/opie-vmemo/opie-vmemo_1.2.2.bb
index e7a2703c24..e7a2703c24 100644
--- a/packages/opie-vmemo/opie-vmemo_1.2.1.bb
+++ b/packages/opie-vmemo/opie-vmemo_1.2.2.bb
diff --git a/packages/opie-volumeapplet/opie-volumeapplet_1.2.1.bb b/packages/opie-volumeapplet/opie-volumeapplet_1.2.2.bb
index 38cf693d0e..112ad749ae 100644
--- a/packages/opie-volumeapplet/opie-volumeapplet_1.2.1.bb
+++ b/packages/opie-volumeapplet/opie-volumeapplet_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/applets/volumeapplet \
${HANDHELDS_CVS};tag=${TAG};module=opie/apps"
diff --git a/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb b/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
index 50e180dd8f..0d4c369198 100644
--- a/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
+++ b/packages/opie-volumeapplet/opie-volumeapplet_cvs.bb
@@ -1,7 +1,6 @@
include ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/applets/volumeapplet \
${HANDHELDS_CVS};module=opie/apps"
diff --git a/packages/opie-vtapplet/opie-vtapplet_1.2.1.bb b/packages/opie-vtapplet/opie-vtapplet_1.2.2.bb
index 44a61cccd1..44a61cccd1 100644
--- a/packages/opie-vtapplet/opie-vtapplet_1.2.1.bb
+++ b/packages/opie-vtapplet/opie-vtapplet_1.2.2.bb
diff --git a/packages/opie-wellenreiter/opie-wellenreiter_1.2.1.bb b/packages/opie-wellenreiter/opie-wellenreiter_1.2.2.bb
index 7dc43ad8d6..8d06318bb5 100644
--- a/packages/opie-wellenreiter/opie-wellenreiter_1.2.1.bb
+++ b/packages/opie-wellenreiter/opie-wellenreiter_1.2.2.bb
@@ -1,6 +1,5 @@
include ${PN}.inc
-PR = "r1"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/noncore/net/wellenreiter \
${HANDHELDS_CVS};tag=${TAG};module=opie/pics \
diff --git a/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.1.bb b/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.2.bb
index b20c5f5f73..b20c5f5f73 100644
--- a/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.1.bb
+++ b/packages/opie-wirelessapplet/opie-wirelessapplet_1.2.2.bb
diff --git a/packages/opie-wordgame/opie-wordgame_1.2.1.bb b/packages/opie-wordgame/opie-wordgame_1.2.2.bb
index faf4d44ef8..faf4d44ef8 100644
--- a/packages/opie-wordgame/opie-wordgame_1.2.1.bb
+++ b/packages/opie-wordgame/opie-wordgame_1.2.2.bb
diff --git a/packages/opie-write/opie-write_1.2.1.bb b/packages/opie-write/opie-write_1.2.2.bb
index 8a4cc0ebc5..8a4cc0ebc5 100644
--- a/packages/opie-write/opie-write_1.2.1.bb
+++ b/packages/opie-write/opie-write_1.2.2.bb
diff --git a/packages/opie-zkbapplet/opie-zkbapplet_1.2.1.bb b/packages/opie-zkbapplet/opie-zkbapplet_1.2.2.bb
index 95216c7570..95216c7570 100644
--- a/packages/opie-zkbapplet/opie-zkbapplet_1.2.1.bb
+++ b/packages/opie-zkbapplet/opie-zkbapplet_1.2.2.bb
diff --git a/packages/opie-zlines/opie-zlines_1.2.1.bb b/packages/opie-zlines/opie-zlines_1.2.2.bb
index 8a1ad20373..8a1ad20373 100644
--- a/packages/opie-zlines/opie-zlines_1.2.1.bb
+++ b/packages/opie-zlines/opie-zlines_1.2.2.bb
diff --git a/packages/opie-zsafe/opie-zsafe_1.2.1.bb b/packages/opie-zsafe/opie-zsafe_1.2.2.bb
index 7e2c2a020b..7e2c2a020b 100644
--- a/packages/opie-zsafe/opie-zsafe_1.2.1.bb
+++ b/packages/opie-zsafe/opie-zsafe_1.2.2.bb
diff --git a/packages/opie-zsame/opie-zsame_1.2.1.bb b/packages/opie-zsame/opie-zsame_1.2.2.bb
index 0c4691b578..0c4691b578 100644
--- a/packages/opie-zsame/opie-zsame_1.2.1.bb
+++ b/packages/opie-zsame/opie-zsame_1.2.2.bb
diff --git a/packages/perl/perl-5.8.7/config.sh-sh3-linux b/packages/perl/perl-5.8.7/config.sh-sh3-linux
index bbbb12360b..d3bee1e4ed 100644
--- a/packages/perl/perl-5.8.7/config.sh-sh3-linux
+++ b/packages/perl/perl-5.8.7/config.sh-sh3-linux
@@ -36,10 +36,10 @@ api_subversion='0'
api_version='8'
api_versionstring='5.8.0'
ar='ar'
-archlib='/usr/lib/perl5/5.8.7/sh4-linux'
-archlibexp='/usr/lib/perl5/5.8.7/sh4-linux'
+archlib='/usr/lib/perl5/5.8.7/sh3-linux'
+archlibexp='/usr/lib/perl5/5.8.7/sh3-linux'
archname64=''
-archname='sh4-linux'
+archname='sh3-linux'
archobjs=''
asctime_r_proto='0'
awk='awk'
@@ -55,11 +55,11 @@ castflags='0'
cat='cat'
cc='gcc'
cccdlflags='-fPIC'
-ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/sh4-linux/CORE'
+ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.7/sh3-linux/CORE'
ccflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='gcc'
-ccsymbols='__GNUC_MINOR__=2 __GNUC_PATCHLEVEL__=3 __GXX_ABI_VERSION=102 __NO_INLINE__=1 __PTRDIFF_TYPE__=int __SH4__=1 __SIZE_TYPE__=unsigned __STDC_HOSTED__=1 __gnu_linux__=1 __linux=1 __linux__=1 __sh__=1 __unix=1 __unix__=1 system=posix'
+ccsymbols='__GNUC_MINOR__=2 __GNUC_PATCHLEVEL__=3 __GXX_ABI_VERSION=102 __NO_INLINE__=1 __PTRDIFF_TYPE__=int __SH3__=1 __SIZE_TYPE__=unsigned __STDC_HOSTED__=1 __gnu_linux__=1 __linux=1 __linux__=1 __sh__=1 __unix=1 __unix__=1 system=posix'
ccversion=''
cf_by='Red Hat, Inc.'
cf_email='Red Hat, Inc.@localhost.localdomain'
@@ -671,7 +671,7 @@ inc_version_list=''
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.8.7/sh4-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.8.7/sh3-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
@@ -681,7 +681,7 @@ installprefix='./install_me_here/usr'
installprefixexp='./install_me_here/usr'
installprivlib='./install_me_here/usr/lib/perl5/5.8.7'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
@@ -760,10 +760,10 @@ modetype='mode_t'
more='more'
multiarch='undef'
mv=''
-myarchname='sh4-linux'
+myarchname='sh3-linux'
mydomain='.localdomain'
myhostname='localhost'
-myuname='linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh4 unknown '
+myuname='linux np51r 2.6.4 #175 fri nov 5 16:49:36 est 2004 sh3 unknown '
n='-n'
need_va_copy='undef'
netdb_hlen_type='size_t'
@@ -873,8 +873,8 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
sig_size='68'
signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.8.7/sh4-linux'
+sitearch='/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.8.7/sh3-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
diff --git a/packages/psmisc/psmisc-21.8/libintl-link.patch b/packages/psmisc/psmisc-21.8/libintl-link.patch
new file mode 100644
index 0000000000..d9cdd90d71
--- /dev/null
+++ b/packages/psmisc/psmisc-21.8/libintl-link.patch
@@ -0,0 +1,29 @@
+uClibc needs to link against an external libintl but it doesn't do this by
+default. The configure script correctly figures out if this is needed, but
+doesn't actually link to the libraries it decides on. This makes it link to
+them if they are needed:
+
+--- psmisc-22.2/src/Makefile.am 2006/06/28 00:14:07 1.1
++++ psmisc-22.2/src/Makefile.am 2006/06/28 00:14:24
+@@ -5,15 +5,19 @@
+
+ oldfuser_SOURCES = oldfuser.c comm.h signals.c signals.h loop.h i18n.h
+
++oldfuser_LDADD = @INTLLIBS@
++
+ fuser_SOURCES = fuser.c comm.h signals.c signals.h i18n.h fuser.h
+
++fuser_LDADD = @INTLLIBS@
++
+ killall_SOURCES = killall.c comm.h signals.c signals.h i18n.h
+
+-killall_LDADD = @SELINUX_LIB@
++killall_LDADD = @SELINUX_LIB@ @INTLLIBS@
+
+ pstree_SOURCES = pstree.c comm.h i18n.h
+
+-pstree_LDADD = @TERMCAP_LIB@ @SELINUX_LIB@
++pstree_LDADD = @TERMCAP_LIB@ @SELINUX_LIB@ @INTLLIBS@
+
+ BUILT_SOURCES = signames.h
+
diff --git a/packages/psmisc/psmisc_21.8.bb b/packages/psmisc/psmisc_21.8.bb
index 4d10633a3f..f7d6828a94 100644
--- a/packages/psmisc/psmisc_21.8.bb
+++ b/packages/psmisc/psmisc_21.8.bb
@@ -3,11 +3,12 @@ DESCRIPTION = "procfs tools"
SECTION = "base"
PRIORITY = "required"
MAINTAINER = "Greg Gilbert <greg@treke.net>"
-DEPENDS = "ncurses"
-PR = "r0"
+DEPENDS = "ncurses virtual/libintl"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/psmisc/psmisc-${PV}.tar.gz \
- file://signames-header-fix.patch;patch=1"
+ file://signames-header-fix.patch;patch=1 \
+ file://libintl-link.patch;patch=1"
S = "${WORKDIR}/psmisc-${PV}"
inherit autotools gettext
diff --git a/packages/pvrusb2-mci/files/.mtn2git_empty b/packages/pvrusb2-mci/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pvrusb2-mci/files/.mtn2git_empty
diff --git a/packages/pvrusb2-mci/files/firmware.hotplug b/packages/pvrusb2-mci/files/firmware.hotplug
new file mode 100755
index 0000000000..40673a7b74
--- /dev/null
+++ b/packages/pvrusb2-mci/files/firmware.hotplug
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# Firmware-specific hotplug policy agent.
+#
+# Kernel firmware hotplug params include:
+#
+# ACTION=%s [add or remove]
+# DEVPATH=%s [in 2.5 kernels, /sys/$DEVPATH]
+# FIRMWARE=%s
+#
+# HISTORY:
+#
+# 24-Jul-2003 Initial version of "new" hotplug agent.
+#
+# $Id: firmware.agent,v 1.3 2004/03/14 15:52:56 ukai Exp $
+#
+
+cd /etc/hotplug.d/firmware
+. ./hotplug.functions
+# DEBUG=yes export DEBUG
+
+# directory of the firmware files
+FIRMWARE_DIR=/lib/firmware
+
+# mountpoint of sysfs
+SYSFS=$(sed -n 's/^.* \([^ ]*\) sysfs .*$/\1/p' /proc/mounts)
+
+# use /proc for 2.4 kernels
+if [ "$SYSFS" = "" ]; then
+ SYSFS=/proc
+fi
+
+#
+# What to do with this firmware hotplug event?
+#
+case "$ACTION" in
+
+add)
+ if [ ! -e $SYSFS/$DEVPATH/loading ]; then
+ sleep 1
+ fi
+
+ if [ -f "$FIRMWARE_DIR/$FIRMWARE" ]; then
+ echo 1 > $SYSFS/$DEVPATH/loading
+ cp "$FIRMWARE_DIR/$FIRMWARE" $SYSFS/$DEVPATH/data
+ echo 0 > $SYSFS/$DEVPATH/loading
+ else
+ echo -1 > $SYSFS/$DEVPATH/loading
+ fi
+
+ ;;
+
+remove)
+ ;;
+
+*)
+ mesg "Firmware '$ACTION' event not supported"
+ exit 1
+ ;;
+
+esac
diff --git a/packages/pvrusb2-mci/files/hotplug.functions b/packages/pvrusb2-mci/files/hotplug.functions
new file mode 100755
index 0000000000..e3cc7e6e7a
--- /dev/null
+++ b/packages/pvrusb2-mci/files/hotplug.functions
@@ -0,0 +1,193 @@
+#
+# Setup and BASH utility functions for use in hotplug agents
+#
+# Most essential parameters are passed from the kernel using
+# environment variables. For more information, see the docs
+# on-line at http://linux-hotplug.sourceforge.net or the
+# sources for each hotplug-aware kernel subsystem.
+#
+# $Id: hotplug.functions,v 1.26 2004/04/01 07:33:32 kroah Exp $
+#
+#
+
+# DEBUG=yes; export DEBUG
+PATH=/bin:/sbin:/usr/sbin:/usr/bin
+
+KERNEL=`uname -r`
+MODULE_DIR=/lib/modules/$KERNEL
+
+HOTPLUG_DIR=/etc/hotplug
+
+if [ -f /etc/sysconfig/hotplug ]; then
+ . /etc/sysconfig/hotplug
+fi
+
+if [ -x /usr/bin/logger ]; then
+ LOGGER=/usr/bin/logger
+elif [ -x /bin/logger ]; then
+ LOGGER=/bin/logger
+else
+ unset LOGGER
+fi
+#
+# for diagnostics
+#
+if [ -t 1 -o -z "$LOGGER" ]; then
+ mesg () {
+ echo "$@"
+ }
+else
+ mesg () {
+ $LOGGER -t $(basename $0)"[$$]" "$@"
+ }
+fi
+
+debug_mesg () {
+ test "$DEBUG" = "" -o "$DEBUG" = no && return
+ mesg "$@"
+}
+
+
+#
+# Not "modprobe --autoclean" ... one driver module can handle many
+# devices. Unloading should be done when no devices are present.
+# Autocleaning happens if none of the devices are open, once any of
+# them gets opened; wrong timing.
+#
+MODPROBE="/sbin/modprobe -s -q"
+#MODPROBE="/sbin/modprobe -vs"
+
+
+####################################################################
+#
+# usage: load_driver type filename description
+#
+# modprobes driver module(s) if appropriate, and optionally
+# invokes a driver-specific setup script (or user-mode driver).
+#
+# the "modules.*map" format file is guaranteed to exist
+#
+load_drivers ()
+{
+ local LOADED TYPE FILENAME DESCRIPTION LISTER
+ DRIVERS=""
+
+ # make this routine more readable
+ TYPE=$1
+ FILENAME=$2
+ DESCRIPTION=$3
+
+ # should we use usbmodules, pcimodules? not on 2.5+, because sysfs
+ # ought to expose the data we need to find all candidate drivers.
+ # (on 2.5.48 it does for usb; but maybe not yet for pci.)
+ case "$KERNEL" in
+ 2.2*|2.3*|2.4*) LISTER=`which ${TYPE}modules` ;;
+ *) LISTER="" ;;
+ esac
+
+ if [ "$LISTER" != "" ]; then
+ # lister programs MIGHT be preferable to parsing from shell scripts:
+ # - usbmodules used for (a) multi-interface devices, (b) coldplug
+ # - pcimodules used only for coldplug
+ case $TYPE in
+ usb)
+ # "usbutils-0.8" (or later) is needed in $PATH
+ # only works if we have usbfs
+ # ... reads more descriptors than are passed in env
+ # ... doesn't handle comment syntax either
+ if [ "$DEVICE" = "" -o ! -f "$DEVICE" ]; then
+ LISTER=
+ else
+ DRIVERS=`$LISTER --mapfile $FILENAME --device $DEVICE`
+ fi ;;
+
+ pci)
+ debug_mesg "pcimodules is scanning more than $PCI_SLOT ..."
+ DRIVERS=`$LISTER`
+ ;;
+ esac
+ fi
+
+ # try parsing by shell scripts if no luck yet
+ if [ "$DRIVERS" = "" ]; then
+ ${TYPE}_map_modules < $FILENAME
+ fi
+
+ # FIXME remove dups and blacklisted modules from $DRIVERS here
+
+ if [ "$DRIVERS" = "" ]; then
+ return
+ fi
+
+ # Note that DRIVERS aren't all going to be modules.
+ # For USB, some user-mode drivers or setup scripts may be listed.
+ debug_mesg Setup $DRIVERS for $DESCRIPTION
+
+ # either kernel or user mode drivers may need to be set up
+ for MODULE in $DRIVERS
+ do
+ # maybe driver modules need loading
+ LOADED=false
+ if ! lsmod | grep -q "^$(echo $MODULE|sed -e 's/-/_/g') " > /dev/null 2>&1; then
+ if grep -q "^$MODULE\$" $HOTPLUG_DIR/blacklist \
+ >/dev/null 2>&1; then
+ debug_mesg "... blacklisted module: $MODULE"
+ continue
+ fi
+
+ # statically linked modules aren't shown by 'lsmod',
+ # and user mode drivers will ONLY have a setup script;
+ # it's not an error if a module doesn't exist or won't load.
+ if $MODPROBE -n $MODULE >/dev/null 2>&1 &&
+ ! $MODPROBE $MODULE >/dev/null 2>&1 ; then
+ mesg "... can't load module $MODULE"
+ else
+ # /etc/modules.conf may have set non-default module
+ # parameters ... handle per-device parameters in apps
+ # (ioctls etc) not in setup scripts or modules.conf
+ LOADED=true
+ fi
+ else
+ # This module is already loaded
+ LOADED=true
+ fi
+
+ # always run setup scripts after any matching kernel code has had
+ # a chance to do its thing, no matter whether it was dynamically
+ # or statically linked, or if there is only a user mode driver.
+ # the script might re-enumerate usb devices after firmware download,
+ # giving kernel code another chance.
+ if [ -x $HOTPLUG_DIR/$TYPE/$MODULE ]; then
+ debug_mesg Module setup $MODULE for $DESCRIPTION
+ $HOTPLUG_DIR/$TYPE/$MODULE
+ LOADED=true
+ fi
+
+ if [ "$LOADED" = "false" ]; then
+ mesg "missing kernel or user mode driver $MODULE "
+ fi
+ if echo "$MODULE" | grep -q "usb-storage" > /dev/null 2>&1 ; then
+ [ -x /usr/sbin/updfstab ] && /usr/sbin/updfstab
+ fi
+ done
+}
+
+####################################################################
+#
+# usage: log_to_stdout filename
+#
+# writes a copy of the current hotplug event to stdout.
+# add buffering, to avoid interleaving reports!
+#
+log_to_stdout ()
+{
+ if [ -x /bin/date ]; then
+ echo "HOTPLUG_TIME='$(/bin/date)'"
+ fi
+
+ env | egrep -v '^PATH=|^PWD=|^_=|^OLDPWD=|^SHLVL=|^HOME='
+ echo ''
+ # empty line terminates events
+}
+
+# vim:syntax=sh
diff --git a/packages/qt/qt4-x11-free-4.1.1/configurable-cpu-extensions.patch b/packages/qt/qt4-x11-free-4.1.1/configurable-cpu-extensions.patch
deleted file mode 100644
index ab943db1ff..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/configurable-cpu-extensions.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/configure~configurable-cpu-extensions
-+++ qt-x11-opensource-src-4.1.1/configure
-@@ -564,6 +564,12 @@
- VAL=$1
- fi
- ;;
-+ -nosse)
-+ CFG_SSE="no"
-+ ;;
-+ -sse)
-+ CFG_SSE="yes"
-+ ;;
- -iwmmxt)
- CFG_IWMMXT="yes"
- ;;
-@@ -1759,13 +1765,6 @@
- fi
- fi
-
--# detect sse support
--if $unixtests/sse.test $XQMAKESPEC $OPT_VERBOSE; then
-- CFG_HAVE_SSE=no
--else
-- CFG_HAVE_SSE=yes
--fi
--
- # check iwmmxt support
- if [ "$CFG_IWMMXT" = "yes" ]; then
- if ! $unixtests/iwmmxt.test $XQMAKESPEC $OPT_VERBOSE; then
diff --git a/packages/qt/qt4-x11-free-4.1.1/cross-compile.patch b/packages/qt/qt4-x11-free-4.1.1/cross-compile.patch
deleted file mode 100644
index 7c8665c9c1..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/cross-compile.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/configure~cross-compile
-+++ qt-x11-opensource-src-4.1.1/configure
-@@ -534,7 +534,7 @@
- UNKNOWN_ARG=yes
- fi
- ;;
-- -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk)
-+ -prefix|-docdir|-headerdir|-plugindir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-demosdir|-depths|-make|-nomake|-platform|-xplatform|-buildkey|-sdk|-crossarch)
- VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
- shift
- VAL=$1
-@@ -845,6 +845,9 @@
- xplatform)
- XPLATFORM="$VAL"
- ;;
-+ crossarch)
-+ CROSSARCH="$VAL"
-+ ;;
- debug-and-release)
- if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
- CFG_DEBUG_RELEASE="$VAL"
-@@ -1698,131 +1701,7 @@
- echo "Determining system architecture... ($UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_MACHINE)"
- fi
-
--if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then
-- case "$CFG_EMBEDDED" in
-- x86)
-- ARCH=i386
-- ;;
-- x86_64)
-- ARCH=x86_64
-- ;;
-- ipaq|sharp)
-- ARCH=arm
-- ;;
-- *)
-- ARCH="$CFG_EMBEDDED"
-- ;;
-- esac
--else
-- case "$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_MACHINE" in
-- IRIX*:*:*)
-- ARCH=`uname -p`
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " SGI ($ARCH)"
-- fi
-- ;;
-- SunOS:5*:*)
-- case "$UNAME_MACHINE" in
-- sun4u)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " Sun SPARC (sparc)"
-- fi
-- ARCH=sparc
-- ;;
-- i86pc)
-- case "$PLATFORM" in
-- *-64)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 64-bit AMD 80x86 (x86_64)"
-- fi
-- ARCH=x86_64
-- ;;
-- *)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32-bit Intel 80x86 (i386)"
-- fi
-- ARCH=i386
-- ;;
-- esac
-- esac
-- ;;
-- Darwin:*:*)
-- case "$UNAME_MACHINE" in
-- Power?Macintosh)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32-bit Apple PowerPC (powerpc)"
-- fi
-- ;;
-- x86)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32-bit Intel 80x86 (i386)"
-- fi
-- ;;
-- esac
-- ARCH=macosx
-- ;;
-- AIX:*:00????????00)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 64-bit IBM PowerPC (powerpc)"
-- fi
-- ARCH=powerpc
-- ;;
-- HP-UX:*:9000*)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " HP PA-RISC (parisc)"
-- fi
-- ARCH=parisc
-- ;;
-- *:*:i?86)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32-bit Intel 80x86 (i386)"
-- fi
-- ARCH=i386
-- ;;
-- *:*:x86_64|*:*:amd64)
-- if [ "$PLATFORM" = "linux-g++-32" ]; then
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32 bit on 64-bit AMD 80x86 (i386)"
-- fi
-- ARCH=i386
-- else
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 64-bit AMD 80x86 (x86_64)"
-- fi
-- ARCH=x86_64
-- fi
-- ;;
-- *:*:ppc)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " 32-bit PowerPC (powerpc)"
-- fi
-- ARCH=powerpc
-- ;;
-- *:*:s390*)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " IBM S/390 (s390)"
-- fi
-- ARCH=s390
-- ;;
-- *:*:*)
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " Trying '$UNAME_MACHINE'..."
-- fi
-- ARCH="$UNAME_MACHINE"
-- ;;
-- esac
--fi
--
--if [ -d "$relpath/src/corelib/arch/$ARCH" ]; then
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " '$ARCH' is supported"
-- fi
--else
-- if [ "$OPT_VERBOSE" = "yes" ]; then
-- echo " '$ARCH' is unsupported, using 'generic'"
-- fi
-- ARCH=generic
--fi
-+ARCH="$CROSSARCH"
-
- if [ "$OPT_VERBOSE" = "yes" ]; then
- echo "System architecture: '$ARCH'"
diff --git a/packages/qt/qt4-x11-free-4.1.1/fix-mkspecs.patch b/packages/qt/qt4-x11-free-4.1.1/fix-mkspecs.patch
deleted file mode 100644
index e927df9c7d..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/fix-mkspecs.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/mkspecs/linux-g++/qmake.conf~fix-qmakespec
-+++ qt-x11-opensource-src-4.1.1/mkspecs/linux-g++/qmake.conf
-@@ -8,7 +8,7 @@
- QT += core gui
- QMAKE_INCREMENTAL_STYLE = sublib
-
--QMAKE_CC = gcc
-+QMAKE_CC = $(OE_QMAKE_CC)
- QMAKE_LEX = flex
- QMAKE_LEXFLAGS =
- QMAKE_YACC = yacc
-@@ -16,19 +16,19 @@
- QMAKE_YACCFLAGS_MANGLE = -p $base -b $base
- QMAKE_YACC_HEADER = $base.tab.h
- QMAKE_YACC_SOURCE = $base.tab.c
--QMAKE_CFLAGS = -pipe
-+QMAKE_CFLAGS = -pipe $(OE_QMAKE_CFLAGS)
- QMAKE_CFLAGS_DEPS = -M
- QMAKE_CFLAGS_WARN_ON = -Wall -W
- QMAKE_CFLAGS_WARN_OFF = -w
--QMAKE_CFLAGS_RELEASE = -O2
-+QMAKE_CFLAGS_RELEASE = -O2
- QMAKE_CFLAGS_DEBUG = -g
- QMAKE_CFLAGS_SHLIB = -fPIC
- QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
- QMAKE_CFLAGS_THREAD = -D_REENTRANT
- QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
-
--QMAKE_CXX = g++
--QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
-+QMAKE_CXX = $(OE_QMAKE_CXX)
-+QMAKE_CXXFLAGS = $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
- QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
- QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
- QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
-@@ -41,37 +41,37 @@
-
- QMAKE_INCDIR =
- QMAKE_LIBDIR =
--QMAKE_INCDIR_X11 = /usr/X11R6/include
--QMAKE_LIBDIR_X11 = /usr/X11R6/lib
--QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
--QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
--QMAKE_INCDIR_OPENGL = /usr/X11R6/include
--QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
-+QMAKE_INCDIR_X11 =
-+QMAKE_LIBDIR_X11 =
-+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
-+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
-+QMAKE_INCDIR_OPENGL =
-+QMAKE_LIBDIR_OPENGL =
-
--QMAKE_LINK = g++
--QMAKE_LINK_SHLIB = g++
--QMAKE_LFLAGS =
-+QMAKE_LINK = $(OE_QMAKE_LINK)
-+QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
-+QMAKE_LFLAGS = $(OE_QMAKE_LDFLAGS)
- QMAKE_LFLAGS_RELEASE =
- QMAKE_LFLAGS_DEBUG =
- QMAKE_LFLAGS_SHLIB = -shared
- QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
- QMAKE_LFLAGS_SONAME = -Wl,-soname,
- QMAKE_LFLAGS_THREAD =
--QMAKE_RPATH = -Wl,-rpath,
-+QMAKE_RPATH = -Wl,-rpath-link,
-
- QMAKE_LIBS =
- QMAKE_LIBS_DYNLOAD = -ldl
--QMAKE_LIBS_X11 = -lXext -lX11 -lm
--QMAKE_LIBS_X11SM = -lSM -lICE
-+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
-+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
- QMAKE_LIBS_NIS = -lnsl
- QMAKE_LIBS_OPENGL = -lGLU -lGL
- QMAKE_LIBS_OPENGL_QT = -lGL
- QMAKE_LIBS_THREAD = -lpthread
-
--QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
--QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
-+QMAKE_MOC = $(OE_QMAKE_MOC)
-+QMAKE_UIC = $(OE_QMAKE_UIC)
-
--QMAKE_AR = ar cqs
-+QMAKE_AR = $(OE_QMAKE_AR) cqs
- QMAKE_RANLIB =
-
- QMAKE_TAR = tar -cf
-@@ -83,7 +83,7 @@
- QMAKE_MOVE = mv -f
- QMAKE_DEL_FILE = rm -f
- QMAKE_DEL_DIR = rmdir
--QMAKE_STRIP = strip
-+QMAKE_STRIP = $(OE_QMAKE_STRIP)
- QMAKE_STRIPFLAGS_LIB += --strip-unneeded
- QMAKE_CHK_DIR_EXISTS = test -d
- QMAKE_MKDIR = mkdir -p
diff --git a/packages/qt/qt4-x11-free-4.1.1/fix-resinit-declaration.patch b/packages/qt/qt4-x11-free-4.1.1/fix-resinit-declaration.patch
deleted file mode 100644
index fcd5de6f97..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/fix-resinit-declaration.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/src/qt3support/network/q3dns.cpp~fix-resinit-declaration
-+++ qt-x11-opensource-src-4.1.1/src/qt3support/network/q3dns.cpp
-@@ -30,7 +30,7 @@
- # include <netinet/in.h>
- # include <arpa/nameser.h>
- # include <resolv.h>
--extern "C" int res_init();
-+extern "C" int res_init() throw();
- #endif
-
- // POSIX Large File Support redefines open -> open64
diff --git a/packages/qt/qt4-x11-free-4.1.1/gcc4_1.patch b/packages/qt/qt4-x11-free-4.1.1/gcc4_1.patch
deleted file mode 100644
index 392aaf4f5f..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/gcc4_1.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/src/corelib/tools/qchar.h~gcc4_1.patch
-+++ qt-x11-opensource-src-4.1.1/src/corelib/tools/qchar.h
-@@ -219,7 +219,7 @@
- inline const char toLatin1() const;
- inline const ushort unicode() const { return ucs; }
- #ifdef Q_NO_PACKED_REFERENCE
-- inline ushort &unicode() { return *(&ucs); }
-+ inline ushort &unicode() { return *((ushort*)&ucs); }
- #else
- inline ushort &unicode() { return ucs; }
- #endif
---- qt-x11-opensource-src-4.1.1/src/gui/kernel/qapplication_x11.cpp~gcc4_1.patch
-+++ qt-x11-opensource-src-4.1.1/src/gui/kernel/qapplication_x11.cpp
-@@ -1193,6 +1193,18 @@
- }
- }
-
-+static void getXDefault(const char *group, const char *key, float *val)
-+{
-+ char *str = XGetDefault(X11->display, group, key);
-+ if (str) {
-+ char *end = 0;
-+ float v = strtod(str, &end);
-+ if (str != end)
-+ *val = v;
-+ }
-+}
-+
-+
- static void getXDefault(const char *group, const char *key, bool *val)
- {
- char *str = XGetDefault(X11->display, group, key);
---- qt-x11-opensource-src-4.1.1/src/corelib/global/qglobal.h~gcc4_1.patch
-+++ qt-x11-opensource-src-4.1.1/src/corelib/global/qglobal.h
-@@ -720,8 +720,8 @@
-
- #if defined(QT_COORD_TYPE)
- typedef QT_COORD_TYPE qreal;
--#elif defined(__arm__)
--typedef float qreal;
-+//#elif defined(__arm__)
-+//typedef float qreal;
- #else
- typedef double qreal;
- #endif
diff --git a/packages/qt/qt4-x11-free-4.1.1/no-qmake.patch b/packages/qt/qt4-x11-free-4.1.1/no-qmake.patch
deleted file mode 100644
index 324f44303a..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/no-qmake.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/configure~no-qmake
-+++ qt-x11-opensource-src-4.1.1/configure
-@@ -2548,7 +2548,7 @@
- fi
-
- # build qmake
--if true; then ###[ '!' -f "$outpath/bin/qmake" ];
-+if false; then ###[ '!' -f "$outpath/bin/qmake" ];
- echo "Creating qmake. Please wait..."
-
- OLD_QCONFIG_H=
diff --git a/packages/qt/qt4-x11-free-4.1.1/no-tools.patch b/packages/qt/qt4-x11-free-4.1.1/no-tools.patch
deleted file mode 100644
index 2bda49c9c5..0000000000
--- a/packages/qt/qt4-x11-free-4.1.1/no-tools.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- qt-x11-opensource-src-4.1.1/src/src.pro~no-tools
-+++ qt-x11-opensource-src-4.1.1/src/src.pro
-@@ -3,7 +3,7 @@
-
- # this order is important
- win32:SUBDIRS += winmain
--SUBDIRS += tools/moc tools/rcc tools/uic corelib xml gui sql network svg
-+SUBDIRS += corelib xml gui sql network svg
- !embedded:contains(QT_CONFIG, opengl): SUBDIRS += opengl
- contains(QT_CONFIG, qt3support): SUBDIRS += qt3support
- !cross_compile {
diff --git a/packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch b/packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch
new file mode 100644
index 0000000000..93fc52d055
--- /dev/null
+++ b/packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch
@@ -0,0 +1,16 @@
+
+#
+# Signed off by Michael 'Mickey' Lauer <mickey@Vanille.de>
+#
+
+--- qt-x11-opensource-src-4.1.2/src/corelib/arch/arm/arch/qatomic.h~fix-asm-constraints
++++ qt-x11-opensource-src-4.1.2/src/corelib/arch/arm/arch/qatomic.h
+@@ -32,7 +32,7 @@
+ {
+ register int ret;
+ asm volatile("swpb %0,%1,[%2]"
+- : "=r"(ret)
++ : "&=r"(ret)
+ : "r"(newval), "r"(ptr)
+ : "cc", "memory");
+ return ret;
diff --git a/packages/qt/qt4-x11-free_4.1.1.bb b/packages/qt/qt4-x11-free_4.1.1.bb
deleted file mode 100644
index 7a4874c83a..0000000000
--- a/packages/qt/qt4-x11-free_4.1.1.bb
+++ /dev/null
@@ -1,138 +0,0 @@
-DESCRIPTION = "Qt/X11 Version ${PV}"
-SECTION = "x11/libs"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-LICENSE = "GPL QPL"
-MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
-DEPENDS = "uicmoc4-native qmake2-native freetype jpeg libx11 xft libxext libxrender libxrandr libxcursor"
-PROVIDES = "qt4x11"
-PR = "r5"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
- file://cross-compile.patch;patch=1 \
- file://fix-resinit-declaration.patch;patch=1 \
- file://no-tools.patch;patch=1 \
- file://no-qmake.patch;patch=1 \
- file://gcc4_1.patch;patch=1 \
- file://configurable-cpu-extensions.patch;patch=1 \
- file://fix-mkspecs.patch;patch=1"
-S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
-
-PARALLEL_MAKE = ""
-
-inherit qmake-base qt4x11 pkgconfig
-
-export QTDIR = "${S}"
-STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
-export ARCH = "${TARGET_ARCH}"
-export ARCH_i686 = "x86"
-EXTRA_OEMAKE = "-e"
-
-# FIXME:
-# * add missing options
-QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
- -no-tablet -no-xkb -no-nis -no-cups -no-opengl \
- -nosse \
- -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
- -verbose -stl -no-accessibility"
-
-EXTRA_ENV = 'QMAKE="${STAGING_BINDIR}/qmake2 -after DEFINES+=QT_NO_XIM INCPATH+=${STAGING_INCDIR} \
- INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
- QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
- AR="${TARGET_PREFIX}ar cqs" \
- MOC="${STAGING_BINDIR}/moc4" UIC="${STAGING_BINDIR}/uic4" MAKE="make -e"'
-
-do_configure() {
- echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
- echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
- unset QMAKESPEC
- #export QMAKESPEC="linux-oe-g++"
- ln -sf ${STAGING_BINDIR}/qmake2 bin/qmake
- #rm -rf ./mkspecs
- #ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
- echo yes | ./configure -prefix / -platform ${TARGET_OS}-g++ -crossarch ${ARCH} ${QT_CONFIG_FLAGS} -fast \
- -L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
-}
-
-# FIXME: Might want to compile the cross tools for the -dev packages as well...
-do_compile() {
- unset CFLAGS CXXFLAGS
- install -m 0755 ${STAGING_BINDIR}/rcc4 ${S}/bin/rcc
- install -m 0755 ${STAGING_BINDIR}/moc4 ${S}/bin/moc
- install -m 0755 ${STAGING_BINDIR}/uic4 ${S}/bin/uic
-
- oe_runmake ${EXTRA_ENV}
-}
-
-PARTS = "3Support Core Designer DesignerComponents Gui Network Sql Svg Test Xml"
-
-do_stage() {
- oe_runmake install INSTALL_ROOT=/
- install -m 0755 ${STAGING_BINDIR}/rcc4 ${STAGING_QT_DIR}/bin/rcc
- install -m 0755 ${STAGING_BINDIR}/moc4 ${STAGING_QT_DIR}/bin/moc
- install -m 0755 ${STAGING_BINDIR}/uic4 ${STAGING_QT_DIR}/bin/uic
-
-}
-
-# FIXME: Might want to call oe_runmake install INSTALL_ROOT=${D}/${prefix} as well...
-# FIXME: Might want to install everything into ${libdir}/qt4/* to match the usual packing...
-do_install() {
- install -d ${D}${libdir}
- install -d ${D}${bindir}
- for part in ${PARTS}
- do
- oe_libinstall -so -C lib libQt$part ${D}${libdir}
- done
- oe_libinstall -a -C lib libQtAssistantClient ${STAGING_QT_DIR}
- cp -pPR include/* ${D}${incdir}
- cp -pPR plugins ${D}${libdir}
- cp -pPR bin/* ${D}${bindir}
-
- install -d ${D}${bindir}/qt4-examples
- for binary in `find examples -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-examples/
- done
- install -d ${D}${bindir}/qt4-demos
- for binary in `find demos -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-demos/
- done
-}
-
-PACKAGES =+ "libqtcore4 libqtgui4 libqtnetwork4 libqtsql4 libqtsvg4 libqttest4 libqtxml4 \
- libqtdesigner4 libqtdesignercomponents4 libqt3support4 \
- qt4-assistant qt4-common qt4-designer qt4-demos qt4-examples qt4-linguist \
- qt4-plugins-accessible qt4-plugins-codecs qt4-plugins-designer qt4-plugins-imageformats qt4-plugins-sqldrivers"
-
-ALLOW_EMPTY = "1"
-FILES_${PN} = ""
-RDEPENDS_${PN} = "${PACKAGES}"
-
-FILES_libqtcore4 = "${libdir}/libQtCore.so*"
-FILES_libqtgui4 = "${libdir}/libQtGui.so*"
-FILES_libqtnetwork4 = "${libdir}/libQtNetwork.so*"
-FILES_libqtsql4 = "${libdir}/libQtSql.so*"
-FILES_libqtsvg4 = "${libdir}/libQtSvg.so*"
-FILES_libqttest4 = "${libdir}/libQtTest.so*"
-FILES_libqtxml4 = "${libdir}/libQtXml.so*"
-FILES_libqtdesigner4 = "${libdir}/libQtDesigner.so*"
-FILES_libqtdesignercomponents4 = "${libdir}/libQtDesignerComponents.so*"
-FILES_libqt3support4 = "${libdir}/libQt3Support.so*"
-
-FILES_qt4-plugins-accessible = "${libdir}/plugins/accessible/*.so"
-FILES_qt4-plugins-codecs = "${libdir}/plugins/codecs/*.so"
-FILES_qt4-plugins-designer = "${libdir}/plugins/designer/*.so"
-FILES_qt4-plugins-imageformats = "${libdir}/plugins/imageformats/*.so"
-FILES_qt4-plugins-sqldrivers = "${libdir}/plugins/sqldrivers/*.so"
-
-FILES_qt4-assistant = "${bindir}/*assistant*"
-FILES_qt4-designer = "${bindir}/*designer*"
-FILES_qt4-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
-
-FILES_qt4-common = "${bindir}/qtconfig"
-FILES_qt4-examples = "${bindir}/qt4-examples/*"
-FILES_qt4-demos = "${bindir}/qtdemo ${bindir}/qt4-demos/*"
-
-FILES_${PN}-dev += "${bindir}/rcc ${bindir}/uic* ${bindir}/moc ${bindir}/qmake ${bindir}/syncqt \
- ${bindir}/qt3to4 ${bindir}/findtr"
diff --git a/packages/qt/qt4-x11-free_4.1.2.bb b/packages/qt/qt4-x11-free_4.1.2.bb
index f769047d71..9bff5f1c5c 100644
--- a/packages/qt/qt4-x11-free_4.1.2.bb
+++ b/packages/qt/qt4-x11-free_4.1.2.bb
@@ -6,7 +6,7 @@ LICENSE = "GPL QPL"
MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
DEPENDS = "uicmoc4-native qmake2-native freetype jpeg libx11 xft libxext libxrender libxrandr libxcursor"
PROVIDES = "qt4x11"
-PR = "r0"
+PR = "r1"
SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
file://cross-compile.patch;patch=1 \
@@ -15,7 +15,8 @@ SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz
file://no-qmake.patch;patch=1 \
file://gcc4_1.patch;patch=1 \
file://configurable-cpu-extensions.patch;patch=1 \
- file://fix-mkspecs.patch;patch=1"
+ file://fix-mkspecs.patch;patch=1 \
+ file://fix-asm-constraints.patch;patch=1"
S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
PARALLEL_MAKE = ""
@@ -24,10 +25,23 @@ inherit qmake-base qt4x11 pkgconfig
export QTDIR = "${S}"
STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
-export ARCH = "${TARGET_ARCH}"
-export ARCH_i686 = "x86"
EXTRA_OEMAKE = "-e"
+def qt_arch(d):
+ import bb, re
+ arch = bb.data.getVar('TARGET_ARCH', d, 1)
+ if re.match("^i.86$", arch):
+ arch = "x86"
+ elif re.match("^arm.*", arch):
+ arch = "arm"
+ elif arch == "x86_64":
+ arch = "x86"
+ elif arch == "mipsel":
+ arch = "mips"
+ return arch
+
+QT_ARCH := "${@qt_arch(d)}"
+
# FIXME:
# * add missing options
QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
@@ -46,11 +60,12 @@ do_configure() {
echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
unset QMAKESPEC
- #export QMAKESPEC="linux-oe-g++"
ln -sf ${STAGING_BINDIR}/qmake2 bin/qmake
+ ln -sf ./linux-g++ mkspecs/linux-gnueabi-g++
+ #export QMAKESPEC="linux-oe-g++"
#rm -rf ./mkspecs
#ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
- echo yes | ./configure -prefix / -platform ${TARGET_OS}-g++ -crossarch ${ARCH} ${QT_CONFIG_FLAGS} -fast \
+ echo yes | ./configure -prefix / -platform ${TARGET_OS}-g++ -crossarch ${QT_ARCH} ${QT_CONFIG_FLAGS} -fast \
-L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
}
diff --git a/packages/qte/qte-2.3.10/suspend-resume-hooks.patch b/packages/qte/qte-2.3.10/suspend-resume-hooks.patch
index 34e6ba2133..c6e9f16e9a 100644
--- a/packages/qte/qte-2.3.10/suspend-resume-hooks.patch
+++ b/packages/qte/qte-2.3.10/suspend-resume-hooks.patch
@@ -1,12 +1,10 @@
-Suspend/Resume hooks for QScreen and usage from QApplication
-Manuel Teira <manuel.teira@telefonica.net>
#
# Patch managed by http://www.holgerschurig.de/patcher.html
#
---- qt-2.3.10/src/kernel/qgfx_qws.h~suspend-resume-hooks
-+++ qt-2.3.10/src/kernel/qgfx_qws.h
+--- qt-2.3.10.foo/src/kernel/qgfx_qws.h~suspend-resume-hooks
++++ qt-2.3.10.foo/src/kernel/qgfx_qws.h
@@ -192,6 +192,8 @@
virtual int pixmapLinestepAlignment() { return 64; }
@@ -16,8 +14,8 @@ Manuel Teira <manuel.teira@telefonica.net>
virtual bool onCard(unsigned char *) const;
virtual bool onCard(unsigned char *, ulong& out_offset) const;
---- qt-2.3.10/src/kernel/qapplication_qws.cpp~suspend-resume-hooks
-+++ qt-2.3.10/src/kernel/qapplication_qws.cpp
+--- qt-2.3.10.foo/src/kernel/qapplication_qws.cpp~suspend-resume-hooks
++++ qt-2.3.10.foo/src/kernel/qapplication_qws.cpp
@@ -480,6 +480,7 @@
int region_offset_window;
#ifndef QT_NO_COP
@@ -35,7 +33,7 @@ Manuel Teira <manuel.teira@telefonica.net>
queue.append(e);
}
#endif
-@@ -851,6 +852,26 @@
+@@ -851,6 +852,42 @@
}
}
@@ -53,6 +51,22 @@ Manuel Teira <manuel.teira@telefonica.net>
+ if ( e->message.data() == QCString( "returnFromSuspend()" ) ) {
+ if ( qt_screen ) qt_screen->prepareToResume();
+ delete e;
++ QWidgetList *list = QApplication::topLevelWidgets();
++ if ( list ) {
++ QWidgetListIt it( *list );
++ QWidget * w;
++ while ( (w=it.current()) != 0 ) {
++ ++it;
++ if ( !w->testWFlags(Qt::WType_Desktop) ) {
++ QETWidget *etw = (QETWidget*)w;
++ if ( etw->isVisible() ) {
++ etw->repaintHierarchy( etw->geometry(), TRUE );
++ etw->repaintDecoration( qApp->desktop()->rect(), TRUE );
++ }
++ }
++ }
++ delete list;
++ }
+ return TRUE;
+ }
+ return FALSE;
diff --git a/packages/qte/qte-mt-static_2.3.10.bb b/packages/qte/qte-mt-static_2.3.10.bb
index 4f2c0f945b..a71b2af103 100644
--- a/packages/qte/qte-mt-static_2.3.10.bb
+++ b/packages/qte/qte-mt-static_2.3.10.bb
@@ -1,5 +1,5 @@
require qte-common_${PV}.inc
-PR = "r2"
+PR = "r3"
EXTRA_OECONF += "-static"
diff --git a/packages/qte/qte-mt_2.3.10.bb b/packages/qte/qte-mt_2.3.10.bb
index 90e84fe38d..95a67d2ef4 100644
--- a/packages/qte/qte-mt_2.3.10.bb
+++ b/packages/qte/qte-mt_2.3.10.bb
@@ -1,5 +1,5 @@
require qte-common_${PV}.inc
-PR = "r2"
+PR = "r3"
EXTRA_OECONF += "-thread"
diff --git a/packages/qte/qte_2.3.10.bb b/packages/qte/qte_2.3.10.bb
index b1c4616f22..ed684a00c7 100644
--- a/packages/qte/qte_2.3.10.bb
+++ b/packages/qte/qte_2.3.10.bb
@@ -1,3 +1,3 @@
require qte-common_${PV}.inc
-PR = "r43"
+PR = "r44"
diff --git a/packages/radlib/files/.mtn2git_empty b/packages/radlib/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/radlib/files/.mtn2git_empty
diff --git a/packages/radlib/files/Makefile.am.patch b/packages/radlib/files/Makefile.am.patch
new file mode 100644
index 0000000000..e1e0e47c2c
--- /dev/null
+++ b/packages/radlib/files/Makefile.am.patch
@@ -0,0 +1,24 @@
+--- radlib-2.6.2/src/Makefile.am.orig 2006-07-01 18:56:09.000000000 +0200
++++ radlib-2.6.2/src/Makefile.am 2006-07-01 18:56:48.000000000 +0200
+@@ -14,8 +14,8 @@
+
+ if MYSQL
+ MY_INCLUDES = \
+- -I$(prefix)/include/mysql \
+- -I/usr/include/mysql
++ -I$(prefix)/include/mysql
++
+ MY_SOURCES = \
+ $(top_srcdir)/database/mysql/my_database.c \
+ $(top_srcdir)/src/raddatabase.c
+@@ -24,8 +24,8 @@
+ endif
+ if PGRESQL
+ PG_INCLUDES = \
+- -I$(prefix)/include \
+- -I/usr/include
++ -I$(prefix)/include
++
+ PG_SOURCES = \
+ $(top_srcdir)/database/postgresql/pg_database.c \
+ $(top_srcdir)/src/raddatabase.c
diff --git a/packages/radlib/radlib-common.inc b/packages/radlib/radlib-common.inc
index 528515b2cd..ba0f6db019 100644
--- a/packages/radlib/radlib-common.inc
+++ b/packages/radlib/radlib-common.inc
@@ -4,7 +4,8 @@ DESCRIPTION = "radlib is a rapid application development library for unix interp
MAINTAINER = "Mark Teel (mark@teel.ws)"
HOMEPAGE = "http://www.radlib.teel.ws/"
-SRC_URI = "${SOURCEFORGE_MIRROR}/radlib/radlib-${PV}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/radlib/radlib-${PV}.tar.gz \
+ file://Makefile.am.patch;patch=1"
S = "${WORKDIR}/radlib-${PV}"
diff --git a/packages/radlib/radlib-mysql_2.6.2.bb b/packages/radlib/radlib-mysql_2.6.2.bb
index 93375c8300..61b5b8c5ef 100644
--- a/packages/radlib/radlib-mysql_2.6.2.bb
+++ b/packages/radlib/radlib-mysql_2.6.2.bb
@@ -1,3 +1,3 @@
include radlib-common.inc
include radlib-mysql.inc
-PR = "r0"
+PR = "r1"
diff --git a/packages/radlib/radlib_2.6.2.bb b/packages/radlib/radlib_2.6.2.bb
index be5f2d0257..a123adc785 100644
--- a/packages/radlib/radlib_2.6.2.bb
+++ b/packages/radlib/radlib_2.6.2.bb
@@ -1,3 +1,3 @@
include radlib-common.inc
include radlib.inc
-PR = "r0"
+PR = "r1"
diff --git a/packages/radlib/x b/packages/radlib/x
new file mode 100644
index 0000000000..c27c3cae43
--- /dev/null
+++ b/packages/radlib/x
@@ -0,0 +1 @@
+ file://Makefile.am.patch;patch=1"
diff --git a/packages/reiser4progs/files/key_large.c.patch b/packages/reiser4progs/files/key_large.c.patch
new file mode 100644
index 0000000000..11fc694ebd
--- /dev/null
+++ b/packages/reiser4progs/files/key_large.c.patch
@@ -0,0 +1,20 @@
+--- ./plugin/key/key_large/key_large.c.orig 2006-07-01 16:22:38.000000000 +0200
++++ ./plugin/key/key_large/key_large.c 2006-07-01 16:23:06.000000000 +0200
+@@ -266,7 +266,7 @@
+ ordering |= HASHED_NAME_MASK;
+
+ offset = plug_call(hash->o.hash_ops, build,
+- name + INLINE_CHARS,
++ (unsigned char *)name + INLINE_CHARS,
+ len - INLINE_CHARS);
+ }
+
+@@ -382,7 +382,7 @@
+ .get_name = key_large_get_name
+ };
+
+-static reiser4_plug_t key_large_plug = {
++reiser4_plug_t key_large_plug = {
+ .cl = class_init,
+ .id = {KEY_LARGE_ID, 0, KEY_PLUG_TYPE},
+ #ifndef ENABLE_MINIMAL
diff --git a/packages/reiser4progs/files/key_short.c.patch b/packages/reiser4progs/files/key_short.c.patch
new file mode 100644
index 0000000000..0c5bea9ee2
--- /dev/null
+++ b/packages/reiser4progs/files/key_short.c.patch
@@ -0,0 +1,20 @@
+--- x/plugin/key/key_short/key_short.c.orig 2006-07-01 16:14:46.000000000 +0200
++++ x/plugin/key/key_short/key_short.c 2006-07-01 16:16:50.000000000 +0200
+@@ -248,7 +248,7 @@
+ objectid |= HASHED_NAME_MASK;
+
+ offset = plug_call(hash->o.hash_ops, build,
+- name + OBJECTID_CHARS,
++ (unsigned char*)name + OBJECTID_CHARS,
+ len - OBJECTID_CHARS);
+ }
+
+@@ -367,7 +367,7 @@
+ .get_name = key_short_get_name
+ };
+
+-static reiser4_plug_t key_short_plug = {
++reiser4_plug_t key_short_plug = {
+ .cl = class_init,
+ .id = {KEY_SHORT_ID, 0, KEY_PLUG_TYPE},
+ #ifndef ENABLE_MINIMAL
diff --git a/packages/reiser4progs/files/oid40.c.patch b/packages/reiser4progs/files/oid40.c.patch
new file mode 100644
index 0000000000..9e3cf89490
--- /dev/null
+++ b/packages/reiser4progs/files/oid40.c.patch
@@ -0,0 +1,11 @@
+--- x/plugin/oid/oid40/oid40.c.orig 2006-07-01 16:07:13.000000000 +0200
++++ x/plugin/oid/oid40/oid40.c 2006-07-01 16:07:33.000000000 +0200
+@@ -201,7 +201,7 @@
+ .slink_locality = oid40_slink_locality
+ };
+
+-static reiser4_plug_t oid40_plug = {
++reiser4_plug_t oid40_plug = {
+ .cl = class_init,
+ .id = {OID_REISER40_ID, 0, OID_PLUG_TYPE},
+ .label = "oid40",
diff --git a/packages/reiser4progs/reiser4progs_1.0.4.bb b/packages/reiser4progs/reiser4progs_1.0.4.bb
index afce90c93d..07f5e68a09 100644
--- a/packages/reiser4progs/reiser4progs_1.0.4.bb
+++ b/packages/reiser4progs/reiser4progs_1.0.4.bb
@@ -1,14 +1,17 @@
# This package builds tools to manipulate Reiser4 file systems,
# the libaal package must be built and installed as well to
# run these tools.
-PR = "r0"
+PR = "r1"
DESCRIPTION = "User-level tools for Reiser4 filesystems"
HOMEPAGE = "http://www.namesys.com"
MAINTAINER = "John Bowler <jbowler@acm.org>"
SECTION = "base"
LICENSE = "GPL-2"
-SRC_URI = "ftp://ftp.namesys.com/pub/${PN}/${P}.tar.gz \
+SRC_URI = "ftp://ftp.namesys.com/pub/${PN}/old-versions/${P}.tar.gz \
+ file://oid40.c.patch;patch=1 \
+ file://key_short.c.patch;patch=1 \
+ file://key_large.c.patch;patch=1 \
file://align.patch;patch=1"
LIBAAL = "libaal"
diff --git a/packages/samba/samba-essential_3.0.20.bb b/packages/samba/samba-essential_3.0.20.bb
index 50d4e432e5..4cee9541bd 100644
--- a/packages/samba/samba-essential_3.0.20.bb
+++ b/packages/samba/samba-essential_3.0.20.bb
@@ -1,4 +1,4 @@
-PR = "r3"
+PR = "r4"
SRC_URI = "http://us2.samba.org/samba/ftp/stable/samba-${PV}.tar.gz \
file://configure.patch;patch=1 \
@@ -42,6 +42,8 @@ do_install_append() {
rm -f ${D}/sbin/mount.smbfs
rmdir ${D}/sbin
install -d "${D}${sysconfdir}/init.d"
+ install -d "${D}${sysconfdir}/samba/private"
+
install -c -m 755 ${WORKDIR}/init-essential ${D}${sysconfdir}/init.d/samba
install -d "${D}${sysconfdir}/samba"
diff --git a/packages/scummvm/files/gcc-4.x.x-accept.patch b/packages/scummvm/files/gcc-4.x.x-accept.patch
new file mode 100644
index 0000000000..f69eb0f229
--- /dev/null
+++ b/packages/scummvm/files/gcc-4.x.x-accept.patch
@@ -0,0 +1,11 @@
+--- scummvm-0.6.1b/configure_orig 2006-07-01 16:42:17.000000000 +0000
++++ scummvm-0.6.1b/configure 2006-07-01 16:48:04.000000000 +0000
+@@ -362,7 +362,7 @@
+ fi
+
+ case $cxx_version in
+- 2.95.[2-9]|2.95.[2-9][-.]*|3.[0-9]|3.[0-9].[0-9])
++ 2.95.[2-9]|2.95.[2-9][-.]*|3.[0-9]|3.[0-9].[0-9]|4.[0-9].[0-9])
+ _cxx_major=`echo $cxx_version | cut -d '.' -f 1`
+ _cxx_minor=`echo $cxx_version | cut -d '.' -f 2`
+ cxx_version="$cxx_version, ok"
diff --git a/packages/scummvm/files/sh3-arch-0.9.0+.patch b/packages/scummvm/files/sh3-arch-0.9.0+.patch
new file mode 100644
index 0000000000..3cd0505654
--- /dev/null
+++ b/packages/scummvm/files/sh3-arch-0.9.0+.patch
@@ -0,0 +1,18 @@
+--- scummvm-0.9.0/configure_orig 2006-07-01 18:16:04.000000000 +0000
++++ scummvm-0.9.0/configure 2006-07-01 18:19:09.000000000 +0000
+@@ -762,6 +762,15 @@
+ type_2_byte='short'
+ type_4_byte='int'
+ ;;
++ sh3-linux)
++ echo "Cross-compiling to $_host, forcing endianness, aligment and type sizes"
++ DEFINES="$DEFINES -DUNIX"
++ _def_endianness='#define SCUMM_LITTLE_ENDIAN'
++ _def_align='#define SCUMM_NEED_ALIGMENT'
++ type_1_byte='char'
++ type_2_byte='short'
++ type_4_byte='int'
++ ;;
+ ppc-amigaos)
+ echo "Cross-compiling to $_host, forcing endianness, alignment and type sizes"
+ _def_endianness='#define SCUMM_BIG_ENDIAN'
diff --git a/packages/scummvm/files/sh3-linux-new-arch.patch b/packages/scummvm/files/sh3-linux-new-arch.patch
new file mode 100644
index 0000000000..b59d727458
--- /dev/null
+++ b/packages/scummvm/files/sh3-linux-new-arch.patch
@@ -0,0 +1,18 @@
+--- scummvm-0.6.1b/configure_orig 2006-07-01 17:15:30.000000000 +0000
++++ scummvm-0.6.1b/configure 2006-07-01 17:19:41.000000000 +0000
+@@ -462,6 +462,15 @@
+ type_2_byte='short'
+ type_4_byte='int'
+ ;;
++ sh3-linux)
++ echo "Crosscompiling to $_host, forcing endianess, aligment and type sizes"
++ DEFINES="$DEFINES -DUNIX"
++ _def_endianess='#define SCUMM_LITTLE_ENDIAN'
++ _def_align='#define SCUMM_NEED_ALiGMENT'
++ type_1_byte='char'
++ type_2_byte='short'
++ type_4_byte='int'
++ ;;
+ *)
+ echo "Cross-compiling to unknown target, please add your target to configure."
+ exit 1
diff --git a/packages/scummvm/files/tail-obselete-fix.patch b/packages/scummvm/files/tail-obselete-fix.patch
new file mode 100644
index 0000000000..1737133e25
--- /dev/null
+++ b/packages/scummvm/files/tail-obselete-fix.patch
@@ -0,0 +1,11 @@
+--- scummvm-0.6.1b/configure_orig 2006-07-01 16:42:17.000000000 +0000
++++ scummvm-0.6.1b/configure 2006-07-01 16:43:12.000000000 +0000
+@@ -355,7 +355,7 @@
+
+ echocheck "compiler version"
+
+-cxx_name=`( $cc -v ) 2>&1 | tail -1 | cut -d ' ' -f 1`
++cxx_name=`( $cc -v ) 2>&1 | tail -n 1 | cut -d ' ' -f 1`
+ cxx_version=`( $CXX -dumpversion ) 2>&1`
+ if test "$?" -gt 0; then
+ cxx_version="not found"
diff --git a/packages/scummvm/scummvm.inc b/packages/scummvm/scummvm.inc
index 88c6f13d9d..e39397be06 100644
--- a/packages/scummvm/scummvm.inc
+++ b/packages/scummvm/scummvm.inc
@@ -3,8 +3,7 @@ SECTION = "games"
PRIORITY = "optional"
LICENSE = "GPL"
-SRC_URI = "${SOURCEFORGE_MIRROR}/scummvm/scummvm-${PV}.tar.bz2 \
- file://tremor.patch;patch=1"
+SRC_URI = "http://puzzle.dl.sourceforge.net/scummvm/scummvm-${PV}.tar.bz2"
inherit autotools
diff --git a/packages/scummvm/scummvm_0.6.1b.bb b/packages/scummvm/scummvm_0.6.1b.bb
index 6f805b6b4d..313737bc92 100644
--- a/packages/scummvm/scummvm_0.6.1b.bb
+++ b/packages/scummvm/scummvm_0.6.1b.bb
@@ -1,6 +1,10 @@
include scummvm.inc
DEPENDS = "virtual/libsdl libmad tremor libogg zlib libmpeg2"
-SRC_URI += " file://mouse.patch;patch=1 "
+SRC_URI += " file://mouse.patch;patch=1 \
+ file://gcc-4.x.x-accept.patch;patch=1 \
+ file://sh3-linux-new-arch.patch;patch=1 \
+ file://tail-obselete-fix.patch;patch=1 \
+ file://tremor.patch;patch=1"
do_compile() {
oe_runmake CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS} -lmpeg2" \
diff --git a/packages/scummvm/scummvm_0.9.0.bb b/packages/scummvm/scummvm_0.9.0.bb
new file mode 100644
index 0000000000..2f8e9382bb
--- /dev/null
+++ b/packages/scummvm/scummvm_0.9.0.bb
@@ -0,0 +1,10 @@
+include scummvm.inc
+DEPENDS = "virtual/libsdl libmad libvorbis libogg zlib libmpeg2"
+SRC_URI += "file://sh3-arch-0.9.0+.patch;patch=1"
+
+do_compile() {
+ oe_runmake CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS} -lmpeg2" \
+ DEFINES="-DUNIX -DSCUMM_NEED_ALIGNMENT -DUSE_MAD -DUSE_VORBIS -DUSE_ZLIB -DUSE_MPEG2"
+}
+
+
diff --git a/packages/suspend-desktop/suspend-desktop_1.0.bb b/packages/suspend-desktop/suspend-desktop_1.0.bb
index 4586b61978..5ad9ec9478 100644
--- a/packages/suspend-desktop/suspend-desktop_1.0.bb
+++ b/packages/suspend-desktop/suspend-desktop_1.0.bb
@@ -1,4 +1,4 @@
-PR = "r0"
+PR = "r1"
SECTION = "gpe"
PRIORITY = "optional"
DESCRIPTION = "Suspend feature for the application launcher menu."
@@ -8,7 +8,7 @@ DEPENDS = "gpe-conf"
RDEPENDS = "gpe-conf"
RRECOMMENDS = "apm"
PACKAGES = ${PN}
-
+PACKAGE_ARCH = "all"
SRC_URI = "file://suspend.desktop \
file://suspend.sh"
@@ -21,6 +21,6 @@ do_compile() {
do_install() {
install -d ${D}/${bindir}
install -d ${D}/${datadir}/applications
- install -m644 ${WORKDIR}/suspend.desktop ${D}/${datadir}/applications/suspend.desktop
- install -m755 ${WORKDIR}/suspend.sh ${D}/${bindir}/suspend.sh
+ install -m 644 ${WORKDIR}/suspend.desktop ${D}/${datadir}/applications/suspend.desktop
+ install -m 755 ${WORKDIR}/suspend.sh ${D}/${bindir}/suspend.sh
}
diff --git a/packages/sword/sword_1.5.8.bb b/packages/sword/sword_1.5.8.bb
index 8bb469295f..b16e1fb013 100644
--- a/packages/sword/sword_1.5.8.bb
+++ b/packages/sword/sword_1.5.8.bb
@@ -5,15 +5,23 @@ Bible software with a constantly growing list of front-ends \
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "GPL"
-DEPENDS = "curl"
-PR ="r1"
+PR = "r2"
SRC_URI = "http://www.crosswire.org/ftpmirror/pub/sword/source/v1.5/sword-${PV}.tar.gz"
inherit autotools pkgconfig
-EXTRA_OECONF = "--without-clucene --with-curl"
+EXTRA_OECONF = "--without-clucene --without-curl"
do_stage() {
-autotools_stage_all
+ oe_libinstall -so -C lib libsword ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/sword/
+ for f in include/*.h
+ do
+ install -m 0644 $f ${STAGING_INCDIR}/sword/
+ done
+
}
+
+FILES_${PN} = "${libdir}/libsword*so ${sysconfdir} ${bindir} ${datadir}"
diff --git a/packages/sylpheed/sylpheed-claws-plugin-gtkhtml2-viewer-0.10.1_2.3.0.bb b/packages/sylpheed/sylpheed-claws-plugin-gtkhtml2-viewer-0.10.1_2.3.0.bb
new file mode 100644
index 0000000000..4145408fc4
--- /dev/null
+++ b/packages/sylpheed/sylpheed-claws-plugin-gtkhtml2-viewer-0.10.1_2.3.0.bb
@@ -0,0 +1,6 @@
+include sylpheed-claws-extra-plugins.inc
+
+DEPENDS_append = " gtkhtml2"
+
+S = ${WORKDIR}/sylpheed-claws-extra-plugins-${PV}/gtkhtml2_viewer-0.10.1
+
diff --git a/packages/sylpheed/sylpheed-claws-plugin-maildir-0.24.1_2.3.0.bb b/packages/sylpheed/sylpheed-claws-plugin-maildir-0.24.1_2.3.0.bb
new file mode 100644
index 0000000000..c616cfb8ff
--- /dev/null
+++ b/packages/sylpheed/sylpheed-claws-plugin-maildir-0.24.1_2.3.0.bb
@@ -0,0 +1,6 @@
+include sylpheed-claws-extra-plugins.inc
+
+DEPENDS_append = " db"
+
+S = ${WORKDIR}/sylpheed-claws-extra-plugins-${PV}/maildir-0.24.1
+
diff --git a/packages/sylpheed/sylpheed-claws-plugin-rssyl-0.5_2.3.0.bb b/packages/sylpheed/sylpheed-claws-plugin-rssyl-0.5_2.3.0.bb
new file mode 100644
index 0000000000..7cb0c16238
--- /dev/null
+++ b/packages/sylpheed/sylpheed-claws-plugin-rssyl-0.5_2.3.0.bb
@@ -0,0 +1,6 @@
+include sylpheed-claws-extra-plugins.inc
+
+DEPENDS_append = " libxml2 curl glib-2.0 gtk+"
+
+S = ${WORKDIR}/sylpheed-claws-extra-plugins-${PV}/rssyl-0.5
+
diff --git a/packages/sylpheed/sylpheed-claws_2.3.1.bb b/packages/sylpheed/sylpheed-claws_2.3.1.bb
new file mode 100644
index 0000000000..0308e60964
--- /dev/null
+++ b/packages/sylpheed/sylpheed-claws_2.3.1.bb
@@ -0,0 +1,35 @@
+SECTION = "x11/network"
+DESCRIPTION = "Mail user agent"
+DEPENDS = "gtk+ gpgme libetpan libgnomeprint aspell"
+MAINTAINER = "Graeme Gregory <dp@xora.org.uk>"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sylpheed-claws/sylpheed-claws-${PV}.tar.bz2"
+
+
+FILES_${PN} = "${bindir} ${datadir}/pixmaps ${datadir}/applications"
+
+EXTRA_OECONF = "--disable-aspell --disable-openssl --disable-aspell-test \
+ --disable-dillo-viewer-plugin --with-aspell-prefix=${STAGING_DIR}/${HOST_SYS} \
+ --enable-aspell"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+do_configure_prepend() {
+ mkdir -p m4
+}
+
+inherit autotools pkgconfig
+
+do_install_append() {
+ install -d ${D}${datadir}/applications
+ install -m 0644 sylpheed-claws.desktop ${D}${datadir}/applications/
+ install -d ${D}${datadir}/pixmaps
+ install -m 0644 sylpheed-claws.png ${D}${datadir}/pixmaps/
+}
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/packages/wireless-tools/wireless-tools_29-pre10.bb b/packages/wireless-tools/wireless-tools_29-pre10.bb
new file mode 100644
index 0000000000..6b5abbcd00
--- /dev/null
+++ b/packages/wireless-tools/wireless-tools_29-pre10.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "Tools for the Linux Standard Wireless Extension Subsystem"
+HOMEPAGE = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html"
+SECTION = "base"
+PRIORITY = "optional"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>, Marcin Juszkiewicz <openembedded@hrw.one.pl>"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.pre10.tar.gz \
+ file://man.patch;patch=1 \
+ file://wireless-tools.if-pre-up"
+
+S = "${WORKDIR}/wireless_tools.29"
+
+CFLAGS =+ "-I${S}"
+EXTRA_OEMAKE = "-e 'BUILD_SHARED=y' \
+ 'INSTALL_DIR=${D}${base_sbindir}' \
+ 'INSTALL_LIB=${D}${libdir}' \
+ 'INSTALL_INC=${D}${includedir}' \
+ 'INSTALL_MAN=${D}${mandir}'"
+
+do_compile() {
+ oe_runmake all libiw.a
+}
+
+do_stage() {
+ install -m 0644 wireless.h ${STAGING_INCDIR}/
+ install -m 0644 iwlib.h ${STAGING_INCDIR}/
+ oe_libinstall -a -so libiw ${STAGING_LIBDIR}/
+}
+
+do_install() {
+ oe_runmake PREFIX=${D} install-iwmulticall install-dynamic
+ install -d ${D}${sysconfdir}/network/if-pre-up.d
+ install ${WORKDIR}/wireless-tools.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/wireless-tools
+}
+
+PACKAGES = "libiw libiw-dev libiw-doc ${PN} ${PN}-doc"
+FILES_libiw = "${libdir}/*.so.*"
+FILES_libiw-dev = "${libdir}/*.a ${libdir}/*.so ${includedir}"
+FILES_libiw-doc = "${mandir}/man7"
+FILES_${PN} = "${bindir} ${sbindir} ${base_sbindir} ${base_bindir} ${sysconfdir}/network"
+FILES_${PN}-doc = "${mandir}/man8"
diff --git a/packages/wlan-ng/wlan-ng-modules-0.2.3/config.in b/packages/wlan-ng/wlan-ng-modules-0.2.3/config.in
index c78bef10b6..27baca26fb 100644
--- a/packages/wlan-ng/wlan-ng-modules-0.2.3/config.in
+++ b/packages/wlan-ng/wlan-ng-modules-0.2.3/config.in
@@ -15,7 +15,7 @@ WLAN_DEBUG=n
CROSS_COMPILE_ENABLED=n
CROSS_COMPILE=
HOST_COMPILE=
-PRISM2_PLX=y
-PRISM2_PCMCIA=y
-PRISM2_PCI=y
+PRISM2_PLX=n
+PRISM2_PCMCIA=n
+PRISM2_PCI=n
PRISM2_USB=y
diff --git a/packages/wlan-ng/wlan-ng-modules-0.2.3/modules-symvers.patch b/packages/wlan-ng/wlan-ng-modules-0.2.3/modules-symvers.patch
new file mode 100644
index 0000000000..77b33e6573
--- /dev/null
+++ b/packages/wlan-ng/wlan-ng-modules-0.2.3/modules-symvers.patch
@@ -0,0 +1,75 @@
+Index: Configure
+===================================================================
+--- linux-wlan-ng-devel.orig/Configure (revision 1772)
++++ linux-wlan-ng-devel/Configure (working copy)
+@@ -269,6 +269,12 @@
+ write_bool KERN_25
+ fi
+
++# flag to indicate new kbuild for modules in 2-6-17
++if [ $VERSION_CODE -gt `version 2 6 16` ] ; then
++ KERN_26=y
++ write_bool KERN_26
++fi
++
+ if [ "$SRC_RELEASE" != "$CUR_RELEASE" ] ; then
+ $ECHO "WARNING: the current running kernel is actually version $CUR_RELEASE."
+ fi
+Index: src/p80211/Makefile
+===================================================================
+--- linux-wlan-ng-devel.orig/src/p80211/Makefile (revision 1772)
++++ linux-wlan-ng-devel/src/p80211/Makefile (working copy)
+@@ -72,15 +72,18 @@
+
+ PWD := $(shell pwd)
+ default:
+-
++ifeq ($(KERN_26),y)
++ $(MAKE) -C $(LINUX_SRC) M='$(PWD)' WLAN_SRC=$(WLAN_SRC)
++ cp Modules.symvers ../prism2/driver
++else
+ ifeq ($(KERN_25), y)
+ $(MAKE) -C $(LINUX_SRC) M='$(PWD)/.. $(PWD)' WLAN_SRC=$(WLAN_SRC) modules
+ else
+ $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(PWD) WLAN_SRC=$(WLAN_SRC) modules
+ endif # KERN_25
+-
++endif # KERN_26
+ clean:
+- rm -f *.o *.ko .*.cmd *.mod.c *.flags .*.flags
++ rm -f *.o *.ko .*.cmd *.mod.c *.flags .*.flags Modules.symvers
+
+ install:
+ mkdir -p $(TARGET_MODDIR)
+Index: src/prism2/driver/Makefile
+===================================================================
+--- linux-wlan-ng-devel.orig/src/prism2/driver/Makefile (revision 1772)
++++ linux-wlan-ng-devel/src/prism2/driver/Makefile (working copy)
+@@ -83,19 +83,26 @@
+ PWD := $(shell pwd)
+
+ default:
++#if new kbuild in 2.6.17 or later
++ifeq ($(KERN_26), y)
++ $(MAKE) -C $(LINUX_SRC) M='$(PWD)' WLAN_SRC=$(WLAN_SRC)
++
++else
+ ifeq ($(KERN_25), y)
+ $(MAKE) -C $(LINUX_SRC) M='$(PWD)/../.. $(PWD)' WLAN_SRC=$(WLAN_SRC) \
+ modules
++
+ else # kbuild 2.4
+ $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(PWD) WLAN_SRC=$(WLAN_SRC) \
+ modules
+
+ endif # kbuild switch
++endif # KERN_26
+
+ endif #KERNELRELEASE
+
+ clean:
+- rm -f *.o *.ko .*.cmd *.mod.c *.flags .*.flags
++ rm -f *.o *.ko .*.cmd *.mod.c *.flags .*.flags Modules.symvers
+
+ install:
+ ifeq ($(KERN_25), y)
diff --git a/packages/wlan-ng/wlan-ng-modules.inc b/packages/wlan-ng/wlan-ng-modules.inc
index 53910d47b9..623275c921 100644
--- a/packages/wlan-ng/wlan-ng-modules.inc
+++ b/packages/wlan-ng/wlan-ng-modules.inc
@@ -64,6 +64,7 @@ FILES_wlan-ng-modules-usb = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_usb${
FILES_wlan-ng-modules-cs = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_cs${KERNEL_OBJECT_SUFFIX}"
FILES_wlan-ng-modules-pci = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_pci${KERNEL_OBJECT_SUFFIX} \
/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_plx${KERNEL_OBJECT_SUFFIX}"
+RDEPENDS_wlan-ng-modules-p80211 = "wlan-ng-utils"
RDEPENDS_wlan-ng-modules-usb = "wlan-ng-modules-p80211"
RDEPENDS_wlan-ng-modules-cs = "wlan-ng-modules-p80211"
RDEPENDS_wlan-ng-modules-pci = "wlan-ng-modules-p80211"
diff --git a/packages/wlan-ng/wlan-ng-modules_0.2.3.bb b/packages/wlan-ng/wlan-ng-modules_0.2.3.bb
index accf682a38..d8e8826fa6 100644
--- a/packages/wlan-ng/wlan-ng-modules_0.2.3.bb
+++ b/packages/wlan-ng/wlan-ng-modules_0.2.3.bb
@@ -1,8 +1,9 @@
include wlan-ng-modules.inc
-PR = "r2"
+PR = "r3"
SRC_URI += "ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/linux-wlan-ng-${PV}.tar.bz2 \
file://prism2sta_commsqual_defer.patch;patch=1 \
+ file://modules-symvers.patch;patch=1 \
file://usb-owner.patch;patch=1 "
S = "${WORKDIR}/linux-wlan-ng-${PV}"
diff --git a/packages/wview/files/.mtn2git_empty b/packages/wview/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/wview/files/.mtn2git_empty
diff --git a/packages/wview/files/Makefile.am.patch b/packages/wview/files/Makefile.am.patch
new file mode 100644
index 0000000000..1c35ee8c29
--- /dev/null
+++ b/packages/wview/files/Makefile.am.patch
@@ -0,0 +1,24 @@
+--- wview-3.1.3/wunderground/Makefile.am.orig 2006-07-01 18:28:45.000000000 +0200
++++ wview-3.1.3/wunderground/Makefile.am 2006-07-01 18:29:23.000000000 +0200
+@@ -9,8 +9,6 @@
+ INCLUDES = \
+ -I$(top_srcdir)/common \
+ -I$(prefix)/include \
+- -I/usr/include \
+- -I/usr/local/include \
+ -D_GNU_SOURCE \
+ -DBUILD_WVWUNDERGROUND
+
+@@ -36,10 +34,10 @@
+ endif
+
+ # define library directories
+-wvwunderd_LDFLAGS = -L/usr/lib -L/usr/local/lib -L$(prefix)/lib
++wvwunderd_LDFLAGS = -L$(prefix)/lib
+
+ if DB_MYSQL
+-wvwunderd_LDFLAGS += -L$(prefix)/lib/mysql -L/usr/lib/mysql
++wvwunderd_LDFLAGS += -L$(prefix)/lib/mysql
+ else
+ if DB_PGRESQL
+ wvwunderd_LDFLAGS += -L$(prefix)/lib -L$(prefix)/pgsql/lib
diff --git a/packages/wview/wview-common.inc b/packages/wview/wview-common.inc
index 0efeee271c..0df0707718 100644
--- a/packages/wview/wview-common.inc
+++ b/packages/wview/wview-common.inc
@@ -5,13 +5,14 @@ MAINTAINER = "Mark Teel (mark@teel.ws)"
HOMEPAGE = "http://www.wviewweather.com/"
DEPENDS += " bash util-linux gd openssl curl update-rc.d"
-SRC_URI = "${SOURCEFORGE_MIRROR}/wview/wview-${PV}.tar.gz"
+SRC_URI = "${SOURCEFORGE_MIRROR}/wview/wview-${PV}.tar.gz \
+ file://Makefile.am.patch;patch=1"
S = "${WORKDIR}/wview-${PV}"
inherit autotools
-EXTRA_OECONF += " --enable-wunderground"
+EXTRA_OECONF += "--prefix=${D} --enable-wunderground"
do_install_append() {
install -d ${D}/${sysconfdir}/init.d
diff --git a/packages/wview/wview-sim_3.1.3.bb b/packages/wview/wview-sim_3.1.3.bb
index 919e322f42..3f07aecc82 100644
--- a/packages/wview/wview-sim_3.1.3.bb
+++ b/packages/wview/wview-sim_3.1.3.bb
@@ -1,4 +1,4 @@
include wview-common.inc
include wview.inc
EXTRA_OECONF += " --enable-station-sim"
-PR = "r0"
+PR = "r1"
diff --git a/packages/wview/wview-vpro_3.1.3.bb b/packages/wview/wview-vpro_3.1.3.bb
index 1933e077b5..4c84152f3b 100644
--- a/packages/wview/wview-vpro_3.1.3.bb
+++ b/packages/wview/wview-vpro_3.1.3.bb
@@ -1,4 +1,4 @@
include wview-common.inc
include wview.inc
EXTRA_OECONF += " --enable-station-vpro"
-PR = "r0"
+PR = "r1"
diff --git a/packages/wview/wview-wxt510_3.1.3.bb b/packages/wview/wview-wxt510_3.1.3.bb
index b7b0ef236d..84f175f1d8 100644
--- a/packages/wview/wview-wxt510_3.1.3.bb
+++ b/packages/wview/wview-wxt510_3.1.3.bb
@@ -1,4 +1,4 @@
include wview-common.inc
include wview.inc
EXTRA_OECONF += " --enable-station-wxt510"
-PR = "r0"
+PR = "r1"
diff --git a/packages/xinetd/xinetd/service.c.patch b/packages/xinetd/xinetd/service.c.patch
new file mode 100644
index 0000000000..b94ae2184f
--- /dev/null
+++ b/packages/xinetd/xinetd/service.c.patch
@@ -0,0 +1,24 @@
+--- xinetd-2.3.13/xinetd/service.c.orig 2006-07-01 19:14:23.000000000 +0200
++++ xinetd-2.3.13/xinetd/service.c 2006-07-01 19:22:28.000000000 +0200
+@@ -764,8 +764,8 @@
+ return FAILED;
+
+ if ( last == NULL ) {
+- last = SAIN( SVC_LAST_DGRAM_ADDR(sp) ) =
+- SAIN( calloc( 1, sizeof(union xsockaddr) ) );
++ last = SAIN(calloc( 1, sizeof(union xsockaddr) ) );
++ SVC_LAST_DGRAM_ADDR(sp) = (union xsockaddr *)last;
+ }
+
+ (void) time( &current_time ) ;
+@@ -791,8 +791,8 @@
+ return FAILED;
+
+ if( last == NULL ) {
+- last = SAIN6(SVC_LAST_DGRAM_ADDR(sp)) =
+- SAIN6(calloc( 1, sizeof(union xsockaddr) ) );
++ last = SAIN6(calloc( 1, sizeof(union xsockaddr) ) );
++ SVC_LAST_DGRAM_ADDR(sp) = (union xsockaddr *)last;
+ }
+
+ (void) time( &current_time ) ;
diff --git a/packages/xinetd/xinetd_2.3.13.bb b/packages/xinetd/xinetd_2.3.13.bb
index 699667cb26..4e67384d45 100644
--- a/packages/xinetd/xinetd_2.3.13.bb
+++ b/packages/xinetd/xinetd_2.3.13.bb
@@ -1,11 +1,12 @@
DEPENDS = ""
DESCRIPTION = "Highly configurable, modular and secure inetd"
MAINTAINER = "NSLU2 Linux <nslu2-linux@yahoogroups.com>"
-PR="r3"
+PR="r4"
SRC_URI = "http://www.xinetd.org/xinetd-${PV}.tar.gz \
file://xinetd.init \
file://xinetd.conf \
+ file://service.c.patch;patch=1 \
"
EXTRA_OECONF="--disable-nls"
diff --git a/packages/zile/zile_2.2.15.bb b/packages/zile/zile_2.2.15.bb
new file mode 100644
index 0000000000..ca6ced7b18
--- /dev/null
+++ b/packages/zile/zile_2.2.15.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Zile is lossy Emacs."
+HOMEPAGE = "http://zile.sourceforge.net/"
+LICENSE = "GPL"
+DEPENDS = "ncurses"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
+SECTION = "console/editors"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/zile/zile-${PV}.tar.gz"
+
+inherit autotools
diff --git a/site/arm-linux b/site/arm-linux
index 1f6287abb5..ce15c881e8 100644
--- a/site/arm-linux
+++ b/site/arm-linux
@@ -10,10 +10,13 @@ ac_cv_sizeof_char=${ac_cv_sizeof_char=1}
ac_cv_sizeof_wchar_t=${ac_cv_sizeof_wchar_t=1}
ac_cv_sizeof_unsigned_char=${ac_cv_sizeof_unsigned_char=1}
ac_cv_sizeof_bool=${ac_cv_sizeof_bool=1}
+ac_cv_sizeof_char_p=${ac_cv_sizeof_int_p=4}
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+ac_cv_sizeof_int_p=${ac_cv_sizeof_int_p=4}
ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
ac_cv_sizeof_long_int=${ac_cv_sizeof_long_int=4}
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
+ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t=4}
ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
ac_cv_sizeof_short_int=${ac_cv_sizeof_short_int=2}
ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
@@ -21,7 +24,9 @@ ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
ac_cv_sizeof_unsigned_short=${ac_cv_sizeof_unsigned_short=2}
+ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
ac_cv_sizeof_unsigned_int=${ac_cv_sizeof_unsigned_int=4}
ac_cv_sizeof_unsigned_long=${ac_cv_sizeof_unsigned_long=4}
ac_cv_sizeof_unsigned_long_long=${ac_cv_sizeof_unsigned_long_long=8}
@@ -299,3 +304,4 @@ dpkg_cv___va_copy=${ac_cv___va_copy=yes}
# enca
yeti_cv_func_scanf_modif_size_t=yes
+
diff --git a/site/armeb-linux b/site/armeb-linux
index 452e3abbf7..3b47d0cd96 100644
--- a/site/armeb-linux
+++ b/site/armeb-linux
@@ -16,6 +16,9 @@ ac_cv_sizeof_short_int=${ac_cv_sizeof_short_int=2}
ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p=4}
+ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
+ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
ac_cv_sys_restartable_syscalls=yes
ac_cv_uchar=${ac_cv_uchar=no}
diff --git a/site/armeb-linux-uclibc b/site/armeb-linux-uclibc
index 89a2a3f104..54c529b1ff 100644
--- a/site/armeb-linux-uclibc
+++ b/site/armeb-linux-uclibc
@@ -16,6 +16,9 @@ ac_cv_sizeof_short_int=${ac_cv_sizeof_short_int=2}
ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p=4}
+ac_cv_sizeof_unsigned=${ac_cv_sizeof_unsigned=4}
+ac_cv_sizeof_ptrdiff_t=${glib_cv_sizeof_ptrdiff_t=4}
ac_cv_sys_restartable_syscalls=yes
ac_cv_uchar=${ac_cv_uchar=no}
diff --git a/site/sh4-linux-uclibc b/site/sh4-linux-uclibc
index 178d05e8e7..734e0924f7 100644
--- a/site/sh4-linux-uclibc
+++ b/site/sh4-linux-uclibc
@@ -30,3 +30,8 @@ sudo_cv_uid_t_len=${sudo_cv_uid_t_len=10}
# vim
ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+
+# ipsec-tools
+ac_cv_va_copy=${ac_cv_va_copy=no}
+ac_cv___va_copy=${ac_cv___va_copy=yes}
+racoon_cv_bug_getaddrinfo=${racoon_cv_bug_getaddrinfo=no}