This is patch09 to PennMUSH 1.8.0. After applying this patch, you will have version 1.8.0p9 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p1 < 1.8.0-patch09 make clean make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1', not just 'patch -p1'. Unix (or cygwin) users need not worry about failed hunks in src/switchinc.c, hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically rebuilt on compile. On the off chance they appear not to be, simply rm them and re-run make. Then @shutdown and restart your MUSH. - Alan/Javelin In this patch: Fixes: * On amd64 systems running FreeBSD (and possibly others), connections could break after about 32 connections. Report by nails@M*U*S*H. * The CONF and CONFGROUP structures are renamed PENNCONF and PENNCONFGROUP to work around brokenness in Debian's openssl0.9.8 package. Prereq: 1.8.0p8 *** 1_8_0.81/Patchlevel Thu, 15 Sep 2005 18:00:46 -0500 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.43.1.8 600) --- 1_8_0.82(w)/Patchlevel Mon, 12 Dec 2005 12:23:25 -0600 dunemush (pennmush/5_Patchlevel 1.17.1.11.1.43.1.8 600) *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.0p8 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.0p9 *** 1_8_0.81/src/local.dst Thu, 02 Sep 2004 11:04:56 -0500 dunemush (pennmush/b/19_local.dst 1.22 660) --- 1_8_0.82(w)/src/local.dst Mon, 12 Dec 2005 12:24:09 -0600 dunemush (pennmush/b/19_local.dst 1.22 660) *************** *** 45,51 **** /* Initial size of this hashtable should be close to the number of * add_config()'s you plan to do. */ ! hashinit(&local_options, 4, sizeof(CONF)); #ifdef EXAMPLE /* Call add_config for each config parameter you want to add. --- 45,51 ---- /* Initial size of this hashtable should be close to the number of * add_config()'s you plan to do. */ ! hashinit(&local_options, 4, sizeof(PENNCONF)); #ifdef EXAMPLE /* Call add_config for each config parameter you want to add. *** 1_8_0.81/src/conf.c Sat, 20 Aug 2005 19:48:00 -0500 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3.1.2.1.15.1.1.1.1.1.1.1.41.1.1.1.1.1.1 660) --- 1_8_0.82(w)/src/conf.c Mon, 12 Dec 2005 12:24:09 -0600 dunemush (pennmush/c/31_conf.c 1.41.2.3.1.3.1.2.1.15.1.1.1.1.1.1.1.41.1.1.1.1.1.1 660) *************** *** 39,46 **** time_t mudtime; /**< game time, in seconds */ static void show_compile_options(dbref player); ! static char *config_list_helper(dbref player, CONF *cp, int lc); ! static char *config_list_helper2(dbref player, CONF *cp, int lc); OPTTAB options; /**< The table of configuration options */ HASHTAB local_options; /**< Hash table for local config options */ --- 39,46 ---- time_t mudtime; /**< game time, in seconds */ static void show_compile_options(dbref player); ! static char *config_list_helper(dbref player, PENNCONF * cp, int lc); ! static char *config_list_helper2(dbref player, PENNCONF * cp, int lc); OPTTAB options; /**< The table of configuration options */ HASHTAB local_options; /**< Hash table for local config options */ *************** *** 49,55 **** void conf_default_set(void); /** Table of all runtime configuration options. */ ! CONF conftable[] = { {"input_database", cf_str, options.input_db, sizeof options.input_db, 0, "files"} , --- 49,55 ---- void conf_default_set(void); /** Table of all runtime configuration options. */ ! PENNCONF conftable[] = { {"input_database", cf_str, options.input_db, sizeof options.input_db, 0, "files"} , *************** *** 504,513 **** const char *name; /**< name of group */ const char *desc; /**< description of group */ int viewperms; /**< who can view this group */ ! } CONFGROUP; /** The table of all configuration groups. */ ! CONFGROUP confgroups[] = { {"attribs", "Options affecting attributes", 0}, {"chat", "Chat system options", 0}, {"cmds", "Options affecting command behavior", 0}, --- 504,513 ---- const char *name; /**< name of group */ const char *desc; /**< description of group */ int viewperms; /**< who can view this group */ ! } PENNCONFGROUP; /** The table of all configuration groups. */ ! PENNCONFGROUP confgroups[] = { {"attribs", "Options affecting attributes", 0}, {"chat", "Chat system options", 0}, {"cmds", "Options affecting command behavior", 0}, *************** *** 527,539 **** {NULL, NULL, 0} }; ! /** Returns a pointer to a newly allocated CONF object. ! * \return pointer to newly allocated CONF object. */ ! CONF * new_config(void) { ! return ((CONF *) mush_malloc(sizeof(CONF), "config")); } /** Add a new local runtime configuration parameter to local_options. --- 527,539 ---- {NULL, NULL, 0} }; ! /** Returns a pointer to a newly allocated PENNCONF object. ! * \return pointer to newly allocated PENNCONF object. */ ! PENNCONF * new_config(void) { ! return ((PENNCONF *) mush_malloc(sizeof(PENNCONF), "config")); } /** Add a new local runtime configuration parameter to local_options. *************** *** 546,556 **** * \param group name of the option group the option should display with. * \return pointer to configuration structure or NULL for failure. */ ! CONF * add_config(const char *name, config_func handler, void *loc, int max, const char *group) { ! CONF *cnf; if ((cnf = get_config(name))) return cnf; if ((cnf = new_config()) == NULL) --- 546,556 ---- * \param group name of the option group the option should display with. * \return pointer to configuration structure or NULL for failure. */ ! PENNCONF * add_config(const char *name, config_func handler, void *loc, int max, const char *group) { ! PENNCONF *cnf; if ((cnf = get_config(name))) return cnf; if ((cnf = new_config()) == NULL) *************** *** 566,581 **** } /** Return a local runtime configuration parameter by name. ! * This function returns a point to a configuration structure (CONF *) * if one exists in the local runtime options that matches the given * name. Only local_options is searched. * \param name name of the configuration option. * \return pointer to configuration structure or NULL for failure. */ ! CONF * get_config(const char *name) { ! return ((CONF *) hashfind(name, &local_options)); } /** Parse a boolean configuration option. --- 566,581 ---- } /** Return a local runtime configuration parameter by name. ! * This function returns a point to a configuration structure (PENNCONF *) * if one exists in the local runtime options that matches the given * name. Only local_options is searched. * \param name name of the configuration option. * \return pointer to configuration structure or NULL for failure. */ ! PENNCONF * get_config(const char *name) { ! return ((PENNCONF *) hashfind(name, &local_options)); } /** Parse a boolean configuration option. *************** *** 820,826 **** int config_set(const char *opt, char *val, int source, int restrictions) { ! CONF *cp; char *p; if (!val) --- 820,826 ---- int config_set(const char *opt, char *val, int source, int restrictions) { ! PENNCONF *cp; char *p; if (!val) *************** *** 984,991 **** return i; } } ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { int i = 0; if ((!source || (cp->group && strcmp(cp->group, "files") != 0 && strcmp(cp->group, "messages") != 0)) --- 984,991 ---- return i; } } ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { int i = 0; if ((!source || (cp->group && strcmp(cp->group, "files") != 0 && strcmp(cp->group, "messages") != 0)) *************** *** 1206,1212 **** */ FILE *fp = NULL; ! CONF *cp; char tbuf1[BUFFER_LEN]; char *p, *q, *s; --- 1206,1212 ---- */ FILE *fp = NULL; ! PENNCONF *cp; char tbuf1[BUFFER_LEN]; char *p, *q, *s; *************** *** 1302,1309 **** cp->name); } } ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { if (!cp->overridden) { do_rawlog(LT_ERR, T --- 1302,1309 ---- cp->name); } } ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { if (!cp->overridden) { do_rawlog(LT_ERR, T *************** *** 1355,1362 **** void do_config_list(dbref player, const char *type, int lc) { ! CONFGROUP *cgp; ! CONF *cp; if (SUPPORT_PUEBLO) notify_noenter(player, tprintf("%cSAMP%c", TAG_START, TAG_END)); --- 1355,1362 ---- void do_config_list(dbref player, const char *type, int lc) { ! PENNCONFGROUP *cgp; ! PENNCONF *cp; if (SUPPORT_PUEBLO) notify_noenter(player, tprintf("%cSAMP%c", TAG_START, TAG_END)); *************** *** 1380,1387 **** } if (!found) { /* Ok, maybe a local option? */ ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->name, type)) { notify(player, config_list_helper(player, cp, lc)); found = 1; --- 1380,1387 ---- } if (!found) { /* Ok, maybe a local option? */ ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->name, type)) { notify(player, config_list_helper(player, cp, lc)); found = 1; *************** *** 1407,1414 **** notify(player, config_list_helper(player, cp, lc)); } } ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->group, cgp->name)) { notify(player, config_list_helper(player, cp, lc)); } --- 1407,1414 ---- notify(player, config_list_helper(player, cp, lc)); } } ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->group, cgp->name)) { notify(player, config_list_helper(player, cp, lc)); } *************** *** 1431,1437 **** /** Lowercase a string if we've been asked to */ #define MAYBE_LC(x) (lc ? strlower(x) : x) static char * ! config_list_helper(dbref player __attribute__ ((__unused__)), CONF *cp, int lc) { static char result[BUFFER_LEN]; char *bp = result; --- 1431,1438 ---- /** Lowercase a string if we've been asked to */ #define MAYBE_LC(x) (lc ? strlower(x) : x) static char * ! config_list_helper(dbref player ! __attribute__ ((__unused__)), PENNCONF * cp, int lc) { static char result[BUFFER_LEN]; char *bp = result; *************** *** 1471,1477 **** /* This one doesn't return the names */ static char * ! config_list_helper2(dbref player __attribute__ ((__unused__)), CONF *cp, int lc __attribute__ ((__unused__))) { static char result[BUFFER_LEN]; --- 1472,1479 ---- /* This one doesn't return the names */ static char * ! config_list_helper2(dbref player ! __attribute__ ((__unused__)), PENNCONF * cp, int lc __attribute__ ((__unused__))) { static char result[BUFFER_LEN]; *************** *** 1511,1517 **** */ FUNCTION(fun_config) { ! CONF *cp; if (args[0] && *args[0]) { for (cp = conftable; cp->name; cp++) { --- 1513,1519 ---- */ FUNCTION(fun_config) { ! PENNCONF *cp; if (args[0] && *args[0]) { for (cp = conftable; cp->name; cp++) { *************** *** 1520,1527 **** return; } } ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->name, args[0])) { safe_str(config_list_helper2(executor, cp, 0), buff, bp); return; --- 1522,1529 ---- return; } } ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { if (cp->group && !strcasecmp(cp->name, args[0])) { safe_str(config_list_helper2(executor, cp, 0), buff, bp); return; *************** *** 1534,1541 **** safe_str(cp->name, buff, bp); safe_chr(' ', buff, bp); } ! for (cp = (CONF *) hash_firstentry(&local_options); cp; ! cp = (CONF *) hash_nextentry(&local_options)) { safe_str(cp->name, buff, bp); safe_chr(' ', buff, bp); } --- 1536,1543 ---- safe_str(cp->name, buff, bp); safe_chr(' ', buff, bp); } ! for (cp = (PENNCONF *) hash_firstentry(&local_options); cp; ! cp = (PENNCONF *) hash_nextentry(&local_options)) { safe_str(cp->name, buff, bp); safe_chr(' ', buff, bp); } *************** *** 1550,1556 **** void do_enable(dbref player, const char *param, int state) { ! CONF *cp; for (cp = conftable; cp->name; cp++) { if (cp->group && !strcasecmp(cp->name, param)) { --- 1552,1558 ---- void do_enable(dbref player, const char *param, int state) { ! PENNCONF *cp; for (cp = conftable; cp->name; cp++) { if (cp->group && !strcasecmp(cp->name, param)) { *** 1_8_0.81/src/bsd.c Sat, 01 Jan 2005 15:46:51 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.8.2.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.48.1.1.1.15.1.1 660) --- 1_8_0.82(w)/src/bsd.c Mon, 12 Dec 2005 12:24:09 -0600 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12.1.1.1.1.1.2.1.1.1.13.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.8.2.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.1.1.48.1.1.1.15.1.2 660) *************** *** 981,987 **** socklen_t addr_len; int newsock; #endif ! int input_ready, output_ready; #ifdef NT_TCP if (platform != VER_PLATFORM_WIN32_NT) --- 981,987 ---- socklen_t addr_len; int newsock; #endif ! unsigned long input_ready, output_ready; #ifdef NT_TCP if (platform != VER_PLATFORM_WIN32_NT) *** 1_8_0.81/hdrs/version.h Thu, 15 Sep 2005 18:00:46 -0500 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.45.1.9 660) --- 1_8_0.82(w)/hdrs/version.h Mon, 12 Dec 2005 12:24:10 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.7.1.9.1.1.1.17.1.45.1.9 660) *************** *** 1,4 **** #define VERSION "1.8.0" ! #define PATCHLEVEL "8" ! #define PATCHDATE "[09/15/2005]" ! #define NUMVERSION 1008000008 --- 1,4 ---- #define VERSION "1.8.0" ! #define PATCHLEVEL "9" ! #define PATCHDATE "[12/12/2005]" ! #define NUMVERSION 1008000009 *** 1_8_0.81/hdrs/conf.h Fri, 06 Aug 2004 09:38:25 -0500 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.4.1.20.1.24 660) --- 1_8_0.82(w)/hdrs/conf.h Mon, 12 Dec 2005 12:24:10 -0600 dunemush (pennmush/d/20_conf.h 1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.1.2.1.1.2.1.2.13.1.4.1.20.1.24 660) *************** *** 91,97 **** int max; /**< max: string length, integer value. */ int overridden; /**< Has the default been overridden? */ const char *group; /**< The option's group name */ ! } CONF; /** Runtime configuration options. * This large structure stores all of the runtime configuration options --- 91,97 ---- int max; /**< max: string length, integer value. */ int overridden; /**< Has the default been overridden? */ const char *group; /**< The option's group name */ ! } PENNCONF; /** Runtime configuration options. * This large structure stores all of the runtime configuration options *************** *** 272,281 **** extern OPTTAB options; extern HASHTAB local_options; ! extern CONF *add_config(const char *name, config_func handler, void *loc, ! int max, const char *group); ! extern CONF *new_config(void); ! extern CONF *get_config(const char *name); int cf_bool(const char *opt, const char *val, void *loc, int maxval, int source); --- 272,281 ---- extern OPTTAB options; extern HASHTAB local_options; ! extern PENNCONF *add_config(const char *name, config_func handler, void *loc, ! int max, const char *group); ! extern PENNCONF *new_config(void); ! extern PENNCONF *get_config(const char *name); int cf_bool(const char *opt, const char *val, void *loc, int maxval, int source); *** 1_8_0.81/game/txt/hlp/pennvOLD.hlp Thu, 08 Sep 2005 09:09:07 -0500 dunemush (pennmush/g/30_pennvOLD.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.2.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1 660) --- 1_8_0.82(w)/game/txt/hlp/pennvOLD.hlp Mon, 12 Dec 2005 12:24:10 -0600 dunemush (pennmush/g/30_pennvOLD.h 1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.9.1.2.1.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 660) *************** *** 4417,4423 **** For information on a specific patchlevel of one of the versions listed, type 'help p'. For example, 'help 1.7.2p3' ! 1.8.0: 0, 1, 2, 3, 4, 5, 6, 7, 8 1.7.7: 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 --- 4417,4423 ---- For information on a specific patchlevel of one of the versions listed, type 'help p'. For example, 'help 1.7.2p3' ! 1.8.0: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 1.7.7: 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 *** 1_8_0.81/game/txt/hlp/pennv180.hlp Thu, 15 Sep 2005 18:09:51 -0500 dunemush (pennmush/h/28_pennv180.h 1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.1.2 660) --- 1_8_0.82(w)/game/txt/hlp/pennv180.hlp Mon, 12 Dec 2005 12:24:10 -0600 dunemush (pennmush/h/28_pennv180.h 1.1.1.2.1.1.1.2.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.2.1.2.1.1 660) *************** *** 1,4 **** ! & 1.8.0p8 & changes This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions --- 1,4 ---- ! & 1.8.0p9 & changes This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions *************** *** 11,16 **** --- 11,27 ---- A list of the patchlevels associated with each release can be read in 'help patchlevels'. + Version 1.8.0 patchlevel 9 December 12, 2005 + + Fixes: + * On amd64 systems running FreeBSD (and possibly others), connections + could break after about 32 connections. Report by nails@M*U*S*H. + * The CONF and CONFGROUP structures are renamed PENNCONF and + PENNCONFGROUP to work around brokenness in Debian's openssl0.9.8 + package. + + + & 1.8.0p8 Version 1.8.0 patchlevel 8 September 15, 2005 Fixes: *** 1_8_0.81/CHANGES.180 Thu, 15 Sep 2005 18:09:51 -0500 dunemush (pennmush/h/21_CHANGES.18 1.51 600) --- 1_8_0.82(w)/CHANGES.180 Mon, 12 Dec 2005 12:22:38 -0600 dunemush (pennmush/h/21_CHANGES.18 1.52 600) *************** *** 12,17 **** --- 12,27 ---- ========================================================================== + Version 1.8.0 patchlevel 9 December 12, 2005 + + Fixes: + * On amd64 systems running FreeBSD (and possibly others), connections + could break after about 32 connections. Report by nails@M*U*S*H. + * The CONF and CONFGROUP structures are renamed PENNCONF and + PENNCONFGROUP to work around brokenness in Debian's openssl0.9.8 + package. + + Version 1.8.0 patchlevel 8 September 15, 2005 Fixes: