##### SPECIAL NOTES FOR THIS PATCH ##### ### 1. This patch is not fully tested on hpux and may not compile or run ### on hpux. If you have an hpux machine, I would very much like to ### hear how this works out (did it build, does it run, and does @uptime work?) ### ### 2. You will likely get a rejected hunk in game/restrict.cnf ### This is no big deal. Please edit game/restrict.cnf and add a ### blank line at the end. This is patch01 to PennMUSH 1.7.4. After applying this patch, you will have version 1.7.4p1 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p1 < 1.7.4-patch01 ./Configure make update make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1', not just 'patch -p1'. Then @shutdown and restart your MUSH. - Alan/Javelin In this patch: Minor changes: * Speedup for repeat() function. [TAP] * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW] * Some OS-dependent defines have been removed. * ansi() now only adds a maximum of 7 codes to the string. [TAP] Fixes: * The restrict_command for rob has been removed from restrict.cnf Reported by Kyieren@M*U*S*H. * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, Datron@SW2, and Noltar@Korongil. * stripansi() didn't correctly handle multiple ansi codes in sequence. Reported by CU5@WCX. * Linting for warnings in pcre. [SW] * Configure now sends mailing list subscription stuff to the new list address. * Updated examples in access.README to use dbrefs. * Updated a reference to the rob command in 'give' errors. Noted by rodregis@M*U*S*H. * median was broken. Reported by Parax@SandsMUSH. * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like. Noted by rodregis@M*U*S*H Prereq: 1.7.4p0 *** 1_7_4.32/Patchlevel Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/5_Patchlevel 1.18 600) --- 1_7_4.46(w)/Patchlevel Mon, 12 Mar 2001 14:43:17 -0600 dunemush (pennmush/5_Patchlevel 1.19 600) *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.4p0 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.4p1 *** 1_7_4.32/README Tue, 09 Jan 2001 17:56:37 -0600 dunemush (pennmush/4_README 1.6 600) --- 1_7_4.46(w)/README Sun, 11 Mar 2001 17:33:01 -0600 dunemush (pennmush/4_README 1.7 600) *************** *** 550,558 **** There are three places one could get help with a problem: 1. pennmush@pennmush.org is the PennMUSH mailing list. ! To subscribe, send email to listproc@pennmush.org ! with the words "subscribe pennmush YourNameHere" in the body ! of the mesage. The PennMUSH mailing list should only be used for problems, bugs, suggestions, ideas, discussion, etc. that are OF GENERAL INTEREST. --- 550,556 ---- There are three places one could get help with a problem: 1. pennmush@pennmush.org is the PennMUSH mailing list. ! To subscribe, visit http://www.pennmush.org/mailman/listinfo/pennmush The PennMUSH mailing list should only be used for problems, bugs, suggestions, ideas, discussion, etc. that are OF GENERAL INTEREST. *************** *** 565,570 **** --- 563,572 ---- That is, don't report problems with downloading PennMUSH, compilation, installation, restarts, or database corruption to the mailing list. These are often system specific. + + (If you don't want to hear these discussions, but do want to be + informed of new patches, subscribe to pennmush-announce instead, + at http://www.pennmush.org/mailman/listinfo/pennmush-announce) 2. pennmush-bugs@pennmush.org is the bug reporting address for the PennMUSH developers (suggestions go to pennmush-developers, *** 1_7_4.32/CHANGES.OLD Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/7_CHANGES.OL 1.7 600) --- 1_7_4.46(w)/CHANGES.OLD Fri, 16 Mar 2001 16:52:55 -0600 dunemush (pennmush/7_CHANGES.OL 1.8 600) *************** *** 867,872 **** --- 867,915 ---- Suggested by Oleo@M*U*S*H. * getstring_noalloc was doing an fgetc into a char variable, instead of an int, so wasn't 8-bit clean. Report by Slava. + + Version 1.7.2 patchlevel 35 January 27, 2001 + + Fixes: + * Fixed a bug in filter introduced in p34. Report by Jason Rhodes. + * Help for sort() now indicates that 'n' sorts integers. Report by + Dave Milford. + + + Version 1.7.2 patchlevel 34 October 2, 2000 + + Fixes: + * filter now looks at the whole result, not just the first + character, when checking if the filter function returned '1'. [SW] + * raw_input and raw_input_at are now unsigned char *, so + they build right on HP/UX and similar. Report by Jeff Hildebrand + + + Version 1.7.2 patchlevel 33 August 17, 2000 + + Fixes (backported from 1.7.3p4): + * Bug in con() patched. + * Bug in deciding when to take a penny for queued commands fixed + by Stephen Dennis. + * Configure portability fixes + * Better handling of cases where the maildb has messages from + dbrefs that are out of range (due to truncating a db to remove + corruption, for example). Suggested by Ashen-Shugar. + * Various fixes to better resist crashing due to attacks involving + overwhelming connections. + * @mvattr a/b=a/b would clear the attribute. No longer. + Reported by Octavian@M*U*S*H + * type(obj) would log a "WEIRD OBJECT" message if obj was + a garbage object. Reported by RLM. [TAP] + * Small memory leak when doing @cpattr of a standard attribute to a + non-standard attribute is fixed. + * Tport_anything didn't allow teleporting things to exits. + Noted by Vexon@M*U*S*H. + * Z_TEL flag works on ZMO's as promised now. Report by [SW]. + * Potential crash in moveit fixed. Report by Howie@NF TrekMush + * getstring_noalloc was doing an fgetc into a char variable, + instead of an int, so wasn't 8-bit clean. Report by Slava. + Version 1.7.2 patchlevel 32 April 17, 2000 Fixes: *** 1_7_4.32/CHANGES Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/8_CHANGES 1.170 600) --- 1_7_4.46(w)/CHANGES Wed, 21 Mar 2001 14:16:34 -0600 dunemush (pennmush/8_CHANGES 1.179 600) *************** *** 17,22 **** --- 17,46 ---- ========================================================================== + Version 1.7.4 patchlevel 1 March 17, 2001 + + Minor changes: + * Speedup for repeat() function. [TAP] + * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW] + * Some OS-dependent defines have been removed. + * ansi() now only adds a maximum of 7 codes to the string. [TAP] + Fixes: + * The restrict_command for rob has been removed from restrict.cnf + Reported by Kyieren@M*U*S*H. + * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, Datron@SW2, + and Noltar@Korongil. + * stripansi() didn't correctly handle multiple ansi codes in + sequence. Reported by CU5@WCX. + * Linting for warnings in pcre. [SW] + * Configure now sends mailing list subscription stuff to the new + list address. + * Updated examples in access.README to use dbrefs. + * Updated a reference to the rob command in 'give' errors. Noted by + rodregis@M*U*S*H. + * median was broken. Reported by Parax@SandsMUSH. + * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like. + Noted by rodregis@M*U*S*H + Version 1.7.4 patchlevel 0 March 7, 2001 Major Changes: *** 1_7_4.32/game/txt/hlp/pennvers.hlp Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/12_pennvers.h 1.125 600) --- 1_7_4.46(w)/game/txt/hlp/pennvers.hlp Tue, 20 Mar 2001 14:58:14 -0600 dunemush (pennmush/12_pennvers.h 1.132 600) *************** *** 1,5 **** & changes ! & 1.7.4p0 This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions can probably be gotten via 'help '. 'help credits' --- 1,5 ---- & changes ! & 1.7.4p1 This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions can probably be gotten via 'help '. 'help credits' *************** *** 11,16 **** --- 11,40 ---- A list of the patchlevels associated with each release can be read in 'help patchlevels'. + Version 1.7.4 patchlevel 1 March 17, 2001 + + Minor changes: + * Speedup for repeat() function. [TAP] + * Hint for openbsd, which appears to have a broken IPv6 configuration. [SW] + * Some OS-dependent defines have been removed. + * ansi() now only adds a maximum of 7 codes to the string. [TAP] + Fixes: + * The restrict_command for rob has been removed from restrict.cnf + Reported by Kyieren@M*U*S*H. + * Help fixes by Kyieren, rodregis, and Luke @ M*U*S*H, and Datron@SW2. + * stripansi() didn't correctly handle multiple ansi codes in + sequence. Reported by CU5@WCX. + * Linting for warnings in pcre. [SW] + * Configure now sends mailing list subscription stuff to the new + list address. + * Updated examples in access.README to use dbrefs. + * Updated a reference to the rob command in 'give' errors. Noted by + rodregis@M*U*S*H. + * median was broken. Reported by Parax@SandsMUSH. + * Fixes to update.pl's handling of CHAT_TOKEN_ALIAS and the like. + Noted by rodregis@M*U*S*H + + & 1.7.4p0 Version 1.7.4 patchlevel 0 March 7, 2001 Major Changes: *************** *** 951,956 **** --- 975,1026 ---- Suggested by Oleo@M*U*S*H. * getstring_noalloc was doing an fgetc into a char variable, instead of an int, so wasn't 8-bit clean. Report by Slava. + + & 1.7.2p35 + Version 1.7.2 patchlevel 35 January 27, 2001 + + Fixes: + * Fixed a bug in filter introduced in p34. Report by Jason Rhodes. + * Help for sort() now indicates that 'n' sorts integers. Report by + Dave Milford. + + + & 1.7.2p34 + Version 1.7.2 patchlevel 34 October 2, 2000 + + Fixes: + * filter now looks at the whole result, not just the first + character, when checking if the filter function returned '1'. [SW] + * raw_input and raw_input_at are now unsigned char *, so + they build right on HP/UX and similar. Report by Jeff Hildebrand + + + & 1.7.2p33 + Version 1.7.2 patchlevel 33 August 17, 2000 + + Fixes (backported from 1.7.3p4): + * Bug in con() patched. + * Bug in deciding when to take a penny for queued commands fixed + by Stephen Dennis. + * Configure portability fixes + * Better handling of cases where the maildb has messages from + dbrefs that are out of range (due to truncating a db to remove + corruption, for example). Suggested by Ashen-Shugar. + * Various fixes to better resist crashing due to attacks involving + overwhelming connections. + * @mvattr a/b=a/b would clear the attribute. No longer. + Reported by Octavian@M*U*S*H + * type(obj) would log a "WEIRD OBJECT" message if obj was + a garbage object. Reported by RLM. [TAP] + * Small memory leak when doing @cpattr of a standard attribute to a + non-standard attribute is fixed. + * Tport_anything didn't allow teleporting things to exits. + Noted by Vexon@M*U*S*H. + * Z_TEL flag works on ZMO's as promised now. Report by [SW]. + * Potential crash in moveit fixed. Report by Howie@NF TrekMush + * getstring_noalloc was doing an fgetc into a char variable, + instead of an int, so wasn't 8-bit clean. Report by Slava. + & 1.7.2p32 Version 1.7.2 patchlevel 32 April 17, 2000 *************** *** 4468,4477 **** is configurable. & patchlevels ! 1.7.4: 0 1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 1.7.2: 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 1.7.1: 0, 1, 2, 3 1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11 1.6.10: 0, 1, 2, 3, 4, 5, 6, 6 --- 4538,4547 ---- is configurable. & patchlevels ! 1.7.4: 0, 1 1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 1.7.2: 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 1.7.1: 0, 1, 2, 3 1.7.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11 1.6.10: 0, 1, 2, 3, 4, 5, 6, 6 *** 1_7_4.32/game/txt/hlp/penntop.hlp Tue, 27 Feb 2001 12:35:21 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.26 600) --- 1_7_4.46(w)/game/txt/hlp/penntop.hlp Wed, 14 Mar 2001 14:27:19 -0600 dunemush (pennmush/13_penntop.hl 1.2.1.27 600) *************** *** 249,268 **** hasflag(,) is true (the object has the flag), it will return 1. If it is false, it will return 0. ! ! Now, any string is interpreted as true(1), except for the null string ! (ie, just a blank), which is considered false (0). Anything that ! begins with a #-1 is also considered false. All dbref #s are considered ! true. Any number except 0 (including negative numbers), is considered ! true. ! (continued in help boolean2) ! & BOOLEAN2 ! Note that this may differ on some MUSHes, since it is possible to use ! the Boolean value system from TinyMUSH2.2 instead. '@config tiny' will ! show if this is the case. ! Examples: not(foo) = 0 not() = 1 not(-66) = 0 --- 249,282 ---- hasflag(,) is true (the object has the flag), it will return 1. If it is false, it will return 0. ! ! Other functions expect to operate on boolean values. What they ! consider "true" or "false", however, depends on the setting of ! the "tiny_booleans" config option (@config tiny will show this). ! (continued in help boolean2) ! & BOOLEAN2 ! If tiny_booleans is... ! no FALSE: null string, 0, any negative db ! TRUE: everything else ! yes TRUE: numbers other than 0 ! strings beginning with numbers other than 0 ! FALSE: everything else ! ! Or, put another way: ! Value tiny_booleans=no tiny_booleans=yes Gotcha ! 0 FALSE FALSE ! non-zero number TRUE TRUE ! # TRUE TRUE ! # FALSE TRUE * ! null string FALSE FALSE ! 0 TRUE FALSE * ! TRUE TRUE ! ! (continued in help boolean3) ! & BOOLEAN3 ! Examples (assuming tiny_booleans is "no"): not(foo) = 0 not() = 1 not(-66) = 0 *** 1_7_4.32/game/txt/hlp/pennmail.hlp Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/15_pennmail.h 1.6 600) --- 1_7_4.46(w)/game/txt/hlp/pennmail.hlp Wed, 21 Mar 2001 14:16:13 -0600 dunemush (pennmush/15_pennmail.h 1.6 600) *************** *** 68,75 **** be "Forwarded". & mail-other ! @mail/clear [] ! @mail/unclear [ | all>] These commands mark mail in the current folder as cleared or uncleared. Mail marked for clearing is deleted when you disconnect, or if you use @mail/purge. If no msg-list is specified, all --- 68,75 ---- be "Forwarded". & mail-other ! @mail/clear [ | all] ! @mail/unclear [ | all] These commands mark mail in the current folder as cleared or uncleared. Mail marked for clearing is deleted when you disconnect, or if you use @mail/purge. If no msg-list is specified, all *************** *** 80,86 **** Actually deletes all messages marked for clearing with @mail/clear. This is done automatically when you log out. ! @mail/tag [] @mail/untag [ | all>] These commands tag or untag mail in the current folder. Tagged mail can be later acted on en masse by using "tagged" as --- 80,86 ---- Actually deletes all messages marked for clearing with @mail/clear. This is done automatically when you log out. ! @mail/tag [ | all>] @mail/untag [ | all>] These commands tag or untag mail in the current folder. Tagged mail can be later acted on en masse by using "tagged" as *** 1_7_4.32/game/txt/hlp/pennfunc.hlp Mon, 26 Feb 2001 09:21:53 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1 600) --- 1_7_4.46(w)/game/txt/hlp/pennfunc.hlp Fri, 16 Mar 2001 11:02:44 -0600 dunemush (pennmush/16_pennfunc.h 1.2.1.50.1.1.1.1.1.2 600) *************** *** 72,78 **** For example, 2 is represented as '0010' and 4 as '0100'. If these two numbers are bitwise-or'ed together with BOR(), the result is 6, or ! (In binary) '0100'. These functions are useful for storing small lists of toggle (Yes/No) options efficiently. band() bnand() bnot() bor() bxor() --- 72,78 ---- For example, 2 is represented as '0010' and 4 as '0100'. If these two numbers are bitwise-or'ed together with BOR(), the result is 6, or ! (In binary) '0110'. These functions are useful for storing small lists of toggle (Yes/No) options efficiently. band() bnand() bnot() bor() bxor() *************** *** 271,277 **** effects), while cand() stops evaluation after the first argument that evaluates to false. ! See also: BOOLEAN VALUES, or() & ANDFLAGS() andflags(,) --- 271,277 ---- effects), while cand() stops evaluation after the first argument that evaluates to false. ! See also: BOOLEAN VALUES, or(), xor(), not() & ANDFLAGS() andflags(,) *************** *** 2044,2056 **** Returns 1 if all its arguments are false, 0 if one is true. Equivalent to not(or()), but more efficient. & NOT() [not()] Takes a boolean value, and returns its inverse. I.E. if the input is equivalent to true(1), it returns a 0, and if the input is equivalent to false(0), it returns a 1. ! See BOOLEAN VALUES. & NUM() num() --- 2044,2062 ---- Returns 1 if all its arguments are false, 0 if one is true. Equivalent to not(or()), but more efficient. + + See also: and(), or(), xor(), not() & NOT() [not()] Takes a boolean value, and returns its inverse. I.E. if the input is equivalent to true(1), it returns a 0, and if the input is equivalent to false(0), it returns a 1. ! ! The definition of truth and falsehood depends on configuration settings; ! see help BOOLEAN VALUES for details. ! ! See also: and(), or(), nor(), xor() & NUM() num() *************** *** 2838,2845 **** & T() t() ! Returns a 0 if the expression is null, 0, #-1, #-2, (or any negative db#) ! Returns a 1 otherwise. & TABLE() table(,,,,) --- 2844,2853 ---- & T() t() ! Returns a 0 if the expression is false, and 1 otherwise. ! The definition of truth and falsehood depends on configuration settings; ! see help BOOLEAN VALUES for details. ! & TABLE() table(,,,,) *************** *** 3320,3325 **** --- 3328,3335 ---- Takes two booleans, and returns a 1 if one, and only one of the two inputs is equivalent to true(1). See BOOLEAN VALUES. + + See also: and(), or(), not(), nor() & ZEMIT() zemit(, ) *** 1_7_4.32/game/txt/hlp/pennflag.hlp Wed, 24 Jan 2001 16:56:43 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2 600) --- 1_7_4.46(w)/game/txt/hlp/pennflag.hlp Thu, 08 Mar 2001 11:37:03 -0600 dunemush (pennmush/17_pennflag.h 1.1.1.1.1.2.1.1.1.2.1.1.1.2.1.1 600) *************** *** 598,610 **** If a player is set UNFINDABLE, he cannot be found by the @whereis command. You also cannot use loc(), locate(), and similar functions ! to find his location. If a room is set UNFINDABLE, you cannot locate any of its contents ! via any means (@whereis, the loc() function, etc.) ! If a wizard is set UNFINDABLE, and he is idle past the allowable ! maximum idle time, he will be set DARK automatically. & UNINSPECTED Flag: UNINSPECTED (rooms) --- 598,611 ---- If a player is set UNFINDABLE, he cannot be found by the @whereis command. You also cannot use loc(), locate(), and similar functions ! to find his location, unless you have the see_all power or equivalent. If a room is set UNFINDABLE, you cannot locate any of its contents ! via any means (@whereis, the loc() function, etc.) unless you are ! see_all or equivalent. ! If a player who can @hide and idle is set UNFINDABLE, and he is idle past ! the allowable maximum idle time, he will be hidden automatically. & UNINSPECTED Flag: UNINSPECTED (rooms) *** 1_7_4.32/game/access.README Fri, 26 May 2000 09:29:12 -0500 dunemush (pennmush/42_access.REA 1.2 600) --- 1_7_4.46(w)/game/access.README Wed, 14 Mar 2001 14:45:34 -0600 dunemush (pennmush/42_access.REA 1.3 600) *************** *** 96,131 **** 1. Totally ban specific sites, allow all others ! *badsite.com none ! *.twink.edu none This will totally lock out those sites (like lockout.cnf) 2. Allow specific sites and no others ! *.berkeley.edu default ! * none People may connect from .berkeley.edu sites only. 3. Allow connection but not creation from some sites ! *.twink.edu !create This is equivalent to the former function of sites.cnf 4. Allow connection but not creation or guest-connection from some sites ! *.twink.edu !guest !create 5. Require that a given site use the 'register' command to register players by email. ! *.twink.edu !create register Using !create prevents people from using the usual create command. Adding register allows them to uset the register command. --- 96,131 ---- 1. Totally ban specific sites, allow all others ! *badsite.com -2 none ! *.twink.edu -2 none This will totally lock out those sites (like lockout.cnf) 2. Allow specific sites and no others ! *.berkeley.edu -2 default ! * -2 none People may connect from .berkeley.edu sites only. 3. Allow connection but not creation from some sites ! *.twink.edu -2 !create This is equivalent to the former function of sites.cnf 4. Allow connection but not creation or guest-connection from some sites ! *.twink.edu -2 !guest !create 5. Require that a given site use the 'register' command to register players by email. ! *.twink.edu -2 !create register Using !create prevents people from using the usual create command. Adding register allows them to uset the register command. *************** *** 134,140 **** 6. Disable creation from twink.edu sites, and don't let Wizards override this rule with @sitelock ! *.twink.edu !create @sitelock Because the rule appears above "@sitelock", and @sitelock rules appear --- 134,140 ---- 6. Disable creation from twink.edu sites, and don't let Wizards override this rule with @sitelock ! *.twink.edu -2 !create @sitelock Because the rule appears above "@sitelock", and @sitelock rules appear *************** *** 146,152 **** later override this rule with @sitelock @sitelock ! *.twink.edu !create Because the rule appears below "@sitelock", new @sitelock rules (which will be added immediately following "@sitelock") will precede --- 146,152 ---- later override this rule with @sitelock @sitelock ! *.twink.edu -2 !create Because the rule appears below "@sitelock", new @sitelock rules (which will be added immediately following "@sitelock") will precede *************** *** 173,184 **** e) Allow people from somesite.org to connect to Guests only. f) Allow @sitelock to override c-e above ! localhost.berkeley.edu default ! *.twink.edu !create register suspect @sitelock ! *badsite.com none deny_silent ! jerk@netcom.com !guest ! somesite.org !connect !create guest --- 173,184 ---- e) Allow people from somesite.org to connect to Guests only. f) Allow @sitelock to override c-e above ! localhost.berkeley.edu -2 default ! *.twink.edu -2 !create register suspect @sitelock ! *badsite.com -2 none deny_silent ! jerk@netcom.com -2 !guest ! somesite.org -2 !connect !create guest *** 1_7_4.32/utils/update.pl Sun, 22 Oct 2000 18:25:00 -0500 dunemush (pennmush/43_update.pl 1.4 700) --- 1_7_4.46(w)/utils/update.pl Tue, 20 Mar 2001 14:56:53 -0600 dunemush (pennmush/43_update.pl 1.5 700) *************** *** 136,145 **** : &def(&ask_simple($1,'define')); } elsif ( m!^(/\*\s*)?#define\s+([A-Z0-9_-]+)\s+(.+)\s+(/\*.*\*/)!) { # A define with a value and a comment ! $comment = $4; $name = $2; ! $def = $3; print OLD defined($defs{$name}) ! ? &def($name,$comment) : &def(&ask_value($name,$def),$comment,$def); } elsif ( m!^#define\s+([A-Z0-9_-]+)\s+(.+)!) { # A define with a value print OLD defined($defs{$1}) ? &def($1) : &def(&ask_value($1,$2)); --- 136,148 ---- : &def(&ask_simple($1,'define')); } elsif ( m!^(/\*\s*)?#define\s+([A-Z0-9_-]+)\s+(.+)\s+(/\*.*\*/)!) { # A define with a value and a comment ! $maybeundef = $1; ! $maybecomment = $4; $name = $2; ! $olddef = $def = $3; ! $comment = $maybecomment if ($maybecomment =~ /\w/); ! $def = "undef" if $maybeundef =~ /./; print OLD defined($defs{$name}) ! ? &def($name,$comment) : &def(&ask_value($name,$def),$maybecomment,$def eq "undef" ? $olddef : $def); } elsif ( m!^#define\s+([A-Z0-9_-]+)\s+(.+)!) { # A define with a value print OLD defined($defs{$1}) ? &def($1) : &def(&ask_value($1,$2)); *** 1_7_4.32/config_h.SH Thu, 01 Feb 2001 14:47:02 -0600 dunemush (pennmush/b/17_config_h.S 1.17 660) --- 1_7_4.46(w)/config_h.SH Wed, 14 Mar 2001 14:34:33 -0600 dunemush (pennmush/b/17_config_h.S 1.17.1.1 660) *************** *** 456,461 **** --- 456,466 ---- #$i_crypt I_CRYPT /**/ + /* FORCE_IPV4: + * If defined, this system will not use IPv6. Necessary for Openbsd. + */ + #$d_force_ipv4 FORCE_IPV4 /**/ + /* HAS_FPSETROUND: * This symbol, if defined, indicates that the crypt routine is available * to encrypt passwords and the like. *** 1_7_4.32/src/strutil.c Mon, 12 Feb 2001 09:57:12 -0600 dunemush (pennmush/b/33_strutil.c 1.28 660) --- 1_7_4.46(w)/src/strutil.c Mon, 12 Mar 2001 14:51:43 -0600 dunemush (pennmush/b/33_strutil.c 1.28.1.3 660) *************** *** 700,712 **** switch (*q) { case ESC_CHAR: /* Skip over ansi */ ! while (*q && *q++ != 'm') ; ! safe_chr(*q, buff, &bp); break; case TAG_START: /* Skip over HTML */ ! while (*q && *q++ != TAG_END) ; ! safe_chr(*q, buff, &bp); break; default: safe_chr(*q, buff, &bp); --- 700,710 ---- switch (*q) { case ESC_CHAR: /* Skip over ansi */ ! while (*q && *q != 'm') q++; break; case TAG_START: /* Skip over HTML */ ! while (*q && *q != TAG_END) q++; break; default: safe_chr(*q, buff, &bp); *** 1_7_4.32/src/rob.c Thu, 08 Feb 2001 23:01:41 -0600 dunemush (pennmush/b/42_rob.c 1.18 660) --- 1_7_4.46(w)/src/rob.c Tue, 20 Mar 2001 11:55:05 -0600 dunemush (pennmush/b/42_rob.c 1.18.1.1 660) *************** *** 1,4 **** ! /* rob.c */ #include "config.h" #include "copyrite.h" --- 1,4 ---- ! /* rob.c, for historical reasons */ #include "config.h" #include "copyrite.h" *************** *** 7,13 **** #include #endif ! /* rob and kill */ #include "conf.h" #include "mushdb.h" --- 7,13 ---- #include #endif ! /* give and kill */ #include "conf.h" #include "mushdb.h" *************** *** 207,213 **** amount = atoi(amnt); /* do amount consistency check */ if (amount < 0 && !Wizard(player)) { ! notify(player, T("Try using the \"rob\" command.")); return; } else if (amount == 0) { notify(player, --- 207,213 ---- amount = atoi(amnt); /* do amount consistency check */ if (amount < 0 && !Wizard(player)) { ! notify(player, T("What is this, a holdup?")); return; } else if (amount == 0) { notify(player, *** 1_7_4.32/src/ident.c Mon, 05 Mar 2001 12:11:07 -0600 dunemush (pennmush/c/8_ident.c 1.18 660) --- 1_7_4.46(w)/src/ident.c Wed, 14 Mar 2001 11:46:08 -0600 dunemush (pennmush/c/8_ident.c 1.19 660) *************** *** 377,387 **** #endif { #ifndef WIN32 ! #ifdef CAN_TAKE_ARGS_IN_FP ! Sigfunc (*old_sig) (int); ! #else ! Sigfunc (*old_sig) (); ! #endif #endif int res; char buf[80]; --- 377,383 ---- #endif { #ifndef WIN32 ! Sigfunc old_sig; #endif int res; char buf[80]; *** 1_7_4.32/src/game.c Sun, 25 Feb 2001 13:37:15 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1 660) --- 1_7_4.46(w)/src/game.c Wed, 14 Mar 2001 11:39:46 -0600 dunemush (pennmush/c/10_game.c 1.50.1.8.1.1.1.1 660) *************** *** 220,244 **** { struct rusage usage; int pid; - #ifndef hpux int psize; - #endif pid = getpid(); - #ifndef hpux psize = getpagesize(); - #endif getrusage(RUSAGE_SELF, &usage); do_rawlog(LT_ERR, T("Process statistics:")); do_rawlog(LT_ERR, T("Time used: %10ld user %10ld sys"), usage.ru_utime.tv_sec, usage.ru_stime.tv_sec); - #ifndef hpux do_rawlog(LT_ERR, "Max res mem: %10ld pages %10ld bytes", usage.ru_maxrss, (usage.ru_maxrss * psize)); - #else - do_rawlog(LT_ERR, "Max res mem: %10 pages", usage.ru_maxrss); - #endif /* hpux */ do_rawlog(LT_ERR, "Integral mem:%10ld shared %10ld private %10ld stack", usage.ru_ixrss, usage.ru_idrss, usage.ru_isrss); do_rawlog(LT_ERR, --- 220,236 ---- *************** *** 1515,1523 **** int i; #endif int pid; - #ifndef hpux int psize; - #endif #ifdef HAS_GETRUSAGE struct rusage usage; #endif /* HAS_GETRUSAGE */ --- 1507,1513 ---- *************** *** 1594,1614 **** /* do process stats */ pid = getpid(); - #ifndef hpux - #ifdef WIN32 - psize = 1024; /* NJG: a guess! */ - #else - #ifdef macintosh - psize = 1024; - #else psize = getpagesize(); - #endif /* macintosh */ - #endif /* WIN32 */ notify(player, tprintf(T("\nProcess ID: %10u %10d bytes per page"), pid, psize)); - #else - notify(player, tprintf(T("\nProcess ID: %10u"), pid)); - #endif /* hpux */ #ifdef linux /* Linux's getrusage() is mostly unimplemented. Just has times, page faults --- 1584,1592 ---- *************** *** 1716,1727 **** getrusage(RUSAGE_SELF, &usage); notify(player, tprintf(T("Time used: %10ld user %10ld sys"), usage.ru_utime.tv_sec, usage.ru_stime.tv_sec)); - #ifndef hpux notify(player, tprintf("Max res mem: %10ld pages %10ld bytes", usage.ru_maxrss, (usage.ru_maxrss * psize))); - #else - notify(player, tprintf("Max res mem: %10ld pages", usage.ru_maxrss)); - #endif /* hpux */ notify(player, tprintf("Integral mem:%10ld shared %10ld private %10ld stack", usage.ru_ixrss, usage.ru_idrss, usage.ru_isrss)); --- 1694,1701 ---- *** 1_7_4.32/src/funstr.c Wed, 21 Feb 2001 09:25:43 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1 660) --- 1_7_4.46(w)/src/funstr.c Thu, 15 Mar 2001 13:31:03 -0600 dunemush (pennmush/c/13_funstr.c 1.28.1.1.1.2 660) *************** *** 494,499 **** --- 494,500 ---- FUNCTION(fun_repeat) { int times; + char *ap; if (!is_integer(args[1])) { safe_str(T(e_int), buff, bp); *************** *** 506,514 **** } if (!*args[0]) return; ! while (times--) ! if (safe_str(args[0], buff, bp) != 0) ! break; } /* ARGSUSED */ --- 507,526 ---- } if (!*args[0]) return; ! ! /* Do the repeat in O(lg n) time. */ ! /* This takes advantage of the fact that we're given a BUFFER_LEN ! * buffer for args[0] that we are free to trash. Huzzah! */ ! ap = args[0] + strlen(args[0]); ! while (times) { ! if (times & 1) { ! if (safe_str(args[0], buff, bp) != 0) ! break; ! } ! safe_str(args[0], args[0], &ap); ! *ap = '\0'; ! times = times >> 1; ! } } /* ARGSUSED */ *************** *** 941,1037 **** /* ARGSUSED */ FUNCTION(fun_ansi) { ! static char tbuff[BUFFER_LEN], sbuff[BUFFER_LEN], *sbp = sbuff; ! const char *arg0 = args[0], *arg1 = args[1]; ! char *s = tbuff, *old_sbp = sbp, *tbp = tbuff; ! process_expression(tbuff, &tbp, &arg0, executor, caller, enactor, PE_DEFAULT, PT_DEFAULT, pe_info); ! *tbp = 0; ! while (*s) { ! switch (*s) { case 'h': /* hilite */ ! safe_str(ANSI_HILITE, sbuff, &sbp); break; case 'i': /* inverse */ ! safe_str(ANSI_INVERSE, sbuff, &sbp); ! break; ! case 'f': /* flash */ ! safe_str(ANSI_BLINK, sbuff, &sbp); break; case 'u': /* underscore */ ! safe_str(ANSI_UNDERSCORE, sbuff, &sbp); break; case 'n': /* normal */ ! safe_str(ANSI_NORMAL, sbuff, &sbp); break; case 'x': /* black fg */ ! safe_str(ANSI_BLACK, sbuff, &sbp); break; case 'r': /* red fg */ ! safe_str(ANSI_RED, sbuff, &sbp); break; case 'g': /* green fg */ ! safe_str(ANSI_GREEN, sbuff, &sbp); break; case 'y': /* yellow fg */ ! safe_str(ANSI_YELLOW, sbuff, &sbp); break; case 'b': /* blue fg */ ! safe_str(ANSI_BLUE, sbuff, &sbp); break; case 'm': /* magenta fg */ ! safe_str(ANSI_MAGENTA, sbuff, &sbp); break; case 'c': /* cyan fg */ ! safe_str(ANSI_CYAN, sbuff, &sbp); break; case 'w': /* white fg */ ! safe_str(ANSI_WHITE, sbuff, &sbp); break; case 'X': /* black bg */ ! safe_str(ANSI_BBLACK, sbuff, &sbp); break; case 'R': /* red bg */ ! safe_str(ANSI_BRED, sbuff, &sbp); break; case 'G': /* green bg */ ! safe_str(ANSI_BGREEN, sbuff, &sbp); break; case 'Y': /* yellow bg */ ! safe_str(ANSI_BYELLOW, sbuff, &sbp); break; case 'B': /* blue bg */ ! safe_str(ANSI_BBLUE, sbuff, &sbp); break; case 'M': /* magenta bg */ ! safe_str(ANSI_BMAGENTA, sbuff, &sbp); break; case 'C': /* cyan bg */ ! safe_str(ANSI_BCYAN, sbuff, &sbp); break; case 'W': /* white bg */ ! safe_str(ANSI_BWHITE, sbuff, &sbp); break; } - s++; } ! *sbp = 0; ! safe_str(old_sbp, buff, bp); ! process_expression(buff, bp, &arg1, executor, caller, enactor, PE_DEFAULT, PT_DEFAULT, pe_info); safe_str(ANSI_NORMAL, buff, bp); - - sbp = old_sbp; - *sbp = 0; - safe_str(sbuff, buff, bp); - } /* ARGSUSED */ --- 953,1085 ---- /* ARGSUSED */ FUNCTION(fun_ansi) { + static char tbuff[BUFFER_LEN], slots[7]; + char const *arg0, *arg1; + char *tbp; + int j; ! tbp = tbuff; ! arg0 = args[0]; process_expression(tbuff, &tbp, &arg0, executor, caller, enactor, PE_DEFAULT, PT_DEFAULT, pe_info); + *tbp = '\0'; ! memset(slots, '\0', 7); ! for (tbp = tbuff; *tbp; tbp++) { ! switch (*tbp) { ! case 'n': /* normal */ ! memset(slots, '\0', 6); ! slots[0] = *tbp; ! break; ! case 'f': /* flash */ ! slots[1] = *tbp; ! break; case 'h': /* hilite */ ! slots[2] = *tbp; break; case 'i': /* inverse */ ! slots[3] = *tbp; break; case 'u': /* underscore */ ! slots[4] = *tbp; ! break; ! case 'b': /* blue fg */ ! case 'c': /* cyan fg */ ! case 'g': /* green fg */ ! case 'm': /* magenta fg */ ! case 'r': /* red fg */ ! case 'w': /* white fg */ ! case 'x': /* black fg */ ! case 'y': /* yellow fg */ ! slots[5] = *tbp; ! break; ! case 'B': /* blue bg */ ! case 'C': /* cyan bg */ ! case 'G': /* green bg */ ! case 'M': /* magenta bg */ ! case 'R': /* red bg */ ! case 'W': /* white bg */ ! case 'X': /* black bg */ ! case 'Y': /* yellow bg */ ! slots[6] = *tbp; break; + } + } + + for (j = 0; j < 7; j++) { + switch (slots[j]) { case 'n': /* normal */ ! safe_str(ANSI_NORMAL, buff, bp); ! break; ! case 'f': /* flash */ ! safe_str(ANSI_BLINK, buff, bp); ! break; ! case 'h': /* hilite */ ! safe_str(ANSI_HILITE, buff, bp); ! break; ! case 'i': /* inverse */ ! safe_str(ANSI_INVERSE, buff, bp); ! break; ! case 'u': /* underscore */ ! safe_str(ANSI_UNDERSCORE, buff, bp); break; case 'x': /* black fg */ ! safe_str(ANSI_BLACK, buff, bp); break; case 'r': /* red fg */ ! safe_str(ANSI_RED, buff, bp); break; case 'g': /* green fg */ ! safe_str(ANSI_GREEN, buff, bp); break; case 'y': /* yellow fg */ ! safe_str(ANSI_YELLOW, buff, bp); break; case 'b': /* blue fg */ ! safe_str(ANSI_BLUE, buff, bp); break; case 'm': /* magenta fg */ ! safe_str(ANSI_MAGENTA, buff, bp); break; case 'c': /* cyan fg */ ! safe_str(ANSI_CYAN, buff, bp); break; case 'w': /* white fg */ ! safe_str(ANSI_WHITE, buff, bp); break; case 'X': /* black bg */ ! safe_str(ANSI_BBLACK, buff, bp); break; case 'R': /* red bg */ ! safe_str(ANSI_BRED, buff, bp); break; case 'G': /* green bg */ ! safe_str(ANSI_BGREEN, buff, bp); break; case 'Y': /* yellow bg */ ! safe_str(ANSI_BYELLOW, buff, bp); break; case 'B': /* blue bg */ ! safe_str(ANSI_BBLUE, buff, bp); break; case 'M': /* magenta bg */ ! safe_str(ANSI_BMAGENTA, buff, bp); break; case 'C': /* cyan bg */ ! safe_str(ANSI_BCYAN, buff, bp); break; case 'W': /* white bg */ ! safe_str(ANSI_BWHITE, buff, bp); break; } } ! arg1 = args[1]; process_expression(buff, bp, &arg1, executor, caller, enactor, PE_DEFAULT, PT_DEFAULT, pe_info); safe_str(ANSI_NORMAL, buff, bp); } /* ARGSUSED */ *** 1_7_4.32/src/funmath.c Wed, 28 Feb 2001 13:26:42 -0600 dunemush (pennmush/c/15_funmath.c 1.38 660) --- 1_7_4.46(w)/src/funmath.c Tue, 20 Mar 2001 12:20:40 -0600 dunemush (pennmush/c/15_funmath.c 1.39 660) *************** *** 1881,1887 **** #endif { const NVAL *x = a, *y = b; ! const double epsilon = pow(10, FLOAT_PRECISION); int eq = (fabs(*x - *y) <= (epsilon * fabs(*x))); return eq ? 0 : (*x > *y ? 1 : -1); } --- 1881,1887 ---- #endif { const NVAL *x = a, *y = b; ! const double epsilon = pow(10, -FLOAT_PRECISION); int eq = (fabs(*x - *y) <= (epsilon * fabs(*x))); return eq ? 0 : (*x > *y ? 1 : -1); } *** 1_7_4.32/hdrs/version.h Wed, 07 Mar 2001 09:12:05 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2 660) --- 1_7_4.46(w)/hdrs/version.h Fri, 16 Mar 2001 17:17:35 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.2 660) *************** *** 1,2 **** ! #define VERSION "PennMUSH version 1.7.4 patchlevel 0 [03/07/2001]" ! #define SHORTVN "PennMUSH 1.7.4p0" --- 1,2 ---- ! #define VERSION "PennMUSH version 1.7.4 patchlevel 1 [03/17/2001]" ! #define SHORTVN "PennMUSH 1.7.4p1" *** 1_7_4.32/hdrs/getpgsiz.h Mon, 24 Jul 2000 10:53:54 -0500 dunemush (pennmush/d/11_getpgsiz.h 1.2 660) --- 1_7_4.46(w)/hdrs/getpgsiz.h Wed, 14 Mar 2001 11:38:11 -0600 dunemush (pennmush/d/11_getpgsiz.h 1.3 660) *************** *** 26,32 **** --- 26,36 ---- #ifdef NBPC #define getpagesize() NBPC #else /* no NBPC either? Bummer */ + #ifdef PAGESIZE #define getpagesize() PAGESIZE + #else /* Sigh. Time for a total guess. */ + #define getpagesize() 1024 + #endif /* no PAGESIZE */ #endif /* no NBPC */ #endif /* no NBPG */ #endif /* no EXEC_PAGESIZE */ *** 1_7_4.32/Configure Thu, 01 Feb 2001 14:47:02 -0600 dunemush (pennmush/d/32_Configure 1.21 710) --- 1_7_4.46(w)/Configure Wed, 14 Mar 2001 14:34:33 -0600 dunemush (pennmush/d/32_Configure 1.21.1.2 710) *************** *** 269,274 **** --- 269,275 ---- cryptlib='' d_crypt='' i_crypt='' + d_force_ipv4='' d_fpsetmask='' d_fpsetround='' i_floatingpoint='' *************** *** 3850,3855 **** --- 3851,3860 ---- set crypt.h i_crypt eval $inhdr + : Do nothing by default + val="$undef" + set d_force_ipv4; eval $setvar + echo " " : see if floatingpoint.h can be included set floatingpoint.h i_floatingpoint *************** *** 6328,6336 **** done : offer to join the mailing list ! list_request='listproc@pennmush.org' ! list_sub="subscribe pennmush $cf_email" ! list_unsub="unsubscribe pennmush $cf_email" list_name="pennmush" $cat <options | options) & PCRE_ANCHORED) != 0; - BOOL startline = (re->options & PCRE_STARTLINE) != 0; #ifdef BACKTRACK_LIMIT - /* This makes gcc throw a lot of errors that can be ignored */ backtrack_count = 0; if (setjmp(backtrack_jmp)) { /* Too much backtracking! */ --- 5081,5090 ---- *************** *** 5107,5115 **** free(match_block.offset_vector); } return PCRE_ERROR_BACKTRACKING; ! } #endif ! if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION; --- 5093,5114 ---- free(match_block.offset_vector); } return PCRE_ERROR_BACKTRACKING; ! } else #endif ! { ! int resetcount, ocount; ! int first_char = -1; ! int req_char = -1; ! int req_char2 = -1; ! unsigned long int ims = 0; ! const uschar *start_bits = NULL; ! const uschar *start_match = (const uschar *) subject + start_offset; ! const uschar *end_subject; ! const uschar *req_char_ptr = start_match - 1; ! const real_pcre *re = (const real_pcre *) external_re; ! const real_pcre_extra *extra = (const real_pcre_extra *) external_extra; ! BOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0; ! BOOL startline = (re->options & PCRE_STARTLINE) != 0; if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION; *************** *** 5370,5375 **** --- 5369,5376 ---- } DPRINTF((">>>> returning %d\n", match_block.errorcode)); + + } return match_block.errorcode; } *** 1_7_4.32/game/restrict.cnf Fri, 19 Jan 2001 09:27:13 -0600 dunemush (pennmush/e/43_restrict.c 1.2.1.1.1.1 600) --- 1_7_4.46(w)/game/restrict.cnf Wed, 21 Mar 2001 14:03:00 -0600 dunemush (pennmush/e/43_restrict.c 1.2.1.1.1.1.1.1 600) *************** *** 34,42 **** restrict_command @lock noguest restrict_command @unlock noguest - # Don't let players rob each other - restrict_command rob nobody - # Don't allow kill (slay still works) #restrict_command kill nobody --- 34,39 ---- *************** *** 48,51 **** #restrict_function wipe nobody #restrict_function create nobody #restrict_function clone nobody ! #restrict_function tel nobody --- 45,49 ---- #restrict_function wipe nobody #restrict_function create nobody #restrict_function clone nobody ! #restrict_function tel nobody ! *** 1_7_4.32/src/mysocket.c Sun, 04 Mar 2001 18:27:45 -0600 dunemush (pennmush/f/0_mysocket.c 1.16.1.1.1.1 660) --- 1_7_4.46(w)/src/mysocket.c Wed, 14 Mar 2001 11:46:29 -0600 dunemush (pennmush/f/0_mysocket.c 1.16.1.1.1.1.1.1 660) *************** *** 167,183 **** hints.ai_family = AF_UNSPEC; /* Try to use IPv6 if available */ hints.ai_socktype = SOCK_STREAM; ! sprintf(cport, "%d", port); if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) { fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res)); ! fprintf(stderr, "Host: %s Port %d\n", host, port); fflush(stderr); return -1; } if (!server) { ! fprintf(stderr, "Couldn't get address for host %s port %d\n", host, port); fflush(stderr); return -1; } --- 167,183 ---- hints.ai_family = AF_UNSPEC; /* Try to use IPv6 if available */ hints.ai_socktype = SOCK_STREAM; ! sprintf(cport, "%hu", port); if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) { fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res)); ! fprintf(stderr, "Host: %s Port %hu\n", host, port); fflush(stderr); return -1; } if (!server) { ! fprintf(stderr, "Couldn't get address for host %s port %hu\n", host, port); fflush(stderr); return -1; } *************** *** 216,222 **** */ if (server == NULL && port != IDPORT) { #endif ! fprintf(stderr, "Couldn't connect to %s on port %d\n", host, port); fflush(stderr); return -1; } --- 216,222 ---- */ if (server == NULL && port != IDPORT) { #endif ! fprintf(stderr, "Couldn't connect to %s on port %hu\n", host, port); fflush(stderr); return -1; } *************** *** 252,275 **** memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; /* Try to use IPv6 if available */ hints.ai_socktype = SOCK_STREAM; ! sprintf(cport, "%d", port); if (strlen(host) == 0) host = NULL; if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) { fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res)); ! fprintf(stderr, "Host: %s Port %d\n", host, port); exit(3); } save = server; if (!server) { ! fprintf(stderr, "Couldn't get address for host %s port %d\n", host, port); exit(3); } --- 252,280 ---- memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; + #ifdef FORCE_IPV4 + hints.ai_family = AF_INET; /* OpenBSD apparently doesn't properly + map IPv4 connections to IPv6 servers. */ + #else hints.ai_family = AF_UNSPEC; /* Try to use IPv6 if available */ + #endif hints.ai_socktype = SOCK_STREAM; ! sprintf(cport, "%hu", port); if (strlen(host) == 0) host = NULL; if ((res = getaddrinfo(host, cport, &hints, &server)) != 0) { fprintf(stderr, "In getaddrinfo: %s\n", gai_strerror(res)); ! fprintf(stderr, "Host: %s Port %hu\n", host, port); exit(3); } save = server; if (!server) { ! fprintf(stderr, "Couldn't get address for host %s port %hu\n", host, port); exit(3); }