)]}'
{
  "log": [
    {
      "commit": "0720b100fb90a25802fe6476ab4233a6753b38c1",
      "tree": "c9ac20e57915e4f00e5352ed01605e3c9716b0f8",
      "parents": [
        "ce9849cacdca59bcd89496a10d077caa9e05ac36"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Wed Jul 10 10:53:43 2024 +0200"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Thu Jul 11 22:15:57 2024 +0200"
      },
      "message": "Introduce ATTR_RETNONNULL to indicate functions that will never return NULL\n"
    },
    {
      "commit": "7bf8f02de27fe2b4feba05104c9a335d422b1641",
      "tree": "1ae3ed9849aefe942578841eefe18466b79fceca",
      "parents": [
        "c3b4a770c02c28662980014b5a893e01451ec2b2"
      ],
      "author": {
        "name": "Explorer09",
        "email": "explorer09@gmail.com",
        "time": "Sun Jan 07 08:52:44 2024 +0800"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Mon Jan 08 13:13:29 2024 +0100"
      },
      "message": "Clarify isNonnegative() behavior in comments\n\nAlso fix some comments of isNaN() and isPositive() functions.\nNo code changes.\n"
    },
    {
      "commit": "e56089e1fa880064999ed6881e93f500445eacfb",
      "tree": "14cb774b63abff35d87e77bac204fecf9613ecb9",
      "parents": [
        "20bd78493be0740f1eb2bfcb651b97e98f418e7a"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Tue Nov 28 15:15:03 2023 +0100"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Tue Dec 26 15:14:19 2023 +0100"
      },
      "message": "Update includes based on IWYU\n"
    },
    {
      "commit": "f541f70d0ecbb9fd80bea9909c1783b92d46d695",
      "tree": "346c0af3ae7e3d73a6a3f0b27c5ccc2482a4b25d",
      "parents": [
        "83041f3550ee5bb83b6f9c4dcae90d59b33e0fb5"
      ],
      "author": {
        "name": "Explorer09",
        "email": "explorer09@gmail.com",
        "time": "Wed Oct 11 03:37:39 2023 +0800"
      },
      "committer": {
        "name": "Explorer09",
        "email": "explorer09@gmail.com",
        "time": "Wed Oct 11 04:22:54 2023 +0800"
      },
      "message": "Add configure check for nonnull attribute\n\nThe main reason I do this is to document the minimum compiler version\n(GCC 3.3) for the attribute. But it may work with other compilers, too.\n\nSigned-off-by: Kang-Che Sung \u003cexplorer09@gmail.com\u003e\n"
    },
    {
      "commit": "43cb4a57d6eca089358dbf974070dd7d33ccc337",
      "tree": "98908ca73d09f3a86ff74c71dae2e6f4e94a6ca3",
      "parents": [
        "4103c23327359a0bd6385c2f891554f206fec397",
        "8e4ce18ba8d1fd11c17631eff785340219136091"
      ],
      "author": {
        "name": "Nathan Scott",
        "email": "nathans@redhat.com",
        "time": "Tue Oct 10 20:45:54 2023 +1100"
      },
      "committer": {
        "name": "Nathan Scott",
        "email": "nathans@redhat.com",
        "time": "Tue Oct 10 20:45:54 2023 +1100"
      },
      "message": "Merge branch \u0027style-header-consistency\u0027 of https://github.com/BenBE/htop into BenBE-style-header-consistency\n"
    },
    {
      "commit": "b416433fbe7ccf935ad4e268396aa423143c2318",
      "tree": "55a38c76f4f0091ed6b06d7369706bd2f1f6f61e",
      "parents": [
        "c6fd64fce8502a4e557711abe9fee394763ac52c"
      ],
      "author": {
        "name": "Explorer09",
        "email": "explorer09@gmail.com",
        "time": "Sat Jul 29 16:24:12 2023 +0800"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Fri Aug 18 12:52:28 2023 +0200"
      },
      "message": "Replace isnan() with better comparisons (isgreater(), etc.)\n\nThe standard isnan() function is defined to never throw FP exceptions\neven when the argument is a \"signaling\" NaN. This makes isnan() more\nexpensive than (x !\u003d x) expression unless the compiler flag\n\u0027-fno-signaling-nans\u0027 is given.\n\nIntroduce functions isNaN(), isNonnegative(), isPositive(),\nsumPositiveValues() and compareRealNumbers(), and replace isnan() in\nhtop\u0027s codebase with the new functions. These functions utilize\nisgreater() and isgreaterequal() comparisons, which do not throw FP\nexceptions on \"quiet\" NaNs, which htop uses extensively.\n\nWith isnan() removed, there is no need to suppress the warning\n\u0027-Wno-c11-extensions\u0027 in FreeBSD. Remove the code from \u0027configure.ac\u0027.\n\nSigned-off-by: Kang-Che Sung \u003cexplorer09@gmail.com\u003e\n"
    },
    {
      "commit": "8e4ce18ba8d1fd11c17631eff785340219136091",
      "tree": "b64f792e39f10c40275965a6797d052d33df720e",
      "parents": [
        "32f8d4c4073099bdc16f48108cb4ae85de1870b6"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Wed May 24 11:14:25 2023 +0200"
      },
      "committer": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Thu May 25 08:59:32 2023 +0200"
      },
      "message": "Add missing copyright/file headers\n"
    },
    {
      "commit": "8387df1551f18b90b3936c7cbb311416c3db8032",
      "tree": "2cc511d578c0a2ea01226cc6b7f0d14e37294954",
      "parents": [
        "f60d4057573ecb6a5021e754f54983c709977c62"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Sat Feb 04 17:34:08 2023 +0100"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Sat Feb 18 17:07:17 2023 +0100"
      },
      "message": "Annotate functions with access attribute\n\nSupported by GCC since version 10.\n"
    },
    {
      "commit": "44d1200ca47d1ffb5b20a9da183b1e0b25bfb8f7",
      "tree": "a1b49791bb8b24454e440dc59e2102ff97c9f797",
      "parents": [
        "3da142b4b6a1ab418d7cc564f42b0f5675293df3"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Sun Jun 27 12:44:01 2021 +0200"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Tue Jul 06 17:20:32 2021 +0200"
      },
      "message": "Check for alloc_size attribute in configure.ac\n"
    },
    {
      "commit": "3770769ed1b52052106274e3fe8c229b24b02553",
      "tree": "2743b6ecd4b40150886e49f24c6153aa6f941102",
      "parents": [
        "2f5b3ef7337857e04cbb4287517fd51e58ee5beb"
      ],
      "author": {
        "name": "fraggerfox",
        "email": "santhosh.raju@gmail.com",
        "time": "Sat Jun 12 14:22:57 2021 +0530"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Sat Jun 26 12:18:37 2021 +0200"
      },
      "message": "Replaces WRAP_SUBTRACT with saturatingSub inline function to reduce code duplication.\n"
    },
    {
      "commit": "2f5b3ef7337857e04cbb4287517fd51e58ee5beb",
      "tree": "a2efa0b4c6602d7a32102766570d8e0a27b66b69",
      "parents": [
        "e42ae55d691b0e2018d3569ae687cf0cda98c0f8"
      ],
      "author": {
        "name": "fraggerfox",
        "email": "santhosh.raju@gmail.com",
        "time": "Sun Apr 25 21:44:32 2021 +0530"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Sat Jun 26 12:18:37 2021 +0200"
      },
      "message": "Refactor saturatingSub() to be part of Macros.h\n"
    },
    {
      "commit": "9a8221568ada269d20c3e9d291ad5f9d07cac755",
      "tree": "025f098f3e98e3ae27105feb60dc76d4ff627452",
      "parents": [
        "36880cd61c52f13c6fd284aa23d42d9493d3ab2e"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Sun Mar 21 19:40:56 2021 +0100"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Wed Apr 14 17:29:56 2021 +0200"
      },
      "message": "Rework TTY column\n\n* Rename internal identifier from TTY_NR to just TTY\n* Unify column header on platforms\n* Use devname(3) on BSD derivate to show the actual terminal,\n  simplifies current FreeBSD implementation.\n* Use \u0027unsigned long int\u0027 as id type, to fit dev_t on Linux.\n\nOnly on Solaris the terminal path is not yet resolved.\n"
    },
    {
      "commit": "57e0ce7b4ffce8cf41bd3003831198d0bb38ebf2",
      "tree": "fb8d84bb5068ba69535ce759766ab498916894d4",
      "parents": [
        "1cb3aee07a5be99dff3407ff9b5de0d63b330177"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Sat Mar 20 11:21:20 2021 +0100"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Sun Mar 21 21:49:04 2021 +0100"
      },
      "message": "Use `#if defined()` syntax when `#elif defined()` is present\n\nThis prefers the `#if defined()` syntax over the `#ifdef` variant\nwhenever there\u0027s also a `#elif defined()` clause, thus making the\nmultiple branching structure more obvious and the overall use\nmore consistent.\n"
    },
    {
      "commit": "e6d536dd3f12bc7f5c56062a008d5c17e3417fa8",
      "tree": "91d01a06323a3c7c902963f113ac176fc010235a",
      "parents": [
        "37e186fd6626e83f51d0267052677355575964d4"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Fri Nov 20 17:04:19 2020 +0100"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Mon Jan 11 21:08:58 2021 +0100"
      },
      "message": "Add compiler hints on memory allocating utility functions\n"
    },
    {
      "commit": "397b5c4bd09115d0df0846fee1b06797b68ae11c",
      "tree": "c0680d6e463d6325f87e67ef12d88dc2bd805812",
      "parents": [
        "d785b1bbc3e30e41bacd283712455090eb2fe99c"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Wed Nov 04 17:46:24 2020 +0100"
      },
      "committer": {
        "name": "BenBE",
        "email": "BenBE@geshi.org",
        "time": "Sun Nov 15 18:25:21 2020 +0100"
      },
      "message": "Introduce spaceship comparison for Processes\n\nIf currently two unsigned values are compared via `a - b`, in the case b\nis actually bigger than a, the result will not be an negative number (as\n-1 is expected) but a huge positive number as the subtraction is an\nunsigned subtraction.\n\nAvoid over-/underflow affected operations; use comparisons.\nModern compilers will generate sane code, like:\n    xor     eax, eax\n    cmp     rdi, rsi\n    seta    al\n    sbb     eax, 0\n    ret\n"
    },
    {
      "commit": "f8208f21730b21f284d9608a5b39f8ac1d15199b",
      "tree": "534bfe8cdbe5763683b0e539ba1c4ab013845418",
      "parents": [
        "dea19b644f463c8409569957d008fb9d86b487e9"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Tue Oct 20 13:14:32 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Tue Oct 20 21:43:36 2020 +0200"
      },
      "message": "Drop tabs in source indentions\n"
    },
    {
      "commit": "0db398d4c3472071b2814505242450cd8f831501",
      "tree": "efc3a6be26912a628f5340d05a428d1e16b73a34",
      "parents": [
        "0f5262917fab34b44b43f63946fdf6bb0621875a"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Sun Oct 18 17:48:24 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Mon Oct 19 14:13:58 2020 +0200"
      },
      "message": "Allow low and high value of CLAMP to be equal\n\nCan for example occur in RichString_setAttrn(), when pausing and\nresuming process tracing:\n\n    htop: RichString.c:56: void RichString_setAttrn(RichString *, int, int, int): Assertion `(0) \u003c (this-\u003echlen - 1)\u0027 failed.\n\n    ./htop(backtrace+0x5b)[0x45d9eb]\n    ./htop(CRT_handleSIGSEGV+0x189)[0x4ebab9]\n    /lib/x86_64-linux-gnu/libpthread.so.0(+0x14140)[0x7fd249d35140]\n    /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x141)[0x7fd249b6ac41]\n    /lib/x86_64-linux-gnu/libc.so.6(abort+0x123)[0x7fd249b54537]\n    /lib/x86_64-linux-gnu/libc.so.6(+0x2540f)[0x7fd249b5440f]\n    /lib/x86_64-linux-gnu/libc.so.6(+0x345c2)[0x7fd249b635c2]\n    ./htop(RichString_setAttrn+0x234)[0x526de4]\n    ./htop(RichString_setAttr+0x50)[0x5275c0]\n    ./htop(Panel_draw+0x17b6)[0x514c26]\n    ./htop(InfoScreen_run+0x305)[0x4fe7a5]\n    ./htop[0x4d59d8]\n    ./htop[0x5029cf]\n    ./htop(ScreenManager_run+0x69f)[0x52a82f]\n    ./htop(main+0x704)[0x4f8774]\n    /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea)[0x7fd249b55cca]\n    ./htop(_start+0x2a)[0x4268ea]\n"
    },
    {
      "commit": "0f5262917fab34b44b43f63946fdf6bb0621875a",
      "tree": "07e449767f00310ef038d786688f891600a01b4d",
      "parents": [
        "29346d05616ce69e5988b3f1257c340f91299602"
      ],
      "author": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Sat Sep 19 13:55:23 2020 +0200"
      },
      "committer": {
        "name": "Benny Baumann",
        "email": "BenBE@geshi.org",
        "time": "Sun Oct 18 20:09:05 2020 +0200"
      },
      "message": "Make all required includes explicit\n\nInformation as seen by IWYU 0.12 + clang 9 on Linux\n"
    },
    {
      "commit": "db159e758020a1a224eb6097ba697c70dacc1818",
      "tree": "582d244e280525c59e4ab3d834f163c00cdd5bfc",
      "parents": [
        "db472075a4fb82bf6a491848941a5b9c92526c39"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Tue Oct 06 11:39:27 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Tue Oct 06 11:46:41 2020 +0200"
      },
      "message": "Enclose CLAMP macro arguments in parentheses\n"
    },
    {
      "commit": "db472075a4fb82bf6a491848941a5b9c92526c39",
      "tree": "cd09477d48f52b2acdb7c0e460cb2aac07d4be00",
      "parents": [
        "ad3acfc847e9d54f07a0684c19181d5f4c28fee4"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Sun Oct 04 14:30:35 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Tue Oct 06 11:20:07 2020 +0200"
      },
      "message": "Enable -Wcast-qual compiler warning\n"
    },
    {
      "commit": "49bb1b57f82a7ef2de5ed9a7d39caafb6c8328c9",
      "tree": "3b2e52068515f80bc7ac893c6e89a0686d13cd87",
      "parents": [
        "ff455b0004080a260a63f12ca8bf7c148eab6ee7"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Mon Oct 05 12:27:20 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Mon Oct 05 12:47:56 2020 +0200"
      },
      "message": "Assert that low value is lower than the high value in CLAMP\n"
    },
    {
      "commit": "42946ec113e8ae6d6bc114dbd90e9721f464abfb",
      "tree": "3b30fc9a612905cd4e2b868804ac81cd2c90b403",
      "parents": [
        "b82a13c6ba48eb8711071342bec80798aca5de1c"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Mon Sep 28 21:14:50 2020 +0200"
      },
      "committer": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Sat Oct 03 19:05:40 2020 +0200"
      },
      "message": "Introduce ARRAYSIZE\n"
    },
    {
      "commit": "7107d1db0b3361a3e880d903a45920b64a05e9d6",
      "tree": "926c71c5d2095f156bda3863fc3f8dbcacbc017f",
      "parents": [
        "f4602f7b4e7fdcf4b3a5d2c0c353b50fef98aa7e"
      ],
      "author": {
        "name": "Christian Göttsche",
        "email": "cgzones@googlemail.com",
        "time": "Wed Sep 09 21:35:15 2020 +0200"
      },
      "committer": {
        "name": "cgzones",
        "email": "cgzones@googlemail.com",
        "time": "Fri Sep 18 12:28:40 2020 +0200"
      },
      "message": "Refactor __attribute__ usage\n\nUse internal macros for compatibility with non GNUC compilers.\n"
    },
    {
      "commit": "c5808c56db166528ae7e74cedb51cc466f973b9f",
      "tree": "b0364c031595aacc8db222885bebb8390983429e",
      "parents": [
        "8ec5d4a3a07fe9a3c556a4abeac6645a7bb2235e"
      ],
      "author": {
        "name": "Nathan Scott",
        "email": "nathans@redhat.com",
        "time": "Wed Sep 09 16:56:04 2020 +1000"
      },
      "committer": {
        "name": "Nathan Scott",
        "email": "nathans@redhat.com",
        "time": "Wed Sep 09 16:56:04 2020 +1000"
      },
      "message": "Consolidate repeated macro definitions into one header\n\nThe MIN, MAX, CLAMP, MINIMUM, and MAXIMUM macros appear\nthroughout the codebase with many re-definitions.  Make\na single copy of each in a common header file, and use\nthe BSD variants of MINIMUM/MAXIMUM due to conflicts in\nthe system \u003csys/param.h\u003e headers.\n"
    }
  ]
}
