Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package siege for openSUSE:Factory checked 
in at 2026-10-28 17:48:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/siege (Old)
 and      /work/SRC/openSUSE:Factory/.siege.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "siege"

Wed Oct 28 17:48:24 2026 rev:15 rq:1393256 version:4.2.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/siege/siege.changes      2026-08-20 
16:17:27.476830926 +0200
+++ /work/SRC/openSUSE:Factory/.siege.new.2252680/siege.changes 2026-10-28 
17:48:28.423899053 +0100
@@ -1,0 +2,10 @@
+Wed Oct 28 06:39:21 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 4.2.2:
+  * New -E/--extended and -e/--extended-errors options printing
+    a per-code breakdown of HTTP error statuses, in standard
+    and JSON output modes
+  * Fix cookie parsing for RFC850 two-digit dates (from 4.2.1)
+  * Silence OpenSSL deprecation warnings
+
+-------------------------------------------------------------------

Old:
----
  siege-4.2.0.tar.gz

New:
----
  siege-4.2.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ siege.spec ++++++
--- /var/tmp/diff_new_pack.CLi2ci/_old  2026-10-28 17:48:29.207931852 +0100
+++ /var/tmp/diff_new_pack.CLi2ci/_new  2026-10-28 17:48:29.210931978 +0100
@@ -18,7 +18,7 @@
 
 
 Name:           siege
-Version:        4.2.0
+Version:        4.2.2
 Release:        0
 Summary:        HTTP Regression Testing/Benchmarking Utility
 License:        GPL-2.0-or-later

++++++ siege-4.2.0.tar.gz -> siege-4.2.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/ChangeLog new/siege-4.2.2/ChangeLog
--- old/siege-4.2.0/ChangeLog   2026-08-18 21:16:15.000000000 +0200
+++ new/siege-4.2.2/ChangeLog   2026-10-27 20:14:08.000000000 +0100
@@ -1,6 +1,18 @@
 To email a contributor remove "DELETE" from the email address.
 (The DELETEs are necessary as this list is published online.)
 
+2026/10/27 Salma El-Sayed https://github.com/salmaaliia
+ * src/auth.c              Silenced openssl deprecation warnings (JF)
+ * src/browser.c           Collect and count HTTP errors by type
+ * src/browser.h           Prototype: STATUS_MAP * 
browser_get_status_map(BROWSER this);
+ * src/main.c              Added extended and extended-errors to getopts
+ * setup.h                 extended and extended-errors helpers
+ * src/version.c           Version increment: 4.2.2 (JF)
+
+2026/09/30 Jeffrey Fulmer https://www.joedog.org/support/
+ * src/cookie.c            Fixed parsing error for RFC850 two-digit dates
+ * src/version.c           Version increment: 4.2.1
+
 2026/08/18 Jeffrey Fulmer https://www.joedog.org/support/
  * src/init.c              Fixed empty test for logfile[] 
  * src/ftp.c               Made Macintosh clang happy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/configure new/siege-4.2.2/configure
--- old/siege-4.2.0/configure   2026-08-18 21:17:05.000000000 +0200
+++ new/siege-4.2.2/configure   2026-10-27 20:16:55.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for siege 4.2.0.
+# Generated by GNU Autoconf 2.69 for siege 4.2.2.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -587,8 +587,8 @@
 # Identity of this package.
 PACKAGE_NAME='siege'
 PACKAGE_TARNAME='siege'
-PACKAGE_VERSION='4.2.0'
-PACKAGE_STRING='siege 4.2.0'
+PACKAGE_VERSION='4.2.2'
+PACKAGE_STRING='siege 4.2.2'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1352,7 +1352,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 siege 4.2.0 to adapt to many kinds of systems.
+\`configure' configures siege 4.2.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1423,7 +1423,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of siege 4.2.0:";;
+     short | recursive ) echo "Configuration of siege 4.2.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1539,7 +1539,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-siege configure 4.2.0
+siege configure 4.2.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1958,7 +1958,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by siege $as_me 4.2.0, which was
+It was created by siege $as_me 4.2.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2823,7 +2823,7 @@
 
 # Define the identity of the package.
  PACKAGE='siege'
- VERSION='4.2.0'
+ VERSION='4.2.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15251,7 +15251,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by siege $as_me 4.2.0, which was
+This file was extended by siege $as_me 4.2.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15317,7 +15317,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-siege config.status 4.2.0
+siege config.status 4.2.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/doc/bombardment.1.in 
new/siege-4.2.2/doc/bombardment.1.in
--- old/siege-4.2.0/doc/bombardment.1.in        2026-08-18 21:17:06.000000000 
+0200
+++ new/siege-4.2.2/doc/bombardment.1.in        2026-10-27 20:16:56.000000000 
+0100
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "BOMBARDMENT 1"
-.TH BOMBARDMENT 1 "2026-08-18" "JoeDog" "bombardment"
+.TH BOMBARDMENT 1 "2026-10-27" "JoeDog" "bombardment"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/doc/siege.1.in 
new/siege-4.2.2/doc/siege.1.in
--- old/siege-4.2.0/doc/siege.1.in      2026-08-18 21:17:06.000000000 +0200
+++ new/siege-4.2.2/doc/siege.1.in      2026-10-27 20:16:56.000000000 +0100
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SIEGE 1"
-.TH SIEGE 1 "2026-08-18" "JoeDog" "Siege Load Tester"
+.TH SIEGE 1 "2026-10-27" "JoeDog" "Siege Load Tester"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/doc/siege.config.1.in 
new/siege-4.2.2/doc/siege.config.1.in
--- old/siege-4.2.0/doc/siege.config.1.in       2026-08-18 21:17:06.000000000 
+0200
+++ new/siege-4.2.2/doc/siege.config.1.in       2026-10-27 20:16:56.000000000 
+0100
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SIEGE.CONFIG 1"
-.TH SIEGE.CONFIG 1 "2026-08-18" "JoeDog" "siege.config utility"
+.TH SIEGE.CONFIG 1 "2026-10-27" "JoeDog" "siege.config utility"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/doc/siege2csv.1.in 
new/siege-4.2.2/doc/siege2csv.1.in
--- old/siege-4.2.0/doc/siege2csv.1.in  2026-08-18 21:17:06.000000000 +0200
+++ new/siege-4.2.2/doc/siege2csv.1.in  2026-10-27 20:16:56.000000000 +0100
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "BOMBARDMENT 1"
-.TH BOMBARDMENT 1 "2026-08-18" "JoeDog" "siege2csv"
+.TH BOMBARDMENT 1 "2026-10-27" "JoeDog" "siege2csv"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/auth.c new/siege-4.2.2/src/auth.c
--- old/siege-4.2.0/src/auth.c  2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/auth.c  2026-10-27 20:01:40.000000000 +0100
@@ -39,6 +39,11 @@
 #include <openssl/des.h>
 #include <openssl/md4.h>
 #include <openssl/opensslv.h>
+# if OPENSSL_VERSION_NUMBER >= 0x30000000L
+#  if defined(__GNUC__) || defined(__clang__)
+#   pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#  endif
+# endif
 # if OPENSSL_VERSION_NUMBER < 0x00907001L
 #  define DES_key_schedule des_key_schedule
 #  define DES_cblock des_cblock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/browser.c 
new/siege-4.2.2/src/browser.c
--- old/siege-4.2.0/src/browser.c       2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/browser.c       2026-10-27 20:01:40.000000000 +0100
@@ -104,6 +104,7 @@
   unsigned long hits;
   unsigned long long bytes;
   unsigned int  rseed;
+  STATUS_MAP status_map;
 };
 
 size_t BROWSERSIZE = sizeof(struct BROWSER_T);
@@ -229,6 +230,12 @@
   return this->lomark;
 }
 
+STATUS_MAP *
+browser_get_status_map(BROWSER this)
+{
+  return &(this->status_map);
+}
+
 void *
 start(BROWSER this)
 {
@@ -504,6 +511,12 @@
 
   code = response_get_code(resp);
 
+  if (my.extended == EXT_ALL && code >= 200 && code < 600) {
+    status_map_increment(&(this->status_map), code, 1);
+  } else if (my.extended == EXT_ERRORS && code >= 400 && code < 600) {
+    status_map_increment(&(this->status_map), code, 1);
+  }
+
   if (code == 418) {
     /**
      * I don't know what server we're talking to but I 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/browser.h 
new/siege-4.2.2/src/browser.h
--- old/siege-4.2.0/src/browser.h       2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/browser.h       2026-10-27 20:01:40.000000000 +0100
@@ -45,5 +45,6 @@
 unsigned int browser_get_fail(BROWSER this);
 float    browser_get_himark(BROWSER this);
 float    browser_get_lomark(BROWSER this);
+STATUS_MAP * browser_get_status_map(BROWSER this);
 
 #endif/*__BROWSER_H*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/cookie.c new/siege-4.2.2/src/cookie.c
--- old/siege-4.2.0/src/cookie.c        2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/cookie.c        2026-10-27 18:54:10.000000000 +0100
@@ -14,7 +14,7 @@
 size_t  COOKIESIZE = sizeof(struct COOKIE_T);
 
 private BOOLEAN __parse_input(COOKIE this, char *str, char *host);
-private int     __parse_time(const char *str);
+private time_t  __parse_time(const char *str);
 private time_t  __timegm(struct tm *tm);
 private int     __mkmonth(char * s, char ** ends);
 private char *   months[12] = {
@@ -575,8 +575,8 @@
  *  Wkd Mon 00 00:00:00 0000 GMT    (CTIME)
  *  1*DIGIT (delta-seconds)
  */
-private int
-__parse_time(const char *str) 
+private time_t 
+__parse_time(const char *str)
 {
   char *s;
   struct tm tm;
@@ -594,8 +594,14 @@
       if ((int)strlen(s) < 18) return 0;
       tm.tm_mday = strtol(s, &s, 10);
       tm.tm_mon  = __mkmonth(++s, &s);
-      tm.tm_year = strtol(++s, &s, 10);
-      tm.tm_year += (tm.tm_year < 70) ? 100 : 0;  // 2-digit year correction
+
+      long year = strtol(++s, &s, 10);
+      if (year >= 1900) {
+        tm.tm_year = year - 1900;
+      } else {
+        tm.tm_year = year + ((year < 70) ? 100 : 0);
+      }
+
       tm.tm_hour = strtol(++s, &s, 10);
       tm.tm_min  = strtol(++s, &s, 10);
       tm.tm_sec  = strtol(++s, &s, 10);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/init.c new/siege-4.2.2/src/init.c
--- old/siege-4.2.0/src/init.c  2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/init.c  2026-10-27 20:01:40.000000000 +0100
@@ -123,6 +123,7 @@
   my.chunked        = FALSE;
   my.unique         = TRUE;
   my.json_output    = FALSE;
+  my.extended       = EXT_NONE;
   my.extra[0]       = 0;
   my.follow         = TRUE;
   my.zero_ok        = TRUE; 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/main.c new/siege-4.2.2/src/main.c
--- old/siege-4.2.0/src/main.c  2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/main.c  2026-10-27 20:01:40.000000000 +0100
@@ -84,6 +84,8 @@
   { "user-agent",   required_argument, NULL, 'A' },
   { "content-type", required_argument, NULL, 'T' },
   { "json-output",  no_argument,       NULL, 'j' },
+  { "extended",     no_argument,       NULL, 'E' },
+  { "extended-errors", no_argument,    NULL, 'e' },
   {0, 0, 0, 0}
 };
 
@@ -158,6 +160,8 @@
   puts("  -A, --user-agent=\"text\"   Sets User-Agent in request" ); 
   puts("  -T, --content-type=\"text\" Sets Content-Type in request" ); 
   puts("  -j, --json-output         JSON OUTPUT, print final stats to stdout 
as JSON");
+  puts("  -E, --extended            EXTENDED, print breakdown of all HTTP 
status codes");
+  puts("  -e, --extended-errors     EXTENDED ERRORS, print breakdown of each 
error code");
   puts("      --no-parser           NO PARSER, turn off the HTML page parser");
   puts("      --no-follow           NO FOLLOW, do not follow HTTP redirects");
   puts("");
@@ -180,7 +184,7 @@
   strcpy(my.rc, "");
   
   while( a > -1 ){
-    a = getopt_long(argc, argv, "VhvqCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", 
long_options, (int*)0);
+    a = getopt_long(argc, argv, "VhvqEeCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", 
long_options, (int*)0);
     if(a == 'R'){
       strcpy(my.rc, optarg);
       a = -1;
@@ -199,7 +203,7 @@
 {
   int c = 0;
   int nargs;
-  while ((c = getopt_long(argc, argv, "VhvqCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", 
long_options, (int *)0)) != EOF) {
+  while ((c = getopt_long(argc, argv, 
"VhvqEeCDNFpgl::ibr:t:f:d:c:m:H:R:A:T:j", long_options, (int *)0)) != EOF) {
   switch (c) {
       case 'V':
         display_version(TRUE);
@@ -302,6 +306,12 @@
       case 'j':
         my.json_output = TRUE;
         break;
+      case 'E':
+        my.extended = EXT_ALL;
+        break;
+      case 'e':
+        my.extended = EXT_ERRORS;
+        break;
 
     } /* end of switch( c )           */
   }   /* end of while c = getopt_long */
@@ -423,6 +433,8 @@
   pthread_t cease; 
   pthread_t timer;  
   pthread_attr_t scope_attr;
+  STATUS_MAP status_count;
+  memset(&status_count, 0, sizeof(STATUS_MAP));
 
 
   file = xmalloc(sizeof (char*) * length);
@@ -569,6 +581,7 @@
     data_set_highest      (data, browser_get_himark(B));
     data_set_lowest       (data, browser_get_lomark(B));
     data_increment_cookies(data, browser_get_cookies(B));
+    status_map_merge       (&status_count, browser_get_status_map(B));
   } crew_destroy(crew);
 
   __save_cookies(file, data_get_cookies(data));
@@ -598,6 +611,9 @@
     fprintf(stderr, "Failed transactions:\t%9u\n",          my.failed);
     fprintf(stderr, "Longest transaction:\t%12.2f ms\n",        1000.0f * 
data_get_highest(data));
     fprintf(stderr, "Shortest transaction:\t%12.2f ms\n",       1000.0f * 
data_get_lowest(data));
+    if (my.extended != EXT_NONE) {
+      status_map_print(&status_count);
+    }
     fprintf(stderr, " \n");
   }
 
@@ -628,7 +644,10 @@
 
     printf("\t\"failed_transactions\":\t\t%12u,\n", my.failed);
     printf("\t\"longest_transaction\":\t\t%12.2f,\n", data_get_highest(data));
-    printf("\t\"shortest_transaction\":\t\t%12.2f\n", data_get_lowest(data));
+    printf("\t\"shortest_transaction\":\t\t%12.2f%s\n", data_get_lowest(data), 
(my.extended != EXT_NONE) ? "," : "");
+    if (my.extended != EXT_NONE) {
+      status_map_print_json(&status_count);
+    }
     puts("}");
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/setup.h new/siege-4.2.2/src/setup.h
--- old/siege-4.2.0/src/setup.h 2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/setup.h 2026-10-27 20:01:40.000000000 +0100
@@ -133,6 +133,30 @@
   char **line;
 } LINES;
 
+typedef enum {
+  EXT_NONE   = 0,
+  EXT_ERRORS = 1,  /* --extended-errors (4xx, 5xx) */
+  EXT_ALL    = 2   /* --extended (all codes: 2xx-5xx) */
+} EXT_MODE;
+
+#define MAX_STATUS_TYPES  64
+
+typedef struct{
+  int          code;   /* HTTP status code, e.g. 404, 500 */
+  unsigned int count;  /* Number of occurrences */
+} STATUS_ENTRY;
+
+typedef struct {
+  STATUS_ENTRY entries[MAX_STATUS_TYPES];
+  int         total_types;
+} STATUS_MAP;
+
+void status_map_increment(STATUS_MAP *map, int code, unsigned int count);
+void status_map_sort(STATUS_MAP *map);
+void status_map_merge(STATUS_MAP *dest, const STATUS_MAP *src);
+void status_map_print(STATUS_MAP *map);
+void status_map_print_json(STATUS_MAP *map);
+
 void display_help();
 void display_version(BOOLEAN b);
 
@@ -197,7 +221,8 @@
   BOOLEAN login;         /* boolean, client must login first.       */
   char    *loginurl;     /* XXX: deprecated the initial login URL   */
   ARRAY   lurl;
-  ARRAY   aurl; 
+  ARRAY   aurl;
+  EXT_MODE extended;     /* extended reporting mode */
   int     failures;      /* number of failed attempts before abort. */
   int     failed;        /* total number of socket failures.        */
   BOOLEAN escape;        /* boolean, TRUE == url-escaping           */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/util.c new/siege-4.2.2/src/util.c
--- old/siege-4.2.0/src/util.c  2026-08-18 20:52:31.000000000 +0200
+++ new/siege-4.2.2/src/util.c  2026-10-27 20:01:40.000000000 +0100
@@ -415,3 +415,103 @@
   return NULL;
 }
 #endif
+
+/**
+ * Increment the count for an error code, or add it as a new entry.
+ */
+void
+status_map_increment(STATUS_MAP *map, int code, unsigned int count)
+{
+  if (map == NULL || count == 0)  return;
+
+  for (int i = 0; i < map->total_types; i++) {
+    if(map->entries[i].code == code) {
+      map->entries[i].count += count;
+      return;
+    }
+  }
+
+  if (map->total_types < MAX_STATUS_TYPES) {
+    map->entries[map->total_types].code = code;
+    map->entries[map->total_types].count = count;
+    map->total_types++;
+  }
+}
+
+/**
+ * Sort error map entries in ascending numerical order of HTTP status code.
+ */
+void
+status_map_sort(STATUS_MAP *map)
+{
+  if (map == NULL || map->total_types <= 1) return;
+
+  for (int i = 0; i < map->total_types - 1; i++) {
+    for (int j = 0; j < map->total_types - i - 1; j++) {
+      if (map->entries[j].code > map->entries[j + 1].code) {
+        STATUS_ENTRY temp = map->entries[j];
+        map->entries[j] = map->entries[j + 1];
+        map->entries[j + 1] = temp;
+      }
+    }
+  }
+}
+
+/**
+ * Merge all error codes from a worker's map into the main total map.
+ */
+void
+status_map_merge(STATUS_MAP *dest, const STATUS_MAP *src)
+{
+  if (dest == NULL || src == NULL) return;
+
+  for(int i = 0; i < src->total_types; i++) {
+    status_map_increment(dest, src->entries[i].code, src->entries[i].count);
+  }
+}
+
+/**
+ * Sort and print the error breakdown in Siege's summary table format.
+ */
+void
+status_map_print(STATUS_MAP *map)
+{
+  if (map == NULL || map->total_types == 0) return;
+
+  status_map_sort(map);
+
+  if (my.extended == EXT_ERRORS) {
+    fprintf(stderr, "HTTP error response codes:\n");
+  } else {
+    fprintf(stderr, "HTTP response codes:\n");
+  }
+
+  for (int i = 0; i < map->total_types; i++) {
+    fprintf(stderr, "  HTTP-%d:\t\t%9u\n", map->entries[i].code, 
map->entries[i].count);
+  }
+}
+
+/**
+ * Sort and print the error breakdown as JSON fields (for -j mode).
+ */
+void
+status_map_print_json(STATUS_MAP *map)
+{
+  if (map == NULL || map->total_types == 0) return;
+
+  status_map_sort(map);
+
+  if (my.extended == EXT_ERRORS) {
+    printf("\t\"extended_errors\": {\n");
+  } else {
+    printf("\t\"response_codes\": {\n");
+  }   
+
+  for (int i = 0; i < map->total_types; i++) {
+    printf("\t\t\"HTTP-%d\":\t\t%12u%s\n",
+            map->entries[i].code,
+            map->entries[i].count,
+            (i < map->total_types - 1) ? "," : "");
+  }
+  printf("\t}\n");
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/siege-4.2.0/src/version.c 
new/siege-4.2.2/src/version.c
--- old/siege-4.2.0/src/version.c       2026-08-18 21:16:31.000000000 +0200
+++ new/siege-4.2.2/src/version.c       2026-10-27 20:14:19.000000000 +0100
@@ -4,7 +4,7 @@
  * used by configure to dynamically assign those values 
  * to documentation files.
  */
-const char *version_string = "4.2.0";
+const char *version_string = "4.2.2";
 const char *program_name   = "siege";
 const char *author_name    = "Jeffrey Fulmer, et al.";
 const char *email_address  = "[email protected]";

Reply via email to