pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/finance/ledger32



Module Name:    pkgsrc
Committed By:   riastradh
Date:           Thu May  2 12:22:13 UTC 2024

Modified Files:
        pkgsrc/finance/ledger32: Makefile distinfo
        pkgsrc/finance/ledger32/patches: patch-src_utils.cc
Added Files:
        pkgsrc/finance/ledger32/patches: patch-src_amount.cc patch-src_expr.cc
            patch-src_format.cc patch-src_item.cc patch-src_lookup.cc
            patch-src_option.cc patch-src_pool.cc patch-src_report.cc
            patch-src_strptime.cc patch-src_textual.cc patch-src_times.cc
            patch-src_xact.cc

Log Message:
finance/ledger32: Fix ctype abuse.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 pkgsrc/finance/ledger32/Makefile \
    pkgsrc/finance/ledger32/distinfo
cvs rdiff -u -r0 -r1.1 pkgsrc/finance/ledger32/patches/patch-src_amount.cc \
    pkgsrc/finance/ledger32/patches/patch-src_expr.cc \
    pkgsrc/finance/ledger32/patches/patch-src_format.cc \
    pkgsrc/finance/ledger32/patches/patch-src_item.cc \
    pkgsrc/finance/ledger32/patches/patch-src_lookup.cc \
    pkgsrc/finance/ledger32/patches/patch-src_option.cc \
    pkgsrc/finance/ledger32/patches/patch-src_pool.cc \
    pkgsrc/finance/ledger32/patches/patch-src_report.cc \
    pkgsrc/finance/ledger32/patches/patch-src_strptime.cc \
    pkgsrc/finance/ledger32/patches/patch-src_textual.cc \
    pkgsrc/finance/ledger32/patches/patch-src_times.cc \
    pkgsrc/finance/ledger32/patches/patch-src_xact.cc
cvs rdiff -u -r1.1 -r1.2 pkgsrc/finance/ledger32/patches/patch-src_utils.cc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/finance/ledger32/Makefile
diff -u pkgsrc/finance/ledger32/Makefile:1.2 pkgsrc/finance/ledger32/Makefile:1.3
--- pkgsrc/finance/ledger32/Makefile:1.2        Sun Apr 21 16:59:09 2024
+++ pkgsrc/finance/ledger32/Makefile    Thu May  2 12:22:13 2024
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.2 2024/04/21 16:59:09 adam Exp $
+# $NetBSD: Makefile,v 1.3 2024/05/02 12:22:13 riastradh Exp $
 
 DISTNAME=      ledger-3.2.1
-PKGREVISION=   1
+PKGREVISION=   2
 PKGNAME=       ${DISTNAME:C/^ledger-/ledger32-/}
 CATEGORIES=    finance
 MASTER_SITES=  ${MASTER_SITE_GITHUB:=ledger/}
Index: pkgsrc/finance/ledger32/distinfo
diff -u pkgsrc/finance/ledger32/distinfo:1.2 pkgsrc/finance/ledger32/distinfo:1.3
--- pkgsrc/finance/ledger32/distinfo:1.2        Sun Apr 21 16:59:09 2024
+++ pkgsrc/finance/ledger32/distinfo    Thu May  2 12:22:13 2024
@@ -1,9 +1,21 @@
-$NetBSD: distinfo,v 1.2 2024/04/21 16:59:09 adam Exp $
+$NetBSD: distinfo,v 1.3 2024/05/02 12:22:13 riastradh Exp $
 
 BLAKE2s (ledger-3.2.1.tar.gz) = c07ef3f13ef6fa24c3a0d4e1ef91e02c39673f143aa910810d64f00751ab76ff
 SHA512 (ledger-3.2.1.tar.gz) = 526c60cee354c9d2ead38cef3b89b349467e41fa3ec0927b51e7246a3352f19f0f81574211f20ba9bac5915590b870b9f9478a103ab661d3d9a10f41c52f4512
 Size (ledger-3.2.1.tar.gz) = 790959 bytes
 SHA1 (patch-src_CMakeLists.txt) = 8d6a16523554c98c8559702db681af6fb4f413aa
+SHA1 (patch-src_amount.cc) = ddabd294a25d05b7caf85e701817f5a78d28e04a
+SHA1 (patch-src_expr.cc) = e707cbcba58a31534072ed490c9ba95f8dc4005d
+SHA1 (patch-src_format.cc) = c7fe4821bc86a9126978235fa44859f84ea92989
+SHA1 (patch-src_item.cc) = 5e97a09824a04092161d8a0ca956a43ef084a03d
+SHA1 (patch-src_lookup.cc) = 0140f88386a6a9bbfa82e48fca4f3555f40a03aa
 SHA1 (patch-src_main.cc) = d887e39e2a68fe594c93819e95eed9a4f469844d
+SHA1 (patch-src_option.cc) = e2fced2a03927b91afbc3b3e390b5e1d9ea09a6e
+SHA1 (patch-src_pool.cc) = 69198d4961646171b85b73fbfa6920cfe4a5ac5c
+SHA1 (patch-src_report.cc) = b17a06c54dd7c3b20e8219add23cf2b26095f6d7
+SHA1 (patch-src_strptime.cc) = 9e5f77e6300b3c88aa47540f03675a5001eac5bc
 SHA1 (patch-src_system.hh.in) = d96c4bf691868e790110c73473e4a9f81e48d617
-SHA1 (patch-src_utils.cc) = fa3fac1f240f3bf4c7141f5db88350252bbdc000
+SHA1 (patch-src_textual.cc) = 3b52947bbdf41bbf4181e5c5519df2b105da60ad
+SHA1 (patch-src_times.cc) = 544235432f6811f1a5c73ee72b3011709b606f17
+SHA1 (patch-src_utils.cc) = 764badb5363a6ab6a98672ff5fde897a477d2fbd
+SHA1 (patch-src_xact.cc) = 89befd42102146e7a46f92ce458a7f1bc321ce55

Index: pkgsrc/finance/ledger32/patches/patch-src_utils.cc
diff -u pkgsrc/finance/ledger32/patches/patch-src_utils.cc:1.1 pkgsrc/finance/ledger32/patches/patch-src_utils.cc:1.2
--- pkgsrc/finance/ledger32/patches/patch-src_utils.cc:1.1      Sun Apr 21 16:59:09 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_utils.cc  Thu May  2 12:22:13 2024
@@ -1,9 +1,21 @@
-$NetBSD: patch-src_utils.cc,v 1.1 2024/04/21 16:59:09 adam Exp $
+$NetBSD: patch-src_utils.cc,v 1.2 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
 
 Fix build with newer boost.
 
 --- src/utils.cc.orig  2024-04-21 16:37:21.648652970 +0000
 +++ src/utils.cc
+@@ -516,7 +516,7 @@ strings_list split_arguments(const char 
+   char in_quoted_string = '\0';
+ 
+   for (const char * p = line; *p; p++) {
+-    if (! in_quoted_string && std::isspace(*p)) {
++    if (! in_quoted_string && std::isspace(static_cast<unsigned char>(*p))) {
+       if (q != buf) {
+         *q = '\0';
+         args.push_back(buf);
 @@ -849,7 +849,7 @@ path resolve_path(const path& pathname)
    path temp = pathname;
    if (temp.string()[0] == '~')

Added files:

Index: pkgsrc/finance/ledger32/patches/patch-src_amount.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_amount.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_amount.cc Thu May  2 12:22:13 2024
@@ -0,0 +1,35 @@
+$NetBSD: patch-src_amount.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/amount.cc.orig 2020-05-18 05:30:10.000000000 +0000
++++ src/amount.cc
+@@ -979,7 +979,8 @@ namespace {
+               std::isdigit(c) || c == '-' || c == '.' || c == ',');
+ 
+     string::size_type len = std::strlen(buf);
+-    while (len > 0 && ! std::isdigit(buf[len - 1])) {
++    while (len > 0 &&
++           ! std::isdigit(static_cast<unsigned char>(buf[len - 1]))) {
+       buf[--len] = '\0';
+       in.unget();
+     }
+@@ -1014,7 +1015,7 @@ bool amount_t::parse(std::istream& in, c
+     parse_quantity(in, quant);
+ 
+     if (! in.eof() && ((n = static_cast<char>(in.peek())) != '\n')) {
+-      if (std::isspace(n))
++      if (std::isspace(static_cast<unsigned char>(n)))
+         comm_flags |= COMMODITY_STYLE_SEPARATED;
+ 
+       commodity_t::parse_symbol(in, symbol);
+@@ -1030,7 +1031,7 @@ bool amount_t::parse(std::istream& in, c
+     commodity_t::parse_symbol(in, symbol);
+ 
+     if (! in.eof() && ((n = static_cast<char>(in.peek())) != '\n')) {
+-      if (std::isspace(static_cast<char>(in.peek())))
++      if (std::isspace(in.peek()))
+         comm_flags |= COMMODITY_STYLE_SEPARATED;
+ 
+       parse_quantity(in, quant);
Index: pkgsrc/finance/ledger32/patches/patch-src_expr.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_expr.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_expr.cc   Thu May  2 12:22:13 2024
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_expr.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/expr.cc.orig   2023-03-30 07:40:48.000000000 +0000
++++ src/expr.cc
+@@ -222,7 +222,7 @@ bool merged_expr_t::check_for_single_ide
+ {
+   bool single_identifier = true;
+   for (const char * p = expr.c_str(); *p; ++p)
+-    if (! std::isalnum(*p) || *p == '_') {
++    if (! std::isalnum(static_cast<unsigned char>(*p)) || *p == '_') {
+       single_identifier = false;
+       break;
+     }
Index: pkgsrc/finance/ledger32/patches/patch-src_format.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_format.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_format.cc Thu May  2 12:22:13 2024
@@ -0,0 +1,78 @@
+$NetBSD: patch-src_format.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/format.cc.orig 2023-03-30 07:40:48.000000000 +0000
++++ src/format.cc
+@@ -109,7 +109,7 @@ namespace {
+ 
+       // Don't gobble up any whitespace
+       const char * base = p;
+-      while (p >= base && std::isspace(*p))
++      while (p >= base && std::isspace(static_cast<unsigned char>(*p)))
+         p--;
+     }
+     return expr;
+@@ -183,7 +183,7 @@ format_t::element_t * format_t::parse_el
+     }
+ 
+     std::size_t num = 0;
+-    while (*p && std::isdigit(*p)) {
++    while (*p && std::isdigit(static_cast<unsigned char>(*p))) {
+       num *= 10;
+       num += static_cast<std::size_t>(*p++ - '0');
+     }
+@@ -192,7 +192,7 @@ format_t::element_t * format_t::parse_el
+     if (*p == '.') {
+       ++p;
+       num = 0;
+-      while (*p && std::isdigit(*p)) {
++      while (*p && std::isdigit(static_cast<unsigned char>(*p))) {
+         num *= 10;
+         num += static_cast<std::size_t>(*p++ - '0');
+       }
+@@ -201,7 +201,7 @@ format_t::element_t * format_t::parse_el
+         current->min_width = current->max_width;
+     }
+ 
+-    if (std::isalpha(*p)) {
++    if (std::isalpha(static_cast<unsigned char>(*p))) {
+       bool found = false;
+       for (std::size_t i = 0; i < (sizeof(single_letter_mappings) /
+                                    sizeof(format_mapping_t)); i++) {
+@@ -210,7 +210,7 @@ format_t::element_t * format_t::parse_el
+           for (const char * ptr = single_letter_mappings[i].expr; *ptr;) {
+             if (*ptr == '$') {
+               const char * beg = ++ptr;
+-              while (*ptr && std::isalpha(*ptr))
++              while (*ptr && std::isalpha(static_cast<unsigned char>(*ptr)))
+                 ++ptr;
+               string::size_type klen = static_cast<string::size_type>(ptr - beg);
+               string keyword(beg, 0, klen);
+@@ -250,12 +250,13 @@ format_t::element_t * format_t::parse_el
+           throw_(format_error, _("Prior field reference, but no template"));
+ 
+         p++;
+-        if (*p == '0' || (! std::isdigit(*p) &&
++        if (*p == '0' || (! std::isdigit(static_cast<unsigned char>(*p)) &&
+                           *p != 'A' && *p != 'B' && *p != 'C' &&
+                           *p != 'D' && *p != 'E' && *p != 'F'))
+           throw_(format_error, _("%$ field reference must be a digit from 1-9"));
+ 
+-        int         index     = std::isdigit(*p) ? *p - '0' : (*p - 'A' + 10);
++        int         index     = std::isdigit(static_cast<unsigned char>(*p))
++          ? *p - '0' : (*p - 'A' + 10);
+         element_t * tmpl_elem = tmpl->elements.get();
+ 
+         for (int i = 1; i < index && tmpl_elem; i++) {
+@@ -630,7 +631,8 @@ string format_t::truncate(const unistrin
+           if (adjust > 0) {
+             DEBUG("format.abbrev",
+                   "Reducing segment " << ++index << " by " << adjust << " chars");
+-            while (std::isspace((*x)[*i - adjust - 1]) && adjust < *i) {
++            while (std::isspace(static_cast<unsigned char>(
++                (*x)[*i - adjust - 1])) && adjust < *i) {
+               DEBUG("format.abbrev",
+                     "Segment ends in whitespace, adjusting down");
+               ++adjust;
Index: pkgsrc/finance/ledger32/patches/patch-src_item.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_item.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_item.cc   Thu May  2 12:22:13 2024
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_item.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/item.cc.orig   2023-03-30 07:40:48.000000000 +0000
++++ src/item.cc
+@@ -151,7 +151,8 @@ void item_t::parse_tags(const char * p,
+   if (! std::strchr(p, ':')) {
+     if (const char * b = std::strchr(p, '[')) {
+       if (*(b + 1) != '\0' &&
+-          (std::isdigit(*(b + 1)) || *(b + 1) == '=')) {
++          (std::isdigit(static_cast<unsigned char>(*(b + 1))) ||
++           *(b + 1) == '=')) {
+         if (const char * e = std::strchr(b, ']')) {
+           char buf[256];
+           std::strncpy(buf, b + 1, static_cast<std::size_t>(e - b - 1));
Index: pkgsrc/finance/ledger32/patches/patch-src_lookup.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_lookup.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_lookup.cc Thu May  2 12:22:13 2024
@@ -0,0 +1,22 @@
+$NetBSD: patch-src_lookup.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/lookup.cc.orig 2023-03-30 07:40:48.000000000 +0000
++++ src/lookup.cc
+@@ -188,7 +188,13 @@ lookup_probable_account(const string& id
+ 
+ #if 0
+ #if !HAVE_BOOST_REGEX_UNICODE
+-          if (pos == 0 || (pos > 0 && !std::isalnum(value_key[pos - 1])))
++          // Probably doesn't make sense with value_key as unistring,
++          // but this code is under #if 0 anyway, so if anyone is
++          // tempted to use this by changing value_key to string, let's
++          // avoid leaving a rake to step on.
++          if (pos == 0 ||
++              (pos > 0 &&
++               !std::isalnum(static_cast<unsigned char>(value_key[pos - 1]))))
+             addend++;
+ #else
+           // jww (2010-03-07): Not yet implemented
Index: pkgsrc/finance/ledger32/patches/patch-src_option.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_option.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_option.cc Thu May  2 12:22:13 2024
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_option.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/option.cc.orig 2023-03-30 07:40:48.000000000 +0000
++++ src/option.cc
+@@ -132,7 +132,8 @@ void process_environment(const char ** e
+         if (*q == '_')
+           *r++ = '-';
+         else
+-          *r++ = static_cast<char>(std::tolower(*q));
++          *r++ = static_cast<char>(std::tolower(
++            static_cast<unsigned char>(*q)));
+       *r = '\0';
+ 
+       if (*q == '=') {
Index: pkgsrc/finance/ledger32/patches/patch-src_pool.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_pool.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_pool.cc   Thu May  2 12:22:13 2024
@@ -0,0 +1,25 @@
+$NetBSD: patch-src_pool.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/pool.cc.orig   2023-03-30 07:40:48.000000000 +0000
++++ src/pool.cc
+@@ -327,13 +327,15 @@ commodity_pool_t::parse_price_directive
+   datetime_t datetime;
+   string     symbol;
+ 
+-  if (! no_date && std::isdigit(time_field_ptr[0])) {
++  if (! no_date &&
++      std::isdigit(static_cast<unsigned char>(time_field_ptr[0]))) {
+     symbol_and_price = next_element(time_field_ptr);
+     if (! symbol_and_price) return none;
+ 
+     datetime = parse_datetime(date_field + " " + time_field_ptr);
+   }
+-  else if (! no_date && std::isdigit(date_field_ptr[0])) {
++  else if (! no_date &&
++           std::isdigit(static_cast<unsigned char>(date_field_ptr[0]))) {
+     symbol_and_price = time_field_ptr;
+     datetime = datetime_t(parse_date(date_field));
+   }
Index: pkgsrc/finance/ledger32/patches/patch-src_report.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_report.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_report.cc Thu May  2 12:22:13 2024
@@ -0,0 +1,20 @@
+$NetBSD: patch-src_report.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/report.cc.orig 2023-03-30 07:40:48.000000000 +0000
++++ src/report.cc
+@@ -642,10 +642,10 @@ value_t report_t::fn_trim(call_scope_t& 
+   const char * p = buf.get();
+   const char * e = buf.get() + temp.length() - 1;
+ 
+-  while (p <= e && std::isspace(*p))
++  while (p <= e && std::isspace(static_cast<unsigned char>(*p)))
+     p++;
+ 
+-  while (e > p && std::isspace(*e))
++  while (e > p && std::isspace(static_cast<unsigned char>(*e)))
+     e--;
+ 
+   if (p > e) {
Index: pkgsrc/finance/ledger32/patches/patch-src_strptime.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_strptime.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_strptime.cc       Thu May  2 12:22:13 2024
@@ -0,0 +1,27 @@
+$NetBSD: patch-src_strptime.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/strptime.cc.orig       2020-05-18 05:30:10.000000000 +0000
++++ src/strptime.cc
+@@ -62,7 +62,9 @@ static const char* kMonthAbbr[] = {
+ 
+ static const char* _parse_num(const char* s, int low, int high, int* value) {
+   const char* p = s;
+-  for (*value = 0; *p != NULL && isdigit(*p); ++p) {
++  for (*value = 0;
++       *p != NULL && isdigit(static_cast<unsigned char>(*p));
++       ++p) {
+     *value = (*value) * 10 + static_cast<int>(*p) - static_cast<int>('0');
+   }
+ 
+@@ -177,7 +179,7 @@ static char* _strptime(const char *s, co
+       // arbitray whitespace.
+       case 't':
+       case 'n':
+-        while (isspace(*s)) ++s;
++        while (isspace(static_cast<unsigned char>(*s))) ++s;
+         break;
+ 
+       // '%'.
Index: pkgsrc/finance/ledger32/patches/patch-src_textual.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_textual.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_textual.cc        Thu May  2 12:22:13 2024
@@ -0,0 +1,110 @@
+$NetBSD: patch-src_textual.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/textual.cc.orig        2020-05-18 05:30:10.000000000 +0000
++++ src/textual.cc
+@@ -329,7 +329,8 @@ std::streamsize instance_t::read_line(ch
+     }
+ 
+     --len;
+-    while (len > 0 && std::isspace(line[len - 1])) // strip trailing whitespace
++    // strip trailing whitespace
++    while (len > 0 && std::isspace(static_cast<unsigned char>(line[len - 1])))
+       line[--len] = '\0';
+ 
+     return len;
+@@ -344,7 +345,7 @@ void instance_t::read_next_directive(boo
+   if (len == 0 || line == NULL)
+     return;
+ 
+-  if (! std::isspace(line[0]))
++  if (! std::isspace(static_cast<unsigned char>(line[0])))
+     error_flag = false;
+ 
+   switch (line[0]) {
+@@ -604,12 +605,16 @@ void instance_t::automated_xact_directiv
+         item->pos->end_line++;
+       }
+       else if ((remlen > 7 && *p == 'a' &&
+-                std::strncmp(p, "assert", 6) == 0 && std::isspace(p[6])) ||
++                std::strncmp(p, "assert", 6) == 0 &&
++                std::isspace(static_cast<unsigned char>(p[6]))) ||
+                (remlen > 6 && *p == 'c' &&
+-                std::strncmp(p, "check", 5) == 0 && std::isspace(p[5])) ||
++                std::strncmp(p, "check", 5) == 0 &&
++                std::isspace(static_cast<unsigned char>(p[5]))) ||
+                (remlen > 5 && *p == 'e' &&
+-                ((std::strncmp(p, "expr", 4) == 0 && std::isspace(p[4])) ||
+-                 (std::strncmp(p, "eval", 4) == 0 && std::isspace(p[4]))))) {
++                ((std::strncmp(p, "expr", 4) == 0 &&
++                  std::isspace(static_cast<unsigned char>(p[4]))) ||
++                 (std::strncmp(p, "eval", 4) == 0 &&
++                  std::isspace(static_cast<unsigned char>(p[4])))))) {
+         const char c = *p;
+         p = skip_ws(&p[*p == 'a' ? 6 : (*p == 'c' ? 5 : 4)]);
+         if (! ae->check_exprs)
+@@ -997,7 +1002,7 @@ void instance_t::alias_directive(char * 
+ {
+   if (char * e = std::strchr(line, '=')) {
+     char * z = e - 1;
+-    while (std::isspace(*z))
++    while (std::isspace(static_cast<unsigned char>(*z)))
+       *z-- = '\0';
+     *e++ = '\0';
+     e = skip_ws(e);
+@@ -1211,7 +1216,7 @@ void instance_t::python_directive(char *
+     if (read_line(line) > 0) {
+       if (! indent) {
+         const char * p = line;
+-        while (*p && std::isspace(*p)) {
++        while (*p && std::isspace(static_cast<unsigned char>(*p))) {
+           ++indent;
+           ++p;
+         }
+@@ -1219,7 +1224,7 @@ void instance_t::python_directive(char *
+ 
+       const char * p = line;
+       for (std::size_t i = 0; i < indent; i++) {
+-        if (std::isspace(*p))
++        if (std::isspace(static_cast<unsigned char>(*p)))
+           ++p;
+         else
+           break;
+@@ -1450,7 +1455,7 @@ post_t * instance_t::parse_post(char *  
+   char * next = next_element(p, true);
+   char * e = p + std::strlen(p);
+ 
+-  while (e > p && std::isspace(*(e - 1)))
++  while (e > p && std::isspace(static_cast<unsigned char>(*(e - 1))))
+     e--;
+ 
+   if ((*p == '[' && *(e - 1) == ']') || (*p == '(' && *(e - 1) == ')')) {
+@@ -1850,7 +1855,7 @@ xact_t * instance_t::parse_xact(char *  
+       }
+       else if (*p == ';' && (tabs > 0 || spaces > 1)) {
+         char *q = p - 1;
+-        while (q > next && std::isspace(*q))
++        while (q > next && std::isspace(static_cast<unsigned char>(*q)))
+           --q;
+         if (q >= next)
+           *(q + 1) = '\0';
+@@ -1903,11 +1908,14 @@ xact_t * instance_t::parse_xact(char *  
+       item->pos->end_line++;
+     }
+     else if ((remlen > 7 && *p == 'a' &&
+-              std::strncmp(p, "assert", 6) == 0 && std::isspace(p[6])) ||
++              std::strncmp(p, "assert", 6) == 0 &&
++              std::isspace(static_cast<unsigned char>(p[6]))) ||
+              (remlen > 6 && *p == 'c' &&
+-              std::strncmp(p, "check", 5) == 0 && std::isspace(p[5])) ||
++              std::strncmp(p, "check", 5) == 0 &&
++              std::isspace(static_cast<unsigned char>(p[5]))) ||
+              (remlen > 5 && *p == 'e' &&
+-              std::strncmp(p, "expr", 4) == 0 && std::isspace(p[4]))) {
++              std::strncmp(p, "expr", 4) == 0 &&
++              std::isspace(static_cast<unsigned char>(p[4])))) {
+       const char c = *p;
+       p = skip_ws(&p[*p == 'a' ? 6 : (*p == 'c' ? 5 : 4)]);
+       expr_t expr(p);
Index: pkgsrc/finance/ledger32/patches/patch-src_times.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_times.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_times.cc  Thu May  2 12:22:13 2024
@@ -0,0 +1,57 @@
+$NetBSD: patch-src_times.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/times.cc.orig  2023-03-30 07:40:48.000000000 +0000
++++ src/times.cc
+@@ -1467,7 +1467,7 @@ date_parser_t::lexer_t::token_t date_par
+     return tok;
+   }
+ 
+-  while (begin != end && std::isspace(*begin))
++  while (begin != end && std::isspace(static_cast<unsigned char>(*begin)))
+     begin++;
+ 
+   if (begin == end)
+@@ -1486,9 +1486,11 @@ date_parser_t::lexer_t::token_t date_par
+   // date using the typical date formats.  This allows not only dates like
+   // "2009/08/01", but also dates that fit the user's --input-date-format,
+   // assuming their format fits in one argument and begins with a digit.
+-  if (std::isdigit(*begin)) {
++  if (std::isdigit(static_cast<unsigned char>(*begin))) {
+     string::const_iterator i = begin;
+-    for (i = begin; i != end && ! std::isspace(*i); i++) {}
++    for (i = begin;
++         i != end && ! std::isspace(static_cast<unsigned char>(*i));
++         i++) {}
+     assert(i != begin);
+ 
+     string possible_date(start, i);
+@@ -1513,18 +1515,20 @@ date_parser_t::lexer_t::token_t date_par
+   start = begin;
+ 
+   string term;
+-  bool alnum = std::isalnum(*begin);
+-  for (; (begin != end && ! std::isspace(*begin) &&
+-          ((alnum && static_cast<bool>(std::isalnum(*begin))) ||
+-           (! alnum && ! static_cast<bool>(std::isalnum(*begin))))); begin++)
++  bool alnum = std::isalnum(static_cast<unsigned char>(*begin));
++  for (; (begin != end && ! std::isspace(static_cast<unsigned char>(*begin)) &&
++          ((alnum && static_cast<bool>(std::isalnum(
++             static_cast<unsigned char>(*begin)))) ||
++           (! alnum && ! static_cast<bool>(std::isalnum(
++             static_cast<unsigned char>(*begin)))))); begin++)
+     term.push_back(*begin);
+ 
+   if (! term.empty()) {
+-    if (std::isdigit(term[0])) {
++    if (std::isdigit(static_cast<unsigned char>(term[0]))) {
+       return token_t(token_t::TOK_INT,
+                      token_t::content_t(lexical_cast<unsigned short>(term)));
+     }
+-    else if (std::isalpha(term[0])) {
++    else if (std::isalpha(static_cast<unsigned char>(term[0]))) {
+       to_lower(term);
+ 
+       if (optional<date_time::months_of_year> month =
Index: pkgsrc/finance/ledger32/patches/patch-src_xact.cc
diff -u /dev/null pkgsrc/finance/ledger32/patches/patch-src_xact.cc:1.1
--- /dev/null   Thu May  2 12:22:13 2024
+++ pkgsrc/finance/ledger32/patches/patch-src_xact.cc   Thu May  2 12:22:13 2024
@@ -0,0 +1,20 @@
+$NetBSD: patch-src_xact.cc,v 1.1 2024/05/02 12:22:13 riastradh Exp $
+
+Fix ctype abuse.
+https://github.com/ledger/ledger/pull/2341
+
+--- src/xact.cc.orig   2023-03-30 07:40:48.000000000 +0000
++++ src/xact.cc
+@@ -116,8 +116,10 @@ value_t xact_base_t::magnitude() const
+ namespace {
+   inline bool account_ends_with_special_char(const string& name) {
+     string::size_type len(name.length());
+-    return (std::isdigit(name[len - 1]) || name[len - 1] == ')' ||
+-            name[len - 1] == '}' || name[len - 1] == ']');
++    return (std::isdigit(static_cast<unsigned char>(name[len - 1])) ||
++            name[len - 1] == ')' ||
++            name[len - 1] == '}' ||
++            name[len - 1] == ']');
+   }
+ 
+   struct add_balancing_post



Home | Main Index | Thread Index | Old Index