)]}'
{
  "log": [
    {
      "commit": "afe0e0152e4dc12d84be3c02d6d62b0456d68580",
      "tree": "bcf539c10d78ead5489d45585c70c8617b606976",
      "parents": [
        "ad092191a3f281c2d14089c86757305403a9de64"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 23 22:51:48 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 23 22:51:48 2016 +0800"
      },
      "message": "Release 0.5.9.1.\n"
    },
    {
      "commit": "ad092191a3f281c2d14089c86757305403a9de64",
      "tree": "c8677f1b8dd700ebe39c476dbb455622b2ccb0bc",
      "parents": [
        "4cf38c1ccd0c41715633c1b724c30e9c235099d1"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Sep 03 21:58:50 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 23 22:50:16 2016 +0800"
      },
      "message": "expand - Fix dangling left square brackets in patterns\n\nWhen there is an unmatched left square bracket in patterns, pmatch\nwill behave strangely and exhibit undefined behaviour.  This patch\n(based on Harld van Dijk\u0027s original) fixes this by treating it as\na literal left square bracket.\n\nReported-by: Olof Johansson \u003colof@ethup.se\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4cf38c1ccd0c41715633c1b724c30e9c235099d1",
      "tree": "7b0b4b40f59e2a644fe0a78d09050dc3b4157c21",
      "parents": [
        "0e4c9599468ab102e6a612439db6df0248410483"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 21:14:39 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 22:10:56 2016 +0800"
      },
      "message": "builtin: Fix echo -n early termination\n\nThe commit 7a784244625d5489c0fc779201c349555dc5f8bc (\"[BUILTIN]\nSimplify echo command\") broke echo -n by making it always terminate\nafter printing the first argument.\n\nThis patch fixes this by only terminating when we have reached\nthe end of the arguments.\n\nFixes: 7a784244625d (\"[BUILTIN] Simplify echo command\")\nReported-by: Luigi Tarenga \u003cluigi.tarenga@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "0e4c9599468ab102e6a612439db6df0248410483",
      "tree": "e1da266bf7d2d64199e4856550e929fda791bcef",
      "parents": [
        "da534b740e628512e8e0e62729d6a2ef521e5096"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sun Jun 12 20:17:48 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 22:10:56 2016 +0800"
      },
      "message": "builtin: Fix handling of trailing IFS white spaces\n\nThe read built-in does not handle trailing IFS white spaces in\nthe right way, when there are more fields than variables.  Part\nof the problem is that this case is handled outside of ifsbreakup.\n\nHarald van Dijk wrote a patch to fix this by moving the magic\ninto ifsbreakup itself.\n\nThis patch further reorganises the ifsbreakup loop by having only\none loop over the whole string.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nTested-by: Harald van Dijk \u003charald@gigawatt.nl\u003e\n"
    },
    {
      "commit": "da534b740e628512e8e0e62729d6a2ef521e5096",
      "tree": "738f2514591e0de3ba1b38f40d483af3b90cd87d",
      "parents": [
        "203e8395faa9135956e3b2a2b749b6dd96a7e988"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Jun 07 16:47:59 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 22:10:56 2016 +0800"
      },
      "message": "eval: Return status in eval functions\n\nThe exit status is currently clobbered too early for case statements\nand loops.  This patch fixes it by making the eval functions return\nthe current exit status and setting them in one place -- evaltree.\n\nHarald van Dijk pointed out a number of bugs in the original patch.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "203e8395faa9135956e3b2a2b749b6dd96a7e988",
      "tree": "9daef748990b61965d99ff9fad443a2f667b80b6",
      "parents": [
        "551215bb2f05b6ed0a639e1a20b88906ddd7ef9b"
      ],
      "author": {
        "name": "Stephen Kitt",
        "email": "steve@sk2.org",
        "time": "Mon Jun 06 22:45:27 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 22:10:56 2016 +0800"
      },
      "message": "jobs: Handle string-based job descriptors\n\nWhen looking for a job using a string descriptor, e.g.\n\n\tfg %man\n\nthe relevant loop in src/jobs.c only ever exits to the err label. With\nthis patch, when the end condition is reached, we check whether a job\nwas found, and if so, set things up to exit correctly via gotit.\nMultiple matches are already caught using the test in the match block.\n\nSigned-off-by: Stephen Kitt \u003csteve@sk2.org\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "551215bb2f05b6ed0a639e1a20b88906ddd7ef9b",
      "tree": "fe196361b9b00c679d6c652a18d29f47eaf0f65c",
      "parents": [
        "17a5f24e0a8ec22f74399764db30d97ae310f3c6"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 19:52:43 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 02 22:10:56 2016 +0800"
      },
      "message": "trap: Implement POSIX.1-2008 trap reset behaviour\n\nJonathan Perkin submitted a patch to fix the behaviour of trap\nwhen the first argument is an integer.  Currently it is treated\nas a command while POSIX requires it to be treated as a signal.\n\nThis patch is based on his idea but instead of adding an extra\nargument to decode_signal I have added a new decode_signum helper.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "17a5f24e0a8ec22f74399764db30d97ae310f3c6",
      "tree": "8842120c5bcf3a9fc56f7a6250176b1d58133c5a",
      "parents": [
        "138f2df1e3c00183ca20d04e5084fcf4d34f330d"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Tue Jun 07 16:35:41 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Jun 07 16:35:41 2016 +0800"
      },
      "message": "eval: Fix exit status when calling eval/dot with no commands\n\nOn 17/11/2015 03:18, Gioele Barabucci wrote:\n\u003e Hello,\n\u003e\n\u003e a bug has been filed in the Debian BTS about dash not resetting the exit\n\u003e status after sourcing an empty file with the dot command. [1]\n\u003e\n\u003e The following test echoes \"OK\" with bash and \"fail\" with dash\n\u003e\n\u003e      #!/bin/sh\n\u003e\n\u003e      echo \u003e ./empty\n\u003e      false\n\u003e\n\u003e      . ./empty \u0026\u0026 echo \"OK\" || echo \"fail\"\n \u003e\n\u003e A similar bug in dash has been discussed and addressed in 2011 [2], but\n\u003e it looks like the solution has been only partial.\n\u003e\n\u003e The version of dash I tested is the current git master branch, commit\n\u003e 2e58422.\n\u003e\n\u003e [1] https://bugs.debian.org/777262\n\u003e [2] http://article.gmane.org/gmane.comp.shells.dash/531\n\nThe bug described there was about empty files. While the fix has been \napplied and does make dash handle empty files properly, your test \ndoesn\u0027t use an empty file, it uses a file containing a single blank \nline. Unfortunately, the single blank line gets parsed by dash as a null \ncommand, null commands don\u0027t (and shouldn\u0027t) reset the exit status, and \nthe fix you link to doesn\u0027t handle this because it sees a command has \nbeen executed and saves the exit status after executing that command as \nthe exit status to be used by \".\".\n\nI think the easiest way to fix this is to prevent null commands from \naffecting status in cmdloop, as attached.\n\nAn alternative could be to change the outer if condition to exclude\nn \u003d\u003d NULL, but I didn\u0027t do that because the change of job_warning and \nclearing of numeof make sense to me even for null commands. Besides, \nwhen debug tracing is enabled, null commands have a visible effect that \nshould remain.\n\nNote that this fixes the problem with . but the same problem can be \npresent in other locations. For example,\n\n     false\n     eval \"\n     \" \u0026\u0026 echo OK || echo Fail\n\nused to print Fail, and needed the same modification in the evalstring \nfunction to make that print OK (included in the attached patch). There \nmay be other similar bugs lurking.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "138f2df1e3c00183ca20d04e5084fcf4d34f330d",
      "tree": "940025ecc4ef35d5232bec2e76e29381c70ec672",
      "parents": [
        "cb924afe2e3465ec2f91fab55d31f7e3c26d03f4"
      ],
      "author": {
        "name": "Gioele Barabucci",
        "email": "gioele@svario.it",
        "time": "Mon Jan 11 20:12:35 2016 +0100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 22:42:13 2016 +0800"
      },
      "message": "man: Document ulimit -v\n\nDocument that `ulimit` can set the `RLIMIT_AS` limit (virtual memory) with\nthe `-v` flag.\n\nFixes: https://bugs.debian.org/78556\nReported-by: Vincent Lefevre \u003cvincent@vinc17.net\u003e\nSigned-off-by: Gioele Barabucci \u003cgioele@svario.it\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "cb924afe2e3465ec2f91fab55d31f7e3c26d03f4",
      "tree": "455df31bbf9b1d1d1f1673dbc661cc355245a75c",
      "parents": [
        "16cde63e05519c770daa69345b8cf37fb31eaa2a"
      ],
      "author": {
        "name": "Jonathan Perkin",
        "email": "jperkin@joyent.com",
        "time": "Fri Dec 11 11:56:43 2015 +0000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 22:25:00 2016 +0800"
      },
      "message": "shell: Fix build on Solaris 9\n\nEnsure dash can build in a default Solaris 9 or older environment:\n\n - Execute scripts with $SHELL rather than /bin/sh, the latter does not\n   support e.g. \"if ! ..\" used by mkbuiltins.\n\n - /bin/awk does not support ?: syntax, use explicit statements instead.\n\n - /bin/nl requires no spaces between options and arguments.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "16cde63e05519c770daa69345b8cf37fb31eaa2a",
      "tree": "e23b98863509b0b0cb9d1223703a97b9a4c0f167",
      "parents": [
        "0134f725b7d254ddbc3cc6dd72399edea832559c"
      ],
      "author": {
        "name": "Tobias Klauser",
        "email": "tklauser@distanz.ch",
        "time": "Thu Dec 10 08:59:34 2015 +0100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 19:55:24 2016 +0800"
      },
      "message": "jobs: Don\u0027t attempt to access job table for job %0\n\nIf job %0 is (mistakenly) specified, an out-of-bounds access to the\njobtab occurs in function getjob() if num \u003d 0:\n\n\tjp \u003d jobtab + 0 - 1\n\nFix this by checking that the job number is larger than 0 before\naccessing the jobtab.\n\nSigned-off-by: Tobias Klauser \u003ctklauser@distanz.ch\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "0134f725b7d254ddbc3cc6dd72399edea832559c",
      "tree": "a425bdc2019436e278fc224635a25ae0a2d49dc9",
      "parents": [
        "801fbd560d334fc94e98fec4097eeac70ea63e3d"
      ],
      "author": {
        "name": "Patrick Brown",
        "email": "opensource@whoopdedo.org",
        "time": "Sun Dec 06 15:09:42 2015 +0100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 18:32:56 2016 +0800"
      },
      "message": "builtin: Reject malformed printf specifications with digits after \u0027*\u0027\n\nDash doesn\u0027t notice when a format string has digits following a * width\nspecifier.\n\n    $ dash -c \u0027printf \"%*0s  \" 1 2 \u0026\u0026 echo FAIL || echo OK\u0027\n    %10s  FAIL\n\n    $ bash -c \u0027printf \"%*0s  \" 1 2 \u0026\u0026 echo FAIL || echo OK\u0027\n    bash: line 0: printf: `0\u0027: invalid format character\n    OK\n    $ mksh -c \u0027printf \"%*0s  \" 1 2 \u0026\u0026 echo FAIL || echo OK\u0027\n    printf: %*0: invalid conversion specification\n    OK\n\nWith this patch dash complains about the malformed specifications.\n\n    $ ./src/dash -c \u0027printf \"%*0s  \" 1 2 \u0026\u0026 echo FAIL || echo OK\u0027\n    ./src/dash: 1: printf: %*0: invalid directive\n    OK\n\nFixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug\u003d779618\n\nOriginally-by: Patrick Brown \u003copensource@whoopdedo.org\u003e\nForwarded-by: Gioele Barabucci \u003cgioele@svario.it\u003e\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "801fbd560d334fc94e98fec4097eeac70ea63e3d",
      "tree": "b25b6f3da4a6ea70b689ae13d47752b9bb133a19",
      "parents": [
        "2e5842258bd5b252ffdaa630db09c9a19a9717ca"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 12:48:52 2016 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jun 06 12:48:52 2016 +0800"
      },
      "message": "Release 0.5.9.\n"
    },
    {
      "commit": "2e5842258bd5b252ffdaa630db09c9a19a9717ca",
      "tree": "7062c78c1b0187f9090994bdd5b9572c480fc2c8",
      "parents": [
        "d7582e69da222e48002ef79ec1d97d55fc469dd6"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jul 13 14:06:35 2015 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Aug 13 20:53:43 2015 +0800"
      },
      "message": "builtin: Reset t_wp_op in testcmd\n\nThe global variable t_wp_op needs to be reset every time testcmd\nis called or it may cause incorrect parsing of the arguments.\n\nReported-by: Martijn Dekker \u003cmartijn@inlv.org\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d7582e69da222e48002ef79ec1d97d55fc469dd6",
      "tree": "4db228a827c8c8037d73fcfc5a13dd7a6b72d30c",
      "parents": [
        "fe393c0f9ab72de5a7d32aab53e5e8275cad8735"
      ],
      "author": {
        "name": "Felix Dietrich",
        "email": "felix.dietrich@sperrhaken.name",
        "time": "Tue Jun 02 22:55:19 2015 +0200"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jun 11 14:31:48 2015 +0800"
      },
      "message": "man: Fix description of getopts when last argument reached\n\nThe description of getops in the manual incorrectly states that\nvar will be set to \"--\" when no arguments remain.  In fact it\nwill be set to \"?\".\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "fe393c0f9ab72de5a7d32aab53e5e8275cad8735",
      "tree": "a3127335de57b92e35e8f507680cab3674eb3026",
      "parents": [
        "17db43b5841504b694203952fb0e82246c06a97f"
      ],
      "author": {
        "name": "Fredrik Fornwall",
        "email": "fredrik@fornwall.net",
        "time": "Sun May 24 23:05:48 2015 +0200"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jun 11 14:31:48 2015 +0800"
      },
      "message": "builtin: Clear LC_ALL in mkbuiltins\n\nIn mkbuiltins LC_COLLATE is set, but since \"The value of the LC_ALL\nenvironment variable has precedence over any of the other environment\nvariables starting with LC_\"\n(http://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html), this\nhas no effect when LC_ALL is set.\n\nThis breaks when having e.g. LC_ALL\u003den_US.UTF-8 during make, which\ncauses the test case\n    dash -c :\nto fail, probably due to broken ordering in builtins.c. The patch\ncorrects that by clearing LC_ALL.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "17db43b5841504b694203952fb0e82246c06a97f",
      "tree": "c6b969c60bb9b1ddefc89e6ec1369d88d75dcfbc",
      "parents": [
        "51781428ead9a2142795764d0c42abfd9bb47171"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:50:57 2015 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:58:52 2015 +1100"
      },
      "message": "input: Allow two consecutive calls to pungetc\n\nThe commit ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8 ([PARSER]\nHandle backslash newlines properly after dollar sign) created\ncases where we make two consecutive calls to pungetc.  As we\ndon\u0027t explicitly support that there are corner cases where you\nend up with garbage input leading to undefined behaviour.\n\nThis patch adds explicit support for two consecutive calls to\npungetc.\n\nReported-by: Jilles Tjoelker \u003cjilles@stack.nl\u003e\nReported-by: Juergen Daubert \u003cjue@jue.li\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "51781428ead9a2142795764d0c42abfd9bb47171",
      "tree": "3a1109598708b81a945dbaa411cb575e22308fa2",
      "parents": [
        "d0e170e595a024aa5e4ec53a30f833f07f8cb849"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:42:32 2015 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:58:52 2015 +1100"
      },
      "message": "input: Move all input state into parsefile\n\nCurrently we maintain a copy of the input state outside of parsefile.\nThis is redundant and makes reentrancy difficult.  This patch kills\nthe duplicate global states and now everyone simply uses parsefile.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d0e170e595a024aa5e4ec53a30f833f07f8cb849",
      "tree": "cdbc0eb57be5cdc6cd228befe03b82d4344742cf",
      "parents": [
        "dee20c64b4d2625bbe6e7329404e749d5b22b2f3"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:20:45 2015 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:58:52 2015 +1100"
      },
      "message": "input: Remove HETIO\n\nIt hasn\u0027t been possible to build HETIO for over ten years.  So\nlet\u0027s just kill it.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "dee20c64b4d2625bbe6e7329404e749d5b22b2f3",
      "tree": "39d291a582f3e4a2ee32b22395a71ca450a4921a",
      "parents": [
        "bc4d989af4a4069f70f19fbe41a7d7ad61965ff8"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sun Jan 04 21:37:13 2015 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:58:52 2015 +1100"
      },
      "message": "input: Make preadbuffer static\n\nThe function preadbuffer should be static as it\u0027s only used in\ninput.c.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "bc4d989af4a4069f70f19fbe41a7d7ad61965ff8",
      "tree": "696403dfeb86d6b4cd6adb897367f861690603f5",
      "parents": [
        "35ff4d5b5a44aaf6fd98edef221dcc3ddcb8dda4"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jan 01 07:53:10 2015 +1100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Jan 05 22:58:52 2015 +1100"
      },
      "message": "expand: Fixed \"$@\" expansion when EXP_FULL is false\n\nThe commit 3c06acdac0b1ba0e0acdda513a57ee6e31385dce ([EXPAND]\nSplit unquoted $@/$* correctly when IFS is set but empty) broke\nthe case where $@ is in quotes and EXP_FULL is false.\n\nIn that case we should still emit IFS as field splitting is not\nperformed.\n\nReported-by: Juergen Daubert \u003cjue@jue.li\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "35ff4d5b5a44aaf6fd98edef221dcc3ddcb8dda4",
      "tree": "52f97a68be4453409c8a497c221ab6093f1ff0e9",
      "parents": [
        "6adc14a0d4e4a25eb2df8110672c84f393b45acb"
      ],
      "author": {
        "name": "kabe@sra-tohoku.co.jp",
        "email": "kabe@sra-tohoku.co.jp",
        "time": "Mon Dec 22 14:50:23 2014 +0900"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Dec 26 09:50:59 2014 +1100"
      },
      "message": "builtin: create builtins.c properly on old cpp\n\nEncontered this on ancient gcc-2.95.3 environment;\nsrc/builtins.def.in -\u003e src/builtins.def generation emitted\n^ $\nlines (likely by /* */), which where NOT ignored by\nsrc/mkbuiltins and generating bogus builtins.c.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "6adc14a0d4e4a25eb2df8110672c84f393b45acb",
      "tree": "7f1143e529f89138f0c502b7f6b6fd2281a36305",
      "parents": [
        "f6d4def4e27b13fab174e948b94cd10550d3e10e"
      ],
      "author": {
        "name": "Stéphane Aulery",
        "email": "saulery@free.fr",
        "time": "Thu Dec 11 10:03:06 2014 +0100"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Dec 26 09:50:58 2014 +1100"
      },
      "message": "man: Clarify two redirection mechanisms\n\nClose Debian Bug #501566\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "f6d4def4e27b13fab174e948b94cd10550d3e10e",
      "tree": "90f7240d55b4173ff6c457189ba18f8607ffa9dc",
      "parents": [
        "d0ed169b4599f48baa5cc6f2b9085e90e1dcefdb"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Tue Sep 27 18:19:06 2011 -0500"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Nov 17 22:51:37 2014 +0800"
      },
      "message": "[BUILTIN] Fix \"test -x\" as root on FreeBSD 8\n\nPOSIX.1-2008 §4.4 \"File Access Permission\" sayeth:\n\n\tIf execute permission is requested, access shall be granted\n\tif execute permission is granted to at least one user by the\n\tfile permission bits or by an alternate access control\n\tmechanism; otherwise, access shall be denied.\n\nFor historical reasons, POSIX unfortunately also allows access() and\nfaccessat() to return success for X_OK if the current process is\nprivileged, even when the above condition is not fulfilled and actual\nexecution would fail.  On the affected platforms, \"test -x \u003cpath\u003e\" as\nroot started returning true on nonexecutable files when dash switched\nfrom its own emulation to the true faccessat in v0.5.7~54\n(2010-04-02).\n\nWork around this by checking the permissions bits when mode \u003d\u003d X_OK\nand geteuid() \u003d\u003d 0 on such platforms.\n\nUnfortunately the behavior seems to vary from one kernel version to\nanother, so we cannot just check the behavior at compile time and rely\non that.  A survey of some affected kernels:\n\n - NetBSD\u0027s kernel moved to the sane semantics in 1997\n - OpenBSD\u0027s kernel made the same change in version 4.4, three years\n   ago\n - FreeBSD 9\u0027s kernel fixes this but hasn\u0027t been released yet\n\nIt seems safe to only apply the workaround on systems using the\nFreeBSD kernel for now, and to push for standardization on the\nexpected access()/faccessat() semantics so we can drop the workaround\naltogether in a few years.\n\nTo try it on other platforms, use \"./configure --enable-test-workaround\".\n\nReported-by: Christoph Egger \u003cchristoph@debian.org\u003e\nAnalysis-by: Petr Salinger \u003cPetr.Salinger@seznam.cz\u003e\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d0ed169b4599f48baa5cc6f2b9085e90e1dcefdb",
      "tree": "3a3d912c8890ccd1332296e00e1f14c65c99fb64",
      "parents": [
        "69a966c574ea51a80bacbd0be465ee68906d4faf"
      ],
      "author": {
        "name": "Stéphane Aulery",
        "email": "saulery@free.fr",
        "time": "Mon Nov 17 13:07:24 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Nov 17 13:07:24 2014 +0800"
      },
      "message": "[MAN] Document redirection file descriptor limitation\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "69a966c574ea51a80bacbd0be465ee68906d4faf",
      "tree": "a538ad607faa619ca8f69abb5a394bb8c5b70c0b",
      "parents": [
        "cbd6165076cbbf18e68a292f80c1d454fdbedc22"
      ],
      "author": {
        "name": "Stéphane Aulery",
        "email": "saulery@free.fr",
        "time": "Mon Nov 17 13:04:17 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Nov 17 13:04:17 2014 +0800"
      },
      "message": "[MAN] Correct typo in manual page\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "cbd6165076cbbf18e68a292f80c1d454fdbedc22",
      "tree": "820aeb2bbc6067dac888bbd157119a6a23052428",
      "parents": [
        "7c245aa8ed33ba5db30eef9369d67036a05b0371"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 30 11:53:35 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 30 11:53:35 2014 +0800"
      },
      "message": "[PARSER] Catch variable length expansions on non-existant specials\n\nCurrently we only check special variable names that follow directly\nafter $ or ${.  So errors such as ${#\u0026} are not caught.  This patch\nfixes that by moving the is_special check to just before we print out\nthe special variable name.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "7c245aa8ed33ba5db30eef9369d67036a05b0371",
      "tree": "b9cf64a4db6dd9b17b4c6b265a50966613c965d9",
      "parents": [
        "a31c812b02d7fc331f8a0c5aedbbf12b4025c1db"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 28 17:22:16 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 28 17:22:16 2014 +0800"
      },
      "message": "[PARSER] Simplify EOF/newline handling in list parser\n\nThis patch simplifies the EOF and new handling in the list parser.\nIn particular, it eliminates a case where we may leave here-documents\nunfinished upon EOF.\n\nIt also removes special EOF/newline handling from parsecmd.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a31c812b02d7fc331f8a0c5aedbbf12b4025c1db",
      "tree": "11831b7435e94df92ad68b2bf69ae0957249607f",
      "parents": [
        "12ad48bb31b003eb6d3106478b7760a031969a36"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 28 10:32:03 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 28 10:32:03 2014 +0800"
      },
      "message": "[PARSER] Removed unnecessary pungetc on EOF from parser\n\nDoing a pungetc on an EOF is a noop and is only useful when we\ndon\u0027t know what character we\u0027re putting back.  This patch removes\nan unnecessary pungetc when we know it\u0027s EOF.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "12ad48bb31b003eb6d3106478b7760a031969a36",
      "tree": "adf44e59d97cba2fa949fc8ff31e125ba78f02f3",
      "parents": [
        "7a784244625d5489c0fc779201c349555dc5f8bc"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:56:46 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:56:46 2014 +0800"
      },
      "message": "[BUILTIN] Handle -- in dotcmd\n\nThis patch adds a nextopt call in dotcmd in order to handle --.\n\nReported-by: Stephane Chazelas \u003cstephane_chazelas@yahoo.fr\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "7a784244625d5489c0fc779201c349555dc5f8bc",
      "tree": "28950eb39fa8a2760db318713c6350064c945309",
      "parents": [
        "a68498993413cd15f9b852ca32afd368e1792b51"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:23:33 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:23:33 2014 +0800"
      },
      "message": "[BUILTIN] Simplify echo command\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a68498993413cd15f9b852ca32afd368e1792b51",
      "tree": "8f03b795c89f93418eafbabb0b096f1f05cb5dd0",
      "parents": [
        "bc8321eabffa23293d16d6758034203a8c7bffda"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:12:49 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:12:49 2014 +0800"
      },
      "message": "[BUILTIN] Optimise handling of backslash octals in printf\n\nThis patch removes the duplicate octal handling for %b by reusing\nthe existing code in conv_escape.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "bc8321eabffa23293d16d6758034203a8c7bffda",
      "tree": "254729e823459f7b17648b66a8c6b8dd9ec0bc4f",
      "parents": [
        "33b1ccbdab76baf9acad6f57d7e7a18e74c02cca"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:06:51 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:06:51 2014 +0800"
      },
      "message": "[BUILTIN] Use error instead of warnx for fatal errors in printf\n\nThis patch replaces uses of warnx where we abort with error since\nthe effect is the same.  The exit status however changes from 1 to\n2.  Non-fatal errors where we continue are unchanged.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "33b1ccbdab76baf9acad6f57d7e7a18e74c02cca",
      "tree": "406d387e1239b8ce4e602ada332b7da302a3c162",
      "parents": [
        "7bb413255368e94395237d789f522891093c5774"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:04:44 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 16:04:44 2014 +0800"
      },
      "message": "[BUILTIN] Remove getintmax in printf\n\nThis patch removes getintmax and moves its functionality into\ngetuintmax in order to reduce code duplication.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "7bb413255368e94395237d789f522891093c5774",
      "tree": "2d13bc391beab47e669c799a3af067915f42f619",
      "parents": [
        "0f2b7ee05547fa06b9abb0643b0e3ca514050ab6"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:53:48 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:53:48 2014 +0800"
      },
      "message": "[BUILTIN] Remove unnecessary restoration of format string in printf\n\nCurrently we try to preserve the format string which is stored in\nargv after temporarily modifying it.  This is unnecessary as it\u0027s\nonly ever used once.  This patch gets rid of it.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "0f2b7ee05547fa06b9abb0643b0e3ca514050ab6",
      "tree": "0b29dd532efaffb339dd5a0d764043712aeb5e79",
      "parents": [
        "53151f00720d5cd2df8cf196f4523d4f5b831598"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:44:51 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:44:51 2014 +0800"
      },
      "message": "[OUTPUT] Add ifdefs around MEM_OUT handling in outmem\n\nMEM_OUT is only used by forkless backtick processing which we do\nnot currently support.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "53151f00720d5cd2df8cf196f4523d4f5b831598",
      "tree": "9ab32b58d1e243c662be315161ce0214122fb7ad",
      "parents": [
        "c4d12c3f6424e801ccddda8894aad04d24333f82"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:42:23 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:42:23 2014 +0800"
      },
      "message": "[OUTPUT] Add likely tag in outmem\n\nThe branch in outmem where the string fits in the buffer is the\ncommon case and is now marked as likely.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "c4d12c3f6424e801ccddda8894aad04d24333f82",
      "tree": "2ef8c4f81bdbf28335559073c7f8e7c6d0906e61",
      "parents": [
        "d6c0e1e2ffbf7913ab69d51cc794d48d41c8fcb1"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:39:39 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 15:39:39 2014 +0800"
      },
      "message": "[INPUT] Replace open-coded flushall in preadbuffer\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d6c0e1e2ffbf7913ab69d51cc794d48d41c8fcb1",
      "tree": "557d3818ec91ef4e281b49fd43f208a7e8383ac7",
      "parents": [
        "c77265b4ea89359c164346e400914bb24a3716d1"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 12:19:25 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 12:19:25 2014 +0800"
      },
      "message": "[BUILTIN] Handle embedded NULs correctly in printf\n\nhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug\u003d379227\n\nOn Sat, Jul 22, 2006 at 12:48:38PM +0200, A Mennucc wrote:\n\u003e Package: dash\n\u003e Version: 0.5.3-3\n\u003e Severity: normal\n\u003e \n\u003e hi\n\u003e \n\u003e here are the examples\n\u003e \n\u003e $ bash -c \u0027echo -n -e \"A\\0102C\\00D\\0E\" | hexdump -c\u0027\n\u003e 0000000   A   B   C  \\0   D  \\0   E\n\u003e 0000007\n\u003e \n\u003e $ /bin/echo -n -e \"A\\0102C\\00D\\0E\" | hexdump -c\n\u003e 0000000   A   B   C  \\0   D  \\0   E\n\u003e 0000007\n\u003e \n\u003e $ zsh -c \u0027echo -n -e \"A\\0102C\\00D\\0E\" | hexdump -c\u0027\n\u003e 0000000   A   B   C  \\0   D  \\0   E\n\u003e 0000007\n\u003e \n\u003e $ dash -c \u0027echo -n  \"A\\0102C\\00D\\0E\" | hexdump -c\u0027\n\u003e 0000000   A   B   C\n\u003e 0000003\n\u003e \n\u003e and also\n\u003e \n\u003e $ dash -c \u0027echo -n  \"ABC\\0DEFGH\" | hexdump -c\u0027\n\u003e 0000000   A   B   C\n\u003e 0000003\n\u003e \n\u003e As you see, dash \u0027s builtin echo truncates the output at the first \\0\n\u003e \n\u003e a.\n\u003e \n\u003e -- System Information:\n\u003e Debian Release: testing/unstable\n\u003e   APT prefers unstable\n\u003e   APT policy: (500, \u0027unstable\u0027), (500, \u0027testing\u0027)\n\u003e Architecture: i386 (i686)\n\u003e Shell:  /bin/sh linked to /bin/bash\n\u003e Kernel: Linux 2.6.16-1-k7\n\u003e Locale: LANG\u003dit_IT.UTF-8, LC_CTYPE\u003dit_IT.UTF-8 (charmap\u003dUTF-8)\n\u003e \n\u003e Versions of packages dash depends on:\n\u003e ii  libc6                         2.3.6-15   GNU C Library: Shared libraries\n\u003e \n\u003e dash recommends no packages.\n\u003e \n\u003e -- debconf information:\n\u003e * dash/sh: false\n\u003e \n\u003e -- \n\u003e Andrea Mennucc\n\u003e  \"E\u0027 un mondo difficile. Che vita intensa!\" (Tonino Carotone)\n\nThis patch fixes handling of embedded NULs using an approach similar\nto the one taken by NetBSD.  In particular, we first determine the\nlength of the output string, and then use a sequence of Xs of the\nsame length as input to the underlying C printf to determine the\namount of leading and trailing padding.  Finally we replace the\nXs with the actual string before writing it out.\n\nIn order to print out the temporary string containing Xs and padding,\na new helper xasprintf is added.  Unlike asprintf though, our\nxasprintf prints to the ash stack rather than using straight malloc\nmemory.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "c77265b4ea89359c164346e400914bb24a3716d1",
      "tree": "dea5be70f45e35433f62a505f4764148e8019058",
      "parents": [
        "586463c3cf247dbead8553da7284a346b2faf1fb"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 11:45:01 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 11:45:01 2014 +0800"
      },
      "message": "[BUILTIN] Add printf support for format string a, A, and F\n\nThis patch adds the format string characters a, A and F to the\nsupported set of the built-in printf command.  They\u0027re already\nsupported by the underlying printf function.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "586463c3cf247dbead8553da7284a346b2faf1fb",
      "tree": "fcc1724a700374e35195189f78c6921144516df3",
      "parents": [
        "ab657e36b68f4a7e9ddb0f36c455c98d1c069a2c"
      ],
      "author": {
        "name": "Eric Blake",
        "email": "eblake@redhat.com",
        "time": "Mon Oct 27 11:38:43 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 27 11:38:43 2014 +0800"
      },
      "message": "[CD] support drive letters on Cygwin\n\nThe Cygwin platform supports DOS style drive-letter paths such\nas \"C:\\\\dir\", even though the preferred form is a POSIX-style\n\"/cygdrive/c/dir\".  This can be seen by doing things such as\nchdir(\"c:\") (which succeeds) followed by getcwd(NULL, 0) (which\nreturns the normalized \"/cygdrive/c\").  However, dash was trying\nto perform local manipulations on the argument to \u0027cd\u0027 prior to\ncalling into libc, in order to update the state of $PWD and\nfriends; these manipulations were assuming that the user meant\nto change to a relative subdirectory of the current location,\nas in \u0027./c:\u0027, instead of honoring the drive letter.  None of\nthe other dash builtins take a filename and manipulate it to\naffect shell state (some, like \u0027test\u0027, take a file name, but as\nstat(\"c:\") works just fine, there is no need to normalize).\n\nThis patch has no impact outside of cygwin; on cygwin, it takes\nadvantage of a native function call to canonicalize any\nincoming name into preferred form before updating shell state.\n\nPre-patch:\n$ dash -c \u0027cd c: \u0026\u0026 echo $PWD\u0027\ndash: 1: cd: can\u0027t cd to c:\n\nPost-patch:\n$ dash -c \u0027cd c: \u0026\u0026 echo $PWD\u0027\n/cygdrive/c\n\nSigned-off-by: Eric Blake \u003ceblake@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "ab657e36b68f4a7e9ddb0f36c455c98d1c069a2c",
      "tree": "3cf13c304d52f4ea5b5e88f9fb9ecb0d68383ded",
      "parents": [
        "8ecad23eae02bbdf36fe5dc8e53deb67fb894357"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 20:09:56 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 20:09:56 2014 +0800"
      },
      "message": "[EXPAND] Optimise nulonly away and just use quoted as before\n\nThis patch makes a small optimisation by using the same value for\nquoted between evalvar and varvalue by eliminating nulonly and\npassing along quoted instead.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "8ecad23eae02bbdf36fe5dc8e53deb67fb894357",
      "tree": "1a696c40e0c401bf9a5d98d67975e51f4cdf063a",
      "parents": [
        "3c06acdac0b1ba0e0acdda513a57ee6e31385dce"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 15:42:08 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 15:42:08 2014 +0800"
      },
      "message": "[EXPAND] Do not split quoted VSLENGTH and VSTRIM\n\nCurrently VSLENGTH and VSTRIM* are field-split even within quotes.\nThis is obviously wrong.  This patch fixes that.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "3c06acdac0b1ba0e0acdda513a57ee6e31385dce",
      "tree": "512a990a9da9643242a84d27ed3a3d11c2eda166",
      "parents": [
        "f20dcdd0948d7ebb7d462a0288ea218468ad4f6c"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 15:24:23 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Oct 08 15:24:23 2014 +0800"
      },
      "message": "[EXPAND] Split unquoted $@/$* correctly when IFS is set but empty\n\nCurrently we do not field-split $@/$* when it isn\u0027t quoted and IFS\nis set but empty.  This is obviously wrong.  This patch fixes this.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "f20dcdd0948d7ebb7d462a0288ea218468ad4f6c",
      "tree": "fc567086d638a8e16bff87dd8330d288bf06a530",
      "parents": [
        "70c16dd30d4cf824aa895e9f6c095fec741c65a8"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 07 22:24:42 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Oct 07 22:24:42 2014 +0800"
      },
      "message": "[VAR] Use setvareq to set OPTIND initially\n\nThere is no need to setvarint to set the initial value of OPTIND\nof one.  This patch switchs to setvareq which also lets us avoid\nan unnecessary memory allocation.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "70c16dd30d4cf824aa895e9f6c095fec741c65a8",
      "tree": "6b0057c3ab08a4eafbf477d6e6ea412e9b807ee0",
      "parents": [
        "f14b4626eb5c1c2fda137e7d1520c5f1cb7e85c4"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 21:51:26 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 21:51:26 2014 +0800"
      },
      "message": "[BUILTIN] Return without arguments in a trap should use status outside traps\n\nPOSIX now requires that return without arguments in a trap should\nreturn the last command status prior to executing traps.  This\npatch implements this behaviour.\n\nIncidentally this also changes the behaviour of return without\narguments in a loop conditional to use the last exit status in\nthe body as opposed to the last command in the conditional when\nthere is one.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "f14b4626eb5c1c2fda137e7d1520c5f1cb7e85c4",
      "tree": "490ba8c3ec141fd43fd47419d7b33ace7361b6ec",
      "parents": [
        "598d300ffa0b9542a88feae900ccdd29e35374cf"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 21:22:43 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 21:22:43 2014 +0800"
      },
      "message": "[BUILTIN] Allow return in loop conditional to set exit status\n\nhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug\u003d332954\n\nWhen return is used in a loop conditional the exit status will\nbe lost because we always set the exit status at the end of the\nloop to that of the last command executed in the body.\n\nThis is counterintuitive and contrary to what most other shells do.\n\nThis patch fixes this by always preserving the exit status of\nreturn when it is used in a loop conditional.\n\nThe patch was originally written by Gerrit Pape \u003cpape@smarden.org\u003e.\n\nReported-by: Stephane Chazelas \u003cstephane_chazelas@yahoo.fr\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "598d300ffa0b9542a88feae900ccdd29e35374cf",
      "tree": "ee787368823e5727f5176ac52e83fc319d0a9e26",
      "parents": [
        "ebfdd97a10e34a5e70eadfc21ebfc033ef93a563"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 20:45:04 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 20:45:04 2014 +0800"
      },
      "message": "[EVAL] Move common skipcount logic into skiploop\n\nThe functions evalloop and evalfor share the logic on checking\nand updating skipcount.  This patch moves that into the helper\nfunction skiploop.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "ebfdd97a10e34a5e70eadfc21ebfc033ef93a563",
      "tree": "3fc0164b796a104b850b40a871304e507edd3fc6",
      "parents": [
        "da30b4b787695fbf77e5d941ff350a66ca572bcb"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 19:45:58 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 19:45:58 2014 +0800"
      },
      "message": "[BUILTIN] Do not allow break to break across function calls\n\nAs it is if you do a multi-level break inside a function it\u0027ll\nactually include loops outside of the function call.  This is\ncounterintuitive.\n\nThis patch changes this by saving and resetting loopnest when\nentering a function.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "da30b4b787695fbf77e5d941ff350a66ca572bcb",
      "tree": "42950a7661b842fe4279bf5c28684def3c8c8fd8",
      "parents": [
        "0d1fb088a4a16569260de4266d4bd359491c6bcd"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 10:39:47 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Oct 06 10:39:47 2014 +0800"
      },
      "message": "[BUILTIN] Exit without arguments in a trap should use status outside traps\n\nPOSIX now requires that exit without arguments in a trap should\nreturn the last command status prior to executing traps.  This\npatch implements this behaviour.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "0d1fb088a4a16569260de4266d4bd359491c6bcd",
      "tree": "4dd2e92dc1bffc7eb1acc4ae85f8c3db89bf86f5",
      "parents": [
        "b4ce4120f87d89476b2d6ab31df43900d2f5ce89"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Oct 03 14:07:07 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Oct 03 14:07:07 2014 +0800"
      },
      "message": "[EVAL] Do not clobber exitstatus in evalcommand\n\nAll originators of EXERROR have been setting the exitstatus for\na while now.  So it is no longer appropriate to set it explicitly\nin evalcommand.\n\nIn fact doing so may cause the original exitstatus to be lost.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "b4ce4120f87d89476b2d6ab31df43900d2f5ce89",
      "tree": "f4f0e892d1987f9119be2892fee0fa3749523c10",
      "parents": [
        "d28c13e7119a605ef152a4310e9415dc7ae9b8f3"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 21:07:55 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 21:07:55 2014 +0800"
      },
      "message": "[ERROR] Set exitstatus in onint\n\nCurrently the exit status when we receive SIGINT is set in evalcommand\nwhich means that it doesn\u0027t always get set.  For example, if you press\nCTRL-C at the prompt of an interactive dash, the exit status is not\nset to 130 as it is in many other Bourne shells.\n\nThis patch fixes this by moving the setting of the exit status into\nonint which also simplifies evalcommand.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d28c13e7119a605ef152a4310e9415dc7ae9b8f3",
      "tree": "cddcf4e35da0161ac0c98f34795c0cbddf1b436c",
      "parents": [
        "6c3f73bc536082fec38bd36e6c8a121033c68835"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 19:49:48 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 19:49:48 2014 +0800"
      },
      "message": "[TRAP] Make sure evalskip is zero before running traps\n\nAs it is if dotrap is called with evalskip set to a nonzero value,\nit\u0027ll try to execute any set traps.  The result is that the first\ncommand in the first set trap will be executed while the rest of\nthe trap will be silently ignored due to evalskip.  This is highly\ncounterintuitive, even though both bash and ksh exhibit a similar\nbehaviour.\n\nThis patch fixes it by skipping trap processing if evalskip is set\non entry.  It also adds a dotrap call to the top of evaltree to\nensure that\n\n\twhile continue; do\n\t\tcontinue;\n\tdone\n\nhas a chance of running traps.\n\nFinally the pendingsigs check is moved into dotrap for compactness.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "6c3f73bc536082fec38bd36e6c8a121033c68835",
      "tree": "8b1676ccf4edfd5b5b191fc9b248fbebfad131f8",
      "parents": [
        "6df87cf1d4b7c0c490ab1803b863de10579df92e"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 08:26:06 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Oct 02 08:26:06 2014 +0800"
      },
      "message": "[EVAL] Fix use-after-free in dotrap/evalstring\n\nThe function dotrap calls evalstring using the stored trap string.\nIf evalstring then unsets that exact trap string then we will end\nup using freed memory.\n\nThis patch fixes it by making evalstring always duplicate the string\nbefore using it.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "6df87cf1d4b7c0c490ab1803b863de10579df92e",
      "tree": "dff633553be4594a134f6fa5763995ab2a72a7d9",
      "parents": [
        "ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 22:53:53 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 22:53:53 2014 +0800"
      },
      "message": "[PARSER] Add nlprompt/nlnoprompt helpers\n\nThis patch adds the nlprompt/nlnoprompt helpers to isolate code\ndealing with newlines and prompting.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "ef91d3d6a4c39421fd3a391e02cd82f9f3aee4a8",
      "tree": "9d7e3577d31c1a291835b1ab4752dc7d507f44f7",
      "parents": [
        "339b9c0781cca7afb0964c6a655cda8ad9cf9fc2"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 22:52:41 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 22:52:41 2014 +0800"
      },
      "message": "[PARSER] Handle backslash newlines properly after dollar sign\n\nOn Tue, Aug 26, 2014 at 12:34:42PM +0000, Eric Blake wrote:\n\u003e On 08/26/2014 06:15 AM, Oleg Bulatov wrote:\n\u003e \u003e Hi!\n\u003e \u003e \n\u003e \u003e While playing with sh generators I found that dash and bash have different\n\u003e \u003e interpretations for \u003cslash\u003e\u003cnewline\u003e sequence.\n\u003e \u003e \n\u003e \u003e $ dash -c \u0027EDIT\u003dxxx; echo $EDIT\\\n\u003e \u003e\u003e OR\u0027\n\u003e \u003e xxxOR\n\u003e \n\u003e Buggy.\n\u003e \n\u003e \u003e $ bash -c \u0027EDIT\u003dxxx; echo $EDIT\\\n\u003e \u003e OR\u0027\n\u003e \u003e /usr/bin/vim\n\u003e \n\u003e Correct behavior.\n\u003e \n\u003e \u003e \n\u003e \u003e $ dash -c \u0027echo \"$\\\n\u003e \u003e (pwd)\"\u0027\n\u003e \u003e $(pwd)\n\u003e \u003e \n\u003e \u003e Is it undefined behaviour in POSIX?\n\u003e \n\u003e No, it\u0027s well-defined, and dash is buggy.  POSIX says:\n\u003e \n\u003e http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_03\n\u003e \n\u003e \"the shell shall break its input into tokens by applying the first\n\u003e applicable rule below to the next character in its input\"\n\u003e \n\u003e Rule 4 covers backslash handling, while rule 5 covers locating the end\n\u003e of a word to be subject to $ expansion.  Therefore, rule 4 should happen\n\u003e first.  Rule 4 defers to the section on quoting, with the caveat that\n\u003e \u003cnewline\u003e joining is the only substitution that happens immediately as\n\u003e part of the parsing:\n\u003e \n\u003e http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02\n\u003e \n\u003e \"If a \u003cnewline\u003e follows the \u003cbackslash\u003e, the shell shall interpret this\n\u003e as line continuation. The \u003cbackslash\u003e and \u003cnewline\u003e shall be removed\n\u003e before splitting the input into tokens. Since the escaped \u003cnewline\u003e is\n\u003e removed entirely from the input and is not replaced by any white space,\n\u003e it cannot serve as a token separator.\"\n\u003e \n\u003e So the fact that dash is treating the elided backslash-newline as a\n\u003e token separator, and parsing your input as if ${EDIT}OR instead of\n\u003e ${EDITOR} is a bug in dash.\n\nI agree.  This patch should resolve this problem and similar ones\naffecting blackslash newlines after we encounter a dollar sign.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "339b9c0781cca7afb0964c6a655cda8ad9cf9fc2",
      "tree": "e9106c853e5d4ff385a60675b45a50ad707cc1c0",
      "parents": [
        "4f7e4c8201e580b9d31c09d8a484741072033c01"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 17:05:53 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Mon Sep 29 17:05:53 2014 +0800"
      },
      "message": "[INPUT] Kill pgetc_macro\n\npgetc_macro is identical to pgetc except that it\u0027s a macro and\npgetc isn\u0027t.  Since there is very little performance difference\non modern systems it\u0027s time to kill pgetc_macro.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4f7e4c8201e580b9d31c09d8a484741072033c01",
      "tree": "2ec700c405904ae054398ec76ebe1819ef49b898",
      "parents": [
        "f21016a1262450edb489cc533467e4575e0a6851"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sun Sep 28 18:40:18 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sun Sep 28 18:40:18 2014 +0800"
      },
      "message": "[BUILTIN] Correctly handle test ! ! \u003d !\n\nThis patch adds a special case in testcmd for the 4-argument\nexpression beginning with a !.  Without this ! ! \u003d ! is deemed\na syntax error, which breaks POSIX.\n\nNote that this special case does not extend down into subexpressions\nso if ! ! \u003d ! is used inside parentheses then a syntax error will\nstill occur as before.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "f21016a1262450edb489cc533467e4575e0a6851",
      "tree": "e59c24679d899e2176ea80aafd8a00735b06e994",
      "parents": [
        "580a7aed748ec80ac43781add5df9a7ff6d1dd45"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:25:34 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:27:20 2014 +0800"
      },
      "message": "Release 0.5.8.\n"
    },
    {
      "commit": "580a7aed748ec80ac43781add5df9a7ff6d1dd45",
      "tree": "bfeb35e428c1ee98a6988d51541f3f10b6b7a839",
      "parents": [
        "66e922a2efb18b61fb042a106d380ec38bd76169"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Fri Sep 26 22:21:16 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:27:20 2014 +0800"
      },
      "message": "[MAN] Clarify \"trap \u0027\u0027 signals\" syntax in manual page\n\nWhen the manpage states\n\n| \u003caction\u003e may be null, which cause the specified signals to be ignored.\n\nit is not immediately obvious what it means for an action to be\nnull.  Clarify by explicitly referring to an empty string, as\nopposed to a NULL pointer or the string \"null\".\n\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "66e922a2efb18b61fb042a106d380ec38bd76169",
      "tree": "f2cc4cc7d790f49de499cd7a91f9e8c312be2d57",
      "parents": [
        "012222e38cd0b48a3dabd10c9a3cf6b2c4c5befc"
      ],
      "author": {
        "name": "Adam Buchbinder",
        "email": "adam.buchbinder@gmail.com",
        "time": "Fri Sep 26 22:19:52 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:27:20 2014 +0800"
      },
      "message": "[MAN] 0 and EXIT both work for exit traps\n\nI saw a discussion in which there was some confusion over whether or not\nyou can use a symbolic name, since the manpage doesn\u0027t specifically say so.\n\nSigned-off-by: Adam Buchbinder \u003cadam.buchbinder@gmail.com\u003e\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "012222e38cd0b48a3dabd10c9a3cf6b2c4c5befc",
      "tree": "11d7a8dc02d9c01c19367f68416d7e1efa5e96f2",
      "parents": [
        "4c44561d9f97331bb23f900f47a69305091f3ab3"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:16:26 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:27:20 2014 +0800"
      },
      "message": "[MAN] Change characters for printf precision to bytes\n\nOn Sun, Mar 09, 2014 at 11:11:43AM +0000, Jeroen van Dijke wrote:\n\u003e \n\u003e There seems to be a bug in the dash man page, at least in 0.5.7. It reads:\n\u003e \n\u003e             Precision:\n\u003e                     An optional period, `.\u0027, followed by an optional digit string giving a precision which specifies the number of digits to appear after the decimal point, for e and f formats, or the maximum number of *characters* to be printed from a string (b and s for-\n\u003e                     mats); if the digit string is missing, the precision is treated as zero;\n\u003e \n\u003e dash behaves cuts to the number of bytes\n\u003e \n\u003e $ length\u003d10; printf \"%.${length}s\\n\" \"eeeeeeeeeeeeeeeeeeeeeeeee\"\n\u003e eeeeeeeeee\n\u003e $ length\u003d10; printf \"%.${length}s\\n\" \"ëëëëëëëëëëëëëëëëëëëëëëëëë”\n\u003e ëëëëë\n\u003e \n\u003e \n\u003e The  POSIX specification (2008) says:\n\u003e \n\u003e precision Gives the minimum number of digits to appear for the d, o, i, u, x, or X conversion specifiers (the field is padded with leading zeros), the number of digits to appear after the radix character for the e and f conversion specifiers, the maximum number of significant digits for the g conversion specifier; or the maximum number of *bytes* to be written from a string in the s conversion specifier. The precision shall take the form of a ( \u0027.\u0027 ) followed by a decimal digit string; a null digit string is treated as zero.\n\u003e \n\u003e So it seems to me that “characters” should be changed to “bytes”.\n\nIndeed and this patch makes that change.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4c44561d9f97331bb23f900f47a69305091f3ab3",
      "tree": "f1cd0d1497ec8866b739fb6616c1753256993a36",
      "parents": [
        "842050da1c14d7dbe365cd750032fcd8eaaa1db2"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Fri Sep 26 22:27:13 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 22:27:13 2014 +0800"
      },
      "message": "[JOBS] Fix off-by-one error for multiple of four job numbers\n\nOn 29/07/13 23:44, Luigi Tarenga wrote:\n\u003e hi list,\n\u003e while writing a script to execute parallel ssh command on many host I found\n\u003e a strange behavior of dash. I can replicate it with a very simple script but\n\u003e didn\u0027t find any documentation about dash or POSIX that can explain it.\n\u003e \n\u003e tested on centos 6.4 (dash 0.5.5.1) and wih dash compiled from source (0.5.7)\n\u003e the following script reports error:\n\u003e \n\u003e #!/bin/dash\n\u003e \n\u003e sleep 3 \u0026\n\u003e sleep 3 \u0026\n\u003e sleep 3 \u0026\n\u003e sleep 3 \u0026\n\u003e \n\u003e #/bin/true\n\u003e jobs -l\n\u003e \n\u003e wait %1\n\u003e wait %2\n\u003e wait %3\n\u003e wait %4\n\u003e \n\u003e [vortex@lizard ~]$ ./dash-0.5.7/src/dash test.sh\n\u003e [4] + 4569 Running\n\u003e [3] - 4568 Running\n\u003e [2]   4567 Running\n\u003e [1]   4566 Running\n\u003e prova: 14: wait: No such job: %4\n\u003e [vortex@lizard ~]$ echo $?\n\u003e 2\n\nYes, this looks like a bug to me. The number of allocated jobs is always\nkept as a multiple of four, and the first check in considering whether\nthe job number is valid is \"if it\u0027s greater than or equal to the number\nof allocated job, it\u0027s invalid\". That doesn\u0027t look right. That would\nonly be right if jobs were zero-based, but they aren\u0027t. If it\u0027s exactly\nequal to the number of available jobs, it can still be valid. It works\nwhen adding /bin/true, because four more more jobs end up allocated\ninternally.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "842050da1c14d7dbe365cd750032fcd8eaaa1db2",
      "tree": "c1c4199fd63faf99695394c293880a4a5a842e49",
      "parents": [
        "29ee27dda68a63ce8b9dccdf2c86f75a4d754b5c"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 17:18:35 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 17:18:35 2014 +0800"
      },
      "message": "[BUILTIN] Set command -p path to /usr/sbin:/usr/bin:/sbin:/bin\n\nExclude /usr/local from command -p PATH.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "29ee27dda68a63ce8b9dccdf2c86f75a4d754b5c",
      "tree": "c8485a8d81c2377759ac176e5b645c4407c03c5b",
      "parents": [
        "65ae84b3d67425e16b85273e566d06ae942dcce9"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 16:47:25 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 16:47:25 2014 +0800"
      },
      "message": "[BUILTIN] Small optimisation of command -pv change\n\nThis patch moves the pathval call into the describe_command\nfunction and also eliminates an unnecessary branch when DEBUG\nis off.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "65ae84b3d67425e16b85273e566d06ae942dcce9",
      "tree": "02eb3956ee0437bac65b361adaa4380febe62e4b",
      "parents": [
        "b34499f5c851d1a70db95b56bd02eff0329d4a1a"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Fri Sep 26 16:35:15 2014 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Sep 26 16:35:15 2014 +0800"
      },
      "message": "[BUILTIN] command: allow combining -p with -v\n\nOn 10/07/13 20:18, Craig Loomis wrote:\n\u003e   Dash (0.5.7 and git master) does not implement \u0027command -p\u0027\n\u003e according to the standard, and opens an intriguing security hole to\n\u003e anyone trying this scheme.\n\u003e \n\u003e   When using \u0027command -v\u0027 to simply print the path to an executable,\n\u003e \u0027-p\u0027 has no effect:\n\nYou\u0027re right. dash has never supported combining -p with -v, but back in\n2005 this was seemingly accidentally changed from reporting a syntax\nerror to silently ignoring the -p option, only about a month after dash\nmoved to git.\n\nMaking sure that -p is respected even when -v is used is easy enough,\nsee attached patch. Tested even with explicit PATH overrides:\n  PATH\u003d/path/to/some/other/dash command -pv dash\ncorrectly outputs /bin/dash on my system.\n\n\u003e the path that \u0027command -p cmd\u0027 uses is a compiled-in constant\n\u003e from dash\u0027s src/var.c:defpathvar, which starts with\n\u003e \"/usr/local/sbin:/usr/local/bin\". To me, that is both completely\n\u003e unexpected and pretty scary -- /usr/local/bin is (very) often less\n\u003e well secured or checked than, say, /bin:\n\nAgreed. However, IMO, it does make sense for defpathvar to start with\n/usr/local/*: it has two separate functions, it also serves as the\ndefault path (hence the name) when dash is started with no PATH set at\nall. I think fixing this should be done in a way so that command -p does\nnot use defpathvar, not by changing defpathvar. bash uses the same\nconfstr function for this that getconf uses, and it shouldn\u0027t be too\nmuch work to make dash use that too. If no one else comes up with a\nworking patch or a better approach, I\u0027ll try to get that working.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "b34499f5c851d1a70db95b56bd02eff0329d4a1a",
      "tree": "dff6c533f2c9067e37ccb45fb4b4c36247134227",
      "parents": [
        "a14c418aee9d4ccd7cf888024e318b300173099f"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 21:58:55 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 21:58:55 2013 +1000"
      },
      "message": "[BUILTIN] Fixed argument parsing crash in test\n\nWhen nexpr gets an unexpected EOI, this may cause crashes further\nup the call chain because we\u0027ve advanced t_wp too far.  Fix it by\nchecking for EOI in nexpr and only advancing t_wp if we\u0027ve got more\narguments.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a14c418aee9d4ccd7cf888024e318b300173099f",
      "tree": "6d767ed945497fc9653b86a68461620d8d5308ae",
      "parents": [
        "14f70561a50fc8eba75b818a4705fed44da2ba2e"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 21:27:42 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 21:27:42 2013 +1000"
      },
      "message": "[VAR] Initialise OPTIND after importing environment\n\nOn Sat, Mar 23, 2013 at 01:46:20AM +0000, Chris F.A. Johnson wrote:\n\u003e \n\u003e   According to both the dash man page and the POSIX spec, \"When the\n\u003e   shell is invoked, OPTIND is initialized to 1.\"\n\u003e \n\u003e   However, it actually takes the value of the environment variable\n\u003e   if it exists:\n\u003e \n\u003e $ OPTIND\u003d4 dash -c \u0027echo \"$OPTIND\"\u0027\n\u003e 4\n\u003e $ OPTIND\u003d4 bash -c \u0027echo \"$OPTIND\"\u0027\n\u003e 1\n\u003e $ OPTIND\u003d4 ksh -c \u0027echo \"$OPTIND\"\u0027\n\u003e 1\n\u003e $ OPTIND\u003d4 ksh93 -c \u0027echo \"$OPTIND\"\u0027\n\u003e 1\n\nThis patch fixes this by initialising OPTIND after importing the\nenvironment.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "14f70561a50fc8eba75b818a4705fed44da2ba2e",
      "tree": "ffaf59da24f789b4d442c9ed3b2bac2e3a678fc0",
      "parents": [
        "a590bd70054584da9caad2246a4d5824736e2469"
      ],
      "author": {
        "name": "Peter Rosin",
        "email": "peda@lysator.liu.se",
        "time": "Fri Aug 23 20:54:19 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 20:54:19 2013 +1000"
      },
      "message": "[VAR] Add newline when tracing in poplocalvars\n\nSigned-off-by: Peter Rosin \u003cpeda@lysator.liu.se\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a590bd70054584da9caad2246a4d5824736e2469",
      "tree": "b0fa7808b94cf19073e9a9c2050cf73de79e658f",
      "parents": [
        "5464ae7d9e226586b79527cb445d892177b70271"
      ],
      "author": {
        "name": "Jérémie Courrèges-Anglas",
        "email": "jca+dash@wxcvbn.org",
        "time": "Fri Aug 23 20:42:34 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 20:42:34 2013 +1000"
      },
      "message": "[MAN] Markup fixes in manual for mandoc 1.12.1\n\nwith Aleksey we briefly discussed the mdoc compatibility of the manpage,\nhere\u0027s a patch that makes mandoc 1.12.1 happier and behaves correctly\nagainst groff 1.21.  I want to include it in the staging dash-0.5.7\nOpenBSD port.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "5464ae7d9e226586b79527cb445d892177b70271",
      "tree": "29c055210014ccc9ed66af321f39a8032abf40f3",
      "parents": [
        "a7c21a6f4cb42d967854cae954efd4ee66bdea9c"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Fri Aug 23 20:30:28 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 20:30:28 2013 +1000"
      },
      "message": "[BUILTIN] Use PRIdMAX instead of %j in printf\n\nOn 12/03/2012 05:59 PM, Harald van Dijk wrote:\n\u003e On 12/03/2012 08:42 AM, Roy wrote:\n\u003e\u003e MSYS libc does not support %j[dXx] format, only %ll[dXx] is supported.\n\u003e\u003e\n\u003e\u003e diff --git a/src/bltin/printf.c b/src/bltin/printf.c\n\u003e\u003e index 893295c..12ce660 100644\n\u003e\u003e --- a/src/bltin/printf.c\n\u003e\u003e +++ b/src/bltin/printf.c\n\u003e\u003e @@ -319,11 +319,12 @@ mklong(const char *str, const char *ch)\n\u003e\u003e         char *copy;\n\u003e\u003e         size_t len;\n\u003e\u003e\n\u003e\u003e -       len \u003d ch - str + 3;\n\u003e\u003e +       len \u003d ch - str + 4;\n\u003e\u003e         STARTSTACKSTR(copy);\n\u003e\u003e         copy \u003d makestrspace(len, copy);\n\u003e\u003e -       memcpy(copy, str, len - 3);\n\u003e\u003e -       copy[len - 3] \u003d \u0027j\u0027;\n\u003e\u003e +       memcpy(copy, str, len - 4);\n\u003e\u003e +       copy[len - 4] \u003d \u0027l\u0027;\n\u003e\u003e +       copy[len - 3] \u003d \u0027l\u0027;\n\u003e\u003e         copy[len - 2] \u003d *ch;\n\u003e\u003e         copy[len - 1] \u003d \u0027\\0\u0027;\n\u003e\u003e         return (copy);\n\u003e \n\u003e The calling code uses the result to print intmax_t and uintmax_t values.\n\u003e Printing intmax_t values with %lld is wrong, this will only work if\n\u003e intmax_t is really a typedef for long long (which may be true on your\n\u003e system, but is not required by the standard).\n\u003e \n\u003e The other patch that Jonathan linked to should work just fine.\n\nHere\u0027s a slightly tweaked version of that patch. Regardless of whether\nPRIdMAX is defined as \"jd\" or as \"lld\", the use of memcpy here, first\ncopying \"jd\"/\"lld\" and the null byte, and only changing the \u0027d\u0027 after\nthat, surprisingly results in slightly shorter object code than the\noriginal byte-by-byte approach, even though memcpy is fully inlined.\nPerhaps that could be a reason for applying this, even if the original\nreason for it, making the code work on not-quite-conforming systems,\nisn\u0027t good enough to get it in dash.\n\nTested with normal glibc, and with glibc hacked to not provide PRIdMAX.\n\nReviewed-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a7c21a6f4cb42d967854cae954efd4ee66bdea9c",
      "tree": "3002943314ed39a93794b43aa9ac2e4fd7a7b343",
      "parents": [
        "8813a3d9528f1bca7afa858c35c074a5866f7d67"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 20:04:12 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 20:04:12 2013 +1000"
      },
      "message": "[EXPAND] Propagate EXP_QPAT in subevalvar\n\nOn Tue, Aug 28, 2012 at 01:27:24PM +0000, Todor Vlaev wrote:\n\u003e \n\u003e While playing around with parameter expansion I noticed that the\n\u003e following didn\u0027t work in dash  (dash 0.5.5.1-7.4ubuntu1) as compared\n\u003e to bash even though I believe it should be POSIX-compliant:\n\u003e \n\u003e my_str\u003dswan; last_char\u003d\"${my_str#${my_str%?}}\"; echo ${last_char}\n\u003e \n\u003e If the double quotes are removed, the last character is printed correctly.\n\u003e \n\u003e At a quick glance through the commits after the 0.5.5.1 release I saw\n\u003e the following bug fix. Could it be related?\n\u003e \n\u003e 0d7d66039b614b642c775432fd64aa8c11f9a64d\n\u003e [EXPAND] Fix quoted pattern patch breakage\n\nWe need to propagate EXP_QPAT in subevalvar as otherwise a nested\nparameter expansion within subevalvar may be expanded incorrectly.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "8813a3d9528f1bca7afa858c35c074a5866f7d67",
      "tree": "a9c409e408ff010e064c24adb7d2986c4d5e4aa8",
      "parents": [
        "46abc8c6d8a5e9a5712bdc1312c0b6960eec65a4"
      ],
      "author": {
        "name": "Kimo Rosenbaum",
        "email": "kimor79@yahoo.com",
        "time": "Fri Aug 23 12:27:47 2013 +1000"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Aug 23 12:27:47 2013 +1000"
      },
      "message": "[MAN] Fix typo for wait\n\nThis is a small patch to fix the paragraph about \u0027wait\u0027 in the dash manpage.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "46abc8c6d8a5e9a5712bdc1312c0b6960eec65a4",
      "tree": "e83c297de3cfa32ab1b05ce24b489af55fc21a20",
      "parents": [
        "f748bf12720bb350d3d8a2dbdf00fb47c9b90720"
      ],
      "author": {
        "name": "Christoph Mathys",
        "email": "eraserix@gmail.com",
        "time": "Tue Jul 03 17:36:01 2012 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Jul 03 17:36:01 2012 +0800"
      },
      "message": "[BUILTIN] Add support for ulimit -r\n\nI recently found myself in need to have dash support \u0027ulimit -r\u0027 to\nset maximum realtime priority. Attached is a patch that adds the\nparameter to the builtin ulimit command and updates the manpage.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "f748bf12720bb350d3d8a2dbdf00fb47c9b90720",
      "tree": "60d04dbb3ceb57859d1587632160e77d1ead39b0",
      "parents": [
        "46d3c1a614f11f0d40a7e73376359618ff07abcd"
      ],
      "author": {
        "name": "Jim Meyering",
        "email": "jim@meyering.net",
        "time": "Tue Jul 03 17:32:33 2012 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Jul 03 17:32:33 2012 +0800"
      },
      "message": "Avoid overflow for very long variable name\n\nOtherwise, this:\n  $ perl -le \u0027print \"v\"x(2**31+1) .\"\u003d1\"\u0027 | dash\nprovokes integer overflow:\n\n  (gdb) bt\n  #0  doformat (dest\u003d0x61d580, f\u003d0x416a08 \"%s: %d: %s: \", ap\u003d0x7fffffffd308)\n      at output.c:310\n  #1  0x00000000004128c1 in outfmt (file\u003d0x61d580, fmt\u003d0x416a08 \"%s: %d: %s: \")\n      at output.c:257\n  #2  0x000000000040382e in exvwarning2 (msg\u003d0x417339 \"Out of space\",\n      ap\u003d0x7fffffffd468) at error.c:125\n  #3  0x000000000040387e in exverror (cond\u003d1, msg\u003d0x417339 \"Out of space\",\n      ap\u003d0x7fffffffd468) at error.c:156\n  #4  0x0000000000403938 in sh_error (msg\u003d0x417339 \"Out of space\") at error.c:172\n  #5  0x000000000040c970 in ckmalloc (nbytes\u003d18446744071562067984)\n      at memalloc.c:57\n  #6  0x000000000040ca78 in stalloc (nbytes\u003d18446744071562067972)\n      at memalloc.c:132\n  #7  0x000000000040ece9 in grabstackblock (len\u003d18446744071562067972)\n      at memalloc.h:67\n  #8  0x00000000004106b5 in readtoken1 (firstc\u003d118, syntax\u003d0x419522 \"\",\n      eofmark\u003d0x0, striptabs\u003d0) at parser.c:1040\n  #9  0x00000000004101a4 in xxreadtoken () at parser.c:826\n  #10 0x000000000040fe1d in readtoken () at parser.c:697\n  #11 0x000000000040edcc in parsecmd (interact\u003d0) at parser.c:145\n  #12 0x000000000040c679 in cmdloop (top\u003d1) at main.c:224\n  #13 0x000000000040c603 in main (argc\u003d2, argv\u003d0x7fffffffd9f8) at main.c:178\n\n  #8  0x00000000004106b5 in readtoken1 (firstc\u003d118, syntax\u003d0x419522 \"\",\n      eofmark\u003d0x0, striptabs\u003d0) at parser.c:1040\n  1040    grabstackblock(len);\n  (gdb) p len\n  $30 \u003d -2147483644\n\nSigned-off-by: Jim Meyering \u003cmeyering@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "46d3c1a614f11f0d40a7e73376359618ff07abcd",
      "tree": "889c7ccdf81c2559c784158333664fa14217b344",
      "parents": [
        "219aefc9724acc0699a9fbd48e6dda53aeff4ef8"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Feb 25 15:35:18 2012 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Feb 25 15:35:18 2012 +0800"
      },
      "message": "[VAR] Sanitise environment variable names on entry\n\nOn Tue, Feb 14, 2012 at 10:48:48AM +0000, harald@redhat.com wrote:\n\u003e \n\u003e \"export -p\" prints all environment variables, without checking if the\n\u003e environment variable is a valid dash variable name.\n\u003e \n\u003e IMHO, the only valid usecase for \"export -p\" is to eval the output.\n\u003e \n\u003e $ eval $(export -p); echo OK\n\u003e OK\n\u003e \n\u003e Without this patch the following test does error out with:\n\u003e \n\u003e test.py:\n\u003e import os\n\u003e os.environ[\"test-test\"]\u003d\"test\"\n\u003e os.environ[\"test_test\"]\u003d\"test\"\n\u003e os.execv(\"./dash\", [ \u0027./dash\u0027, \u0027-c\u0027, \u0027eval $(export -p); echo OK\u0027 ])\n\u003e \n\u003e $ python test.py\n\u003e ./dash: 1: export: test-test: bad variable name\n\u003e \n\u003e Of course the results can be more evil, if the environment variable\n\u003e name is crafted, that it injects valid shell code.\n\nThis patch fixes the issue by sanitising all environment variable names\nupon entry into the shell.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "219aefc9724acc0699a9fbd48e6dda53aeff4ef8",
      "tree": "f148519691fddeb0587d5aabd9630ba6e76de66c",
      "parents": [
        "4da0e221ba2244921862d46cdeefbc8ab5808eed"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Aug 17 09:33:14 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Aug 17 09:34:47 2011 +0800"
      },
      "message": "[SHELL] Add top-level autogen.sh\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4da0e221ba2244921862d46cdeefbc8ab5808eed",
      "tree": "929df8e803e84716319de3a1f94a085509bc652e",
      "parents": [
        "b5bda1d94f7a62d88c6a257a283426c16906c8cb"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Aug 17 09:31:17 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Aug 17 09:34:47 2011 +0800"
      },
      "message": "[SHELL] Allow building without LINEO support\n\nSimply specify --disable-lineno to configure.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "b5bda1d94f7a62d88c6a257a283426c16906c8cb",
      "tree": "06613b5c3f6061702960e49dada94be9436241fc",
      "parents": [
        "2b18a37786a45cd97a9b0481b49949210d22fc4a"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Wed Aug 17 09:28:24 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Wed Aug 17 09:28:24 2011 +0800"
      },
      "message": "[ARITH] Avoid imaxdiv when only one of the results is wanted\n\ndash rather pointlessly calls imaxdiv, only to discard one of its\nresults. The call was already made conditional a while back because some\nsystems don\u0027t have imaxdiv, but the generated code for the version with\nimaxdiv and the one with / and % is identical (with GCC 4.6.1 or ICC\n12.0.2, with -O0, -O2 or -Os), so it could just as well go entirely to\nclean up the code a little bit.\n\nSigned-off-by: Harald van Dijk \u003charald@gigawatt.nl\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "2b18a37786a45cd97a9b0481b49949210d22fc4a",
      "tree": "4915ebbab6588d7803940c895d717f083d406508",
      "parents": [
        "4f7e206782675b548565ca2bc82bc8c262a0f20e"
      ],
      "author": {
        "name": "maximilian attems",
        "email": "max@stro.at",
        "time": "Fri Jul 15 11:18:13 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 15 11:18:13 2011 +0800"
      },
      "message": "[SHELL] Fix klibc DEBUG compilation\n\ndash didn\u0027t compile in DEBUG mode against klibc for all long time.\nNow it only fails at link stage for not having setlinebuf(3) and\nfreopen(3).\n\nFixes:\n\nusr/dash/show.o: In function `opentrace\u0027:\nshow.c:(.text+0x36): undefined reference to `freopen\u0027\nshow.c:(.text+0x86): undefined reference to `setlinebuf\u0027\n\nSkip setlinebuf and use fclose/fopen inside __KLIBC__\nCompile tested with debug in klibc and against glibc in dash repo.\n\nSigned-off-by: maximilian attems \u003cmax@stro.at\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4f7e206782675b548565ca2bc82bc8c262a0f20e",
      "tree": "8c769a58f369b49c788e17d1832a19bb2093847b",
      "parents": [
        "481e7617881fe7361c4efebeac1bca047252f9d2"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Jul 09 22:05:22 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Sat Jul 09 22:05:22 2011 +0800"
      },
      "message": "[BUILTIN] Merge SKIPFUNC/SKIPFILE and only clear SKIPFUNC when leaving dotcmd\n\nCurrently upon leaving a dotcmd the evalskip state is reset so\nif a continue/break statement is used within a dot script it would\nhave no effect outside of the dot script.\n\nThis is inconsistent with other shells.\n\nThis patch is based on one by Jilles Tjoelker and only clears\nSKIPFUNC when leaving a dot script.  As a result continue/break\nwill remain in effect.\n\nIt also merges SKIPFUNC/SKIPFILE as they have no practical difference.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "481e7617881fe7361c4efebeac1bca047252f9d2",
      "tree": "2b61cf39f26bdaac2b67aea41159c40d43dfdeff",
      "parents": [
        "4e6797b08bfe25a89af13cfe7ca60bf4e1551a7b"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 08 17:00:50 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 08 17:00:50 2011 +0800"
      },
      "message": "Release 0.5.7.\n"
    },
    {
      "commit": "4e6797b08bfe25a89af13cfe7ca60bf4e1551a7b",
      "tree": "ed8fdc5ff4e5aa339b55f496785079282a2732b8",
      "parents": [
        "b8612a8d4d3eea270794510f890d55347d601cbf"
      ],
      "author": {
        "name": "Jim Meyering",
        "email": "meyering@redhat.com",
        "time": "Fri Jul 08 16:41:24 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 08 16:41:24 2011 +0800"
      },
      "message": "[EVAL] Avoid using undefined handler\n\n* src/eval.c (evalbltin, evalfun): Set savehandler before calling\nsetjmp with the possible \"goto *done\", where savehandler is used.\nOtherwise, clang warns that \"Assigned value is garbage or undefined\"\nat the point where \"savehandler\" is used on the RHS.\n\nSigned-off-by: Jim Meyering \u003cmeyering@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "b8612a8d4d3eea270794510f890d55347d601cbf",
      "tree": "ac2e8f06fbdef411cfd958188bb1a8f69aacc25e",
      "parents": [
        "d0a3b102c672bd07f190eacb7f95643a89d27c9a"
      ],
      "author": {
        "name": "Jim Meyering",
        "email": "meyering@redhat.com",
        "time": "Fri Jul 08 16:16:11 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 08 16:16:11 2011 +0800"
      },
      "message": "[MEMALLOC] Avoid clang warning about dead store to \"size\"\n\n* src/memalloc.c (makestrspace): Remove dead store.\n\nSigned-off-by: Jim Meyering \u003cmeyering@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "d0a3b102c672bd07f190eacb7f95643a89d27c9a",
      "tree": "26bdbe6625e58a306d21ca75a9a2b1132ce51966",
      "parents": [
        "a401e9df3df2951c0ec34406d723f6ad3c861afb"
      ],
      "author": {
        "name": "Jim Meyering",
        "email": "meyering@redhat.com",
        "time": "Fri Jul 08 16:12:20 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Jul 08 16:12:20 2011 +0800"
      },
      "message": "[MEMALLOC] Avoid gcc warning: variable \u0027oldstackp\u0027 set but not used\n\n* src/memalloc.c (growstackblock): Remove declaration and set of\nset-but-not-used variable.  Also remove a stray space-before-TAB.\n\nSigned-off-by: Jim Meyering \u003cmeyering@redhat.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a401e9df3df2951c0ec34406d723f6ad3c861afb",
      "tree": "80e263bcb2d91410a8d89548fd9ffb75f3aa85d4",
      "parents": [
        "4f9c19f9ba8dc756e732e0f17c1a2b2433eae467"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 15:22:03 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 16:41:14 2011 +0800"
      },
      "message": "[BUILTIN] Eliminate unnecessary promotion in echocmd\n\nThe patch to make outc into an inline function created an unnecessary\npromotion in echocmd due to its use of char vs. the int used by outc.\nThis patch changes echocmd to use int instead.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "4f9c19f9ba8dc756e732e0f17c1a2b2433eae467",
      "tree": "f8cef04eab98b39fb3d3f618717e536f0795ef51",
      "parents": [
        "8685de4a289cce690c4f828742de0714b8c0eaaa"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Thu Jul 07 15:20:29 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 16:41:14 2011 +0800"
      },
      "message": "[OUTPUT] Make outc an inline function\n\nAs \"gcc -pedantic\" warns, ISO C forbids conditional expressions with\nonly one void side.  So the (needslow ?  slowpath() : fastpath) code\nfor outc in the !USE_GLIBC_STDIO case might not be portable.\n\nMore importantly, it\u0027s hard to read.  Rip it out and replace it\nwith an inline function which should generate the same code.\n\nReported-by: Szabolcs Nagy \u003cnsz@port70.net\u003e\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "8685de4a289cce690c4f828742de0714b8c0eaaa",
      "tree": "35ad4995f107d6036eb38a917a862069fb84574f",
      "parents": [
        "ee5cbe9fd6bc02f31b4d955606288de36c3d4eab"
      ],
      "author": {
        "name": "Kalle Olavi Niemitalo",
        "email": "kon@iki.fi",
        "time": "Thu Jul 07 15:02:46 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 16:41:14 2011 +0800"
      },
      "message": "[MAN] Remove spurious space in descriptions of PS1, PS2, PS4\n\nFrom: Kalle Olavi Niemitalo \u003ckon@iki.fi\u003e\n\nLANG\u003dC man dash shows:\n\n     PS1        The primary prompt string, which defaults to ``$  \u0027\u0027, unless\n                you are the superuser, in which case it defaults to ``#  \u0027\u0027.\n\n     PS2        The secondary prompt string, which defaults to ``\u003e  \u0027\u0027.\n\n     PS4        Output before each line when execution trace (set -x) is\n                enabled, defaults to ``+  \u0027\u0027.\n\nEach of the documented default values has a graphic character and\ntwo spaces between the quotation marks.  However, the actual\ndefault values have only one space, rather than two.\n\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "ee5cbe9fd6bc02f31b4d955606288de36c3d4eab",
      "tree": "618418c1b268fdd17e98e09d7a6f96c3dcc86b66",
      "parents": [
        "66b614e29038e31745c4a5d296f64f8d64f5c377"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 13:58:48 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 16:41:14 2011 +0800"
      },
      "message": "[SHELL] Optimize dash -c \"command\" to avoid a fork\n\nOn Sun, Apr 10, 2011 at 07:36:49AM +0000, Jonathan Nieder wrote:\n\u003e From: Jilles Tjoelker \u003cjilles@stack.nl\u003e\n\u003e Date: Sat, 13 Jun 2009 16:17:45 -0500\n\u003e \n\u003e This change only affects strings passed to -c, when the -s option is\n\u003e not used.\n\u003e \n\u003e Use the EV_EXIT flag to inform the eval machinery that the string\n\u003e being passed is the entirety of input.  This way, a fork may be\n\u003e omitted in many special cases.\n\u003e \n\u003e If there are empty lines after the last command, the evalcmd will not\n\u003e see the end early enough and forks will not be omitted. The same thing\n\u003e seems to happen in bash.\n\u003e \n\u003e Example:\n\u003e   sh -c \u0027ps lT\u0027\n\u003e No longer shows a shell process waiting for ps to finish.\n\u003e \n\u003e [jn: ported from FreeBSD SVN r194128.  Bugs are mine.]\n\u003e \n\u003e Signed-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\n\nInstead of detecting EOF using the input layer, I\u0027m going to\nuse the parser instead.  In either case, we always have to read\nahead in order to complete the parsing of the previous node.\nTherefore we always know whether there is more to come, except\nin the case where we see a newline/semicolon or similar.\n\nFor the purposes of sh -c, this should be sufficient.\n\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "66b614e29038e31745c4a5d296f64f8d64f5c377",
      "tree": "bca0ac7ca1f8b2f62aa9017412976042cbccaade",
      "parents": [
        "ec2c84d3c4dba4b74440d72bdd1de416a9acd2a9"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Thu Jul 07 11:55:42 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Jul 07 12:56:32 2011 +0800"
      },
      "message": "[EVAL] Remove unused EV_BACKCMD flag\n\nThe original ash defered forking commands in backquotes so builtins\ncould be run in the same context as the shell.  This behavior was\ncontrolled using the EV_BACKCMD to evaltree.\n\nUnfortunately, as Matthias Scheler noticed in 1999 (NetBSD PR/7814),\nthe result was counterintuitive; for example, echo \"`cd /`\" would\nchange the cwd.  So ash 0.3.5 left out that optimization.  The\nEV_BACKCMD codepath stayed around, unused.\n\nSome time between ash 0.3.5-11 and ash 0.3.8-37, Debian ash omitted\nthe EV_BACKCMD pathway by guarding it with #ifdef notyet.  In dash\n0.5.1 and later, the commented code is no more.  Let\u0027s finish the job\nand remove the last vestiges.  If someone wants to work on omitting\nthe fork in backcmd, the remaining hints are not going to be very\nhelpful, anyway.\n\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "ec2c84d3c4dba4b74440d72bdd1de416a9acd2a9",
      "tree": "ba0dc60e76629ab37a243b7b57efcb0ed297a6e3",
      "parents": [
        "fd45f364a8387f7193f2b9be5d316ffb4361a5da"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 17:41:53 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 17:41:53 2011 +0800"
      },
      "message": "[PARSER] Fix clobbering of checkkwd\n\nOn Sun, Nov 07, 2010 at 02:21:21AM +0000, Jonathan Nieder wrote:\n\u003e\n\u003e Just ran into some strange behavior:\n\u003e\n\u003e $ cat test.sh\n\u003e #!/bin/sh\n\u003e echo hello \u003egreeting\n\u003e cat \u003c\u003cEOF \u0026\u0026\n\u003e $(cat greeting)\n\u003e EOF\n\u003e {\n\u003e \techo $?\n\u003e \tcat greeting\n\u003e } \u003e/dev/null\n\u003e\n\u003e\n\u003e $ sh test.sh\n\u003e hello\n\u003e test.sh: 7: {: not found\n\u003e 127\n\u003e hello\n\u003e test.sh: 10: Syntax error: \"}\" unexpected\n\u003e\n\u003e bash, mksh, pdksh, and ksh93 all print hello as expected.  The problem\n\u003e is reproducible with all versions of dash in the git repo.\n\nThis is caused by the clobbering of checkkwd due to readtoken\nrecursion while parsing a here document.\n\nThis patch fixes it by saving the original value of checkkwd.\n\nReported-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "fd45f364a8387f7193f2b9be5d316ffb4361a5da",
      "tree": "c81bb63705ec933ccdfcaabd39bb8f74cbd1d42d",
      "parents": [
        "a58d301405d96fb8ff87cffa3cabe3b110214a31"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Tue Mar 15 16:03:47 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 16:03:47 2011 +0800"
      },
      "message": "[DEBUG] Use va_copy when reusing a va_list\n\nWhen tracing (with the DEBUG compile-time option set to 1 or 2),\nexverror calls TRACEV to print its arguments before passing them on.\nSo the arguments are consumed by the time exvwarning looks for them,\nresulting in a segfault:\n\n $ sh -c \u0027\"\u0027\n sh: Syntax error: Unterminated quoted string\n $ sh -o debug -c \u0027\"\u0027\n sh: Segmentation fault (core dumped)\n\nMake a copy with va_copy to avoid this.\n\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "a58d301405d96fb8ff87cffa3cabe3b110214a31",
      "tree": "da1a9fe5169b2a9e2b43a30831c912e9f3f8a1b3",
      "parents": [
        "5bb39bb1995cb12d8da76b1d482df9be1acc2eb4"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Tue Mar 15 16:01:34 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 16:01:34 2011 +0800"
      },
      "message": "[EXPAND] Free IFS state after here document expansion\n\nHere\u0027s another bug bisecting to f42e443bb ([EXPAND] Fix\nifsfirst/ifslastp leak, 2010-09-08).  It was found with the following\ntest case, based on the configure script for Tracker:\n\n\tdash -x -c \u0027\n\t\t\u003c\u003c-_ACEOF\n\t\t$@\n\t\t_ACEOF\n\t\texec\n\t\u0027 - abcdefgh\n\t+\n\t+ exec   �a\n\texec: 1: : Permission denied\n\nThe missing ifsfree call is in expandarg when it returns to openhere\nduring here document expansion.\n\nReported-by: Aurelien Jarno \u003caurel32@debian.org\u003e\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "5bb39bb1995cb12d8da76b1d482df9be1acc2eb4",
      "tree": "09c088a97971babd2e0dd593d7601e282ed5fc69",
      "parents": [
        "accde25e09f39d3aca64a50c72f23bf84d312757"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Tue Mar 15 15:52:05 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 15:52:05 2011 +0800"
      },
      "message": "[SHELL] Improve LINENO support\n\nThis patch improves LINENO support by storing line numbers in the parse\ntree, for commands as well as for function definitions. It makes LINENO\nbehaves properly when calling functions, and has the added benefit of\nimproved line numbers in error messages when the last-parsed command is\nnot the last-executed one. It removes the earlier LINENO support, and\ninstead sets LINENO from evaltree when a command is executed\n\nSigned-off-by: Harald van Dijk \u003charald@gigawatt.nl\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "accde25e09f39d3aca64a50c72f23bf84d312757",
      "tree": "e925e3d3adf92a853a2d4c56d7cf9b9b2ff22ee9",
      "parents": [
        "bfcdc4969510997fe81debf52982641febfa1bdf"
      ],
      "author": {
        "name": "Harald van Dijk",
        "email": "harald@gigawatt.nl",
        "time": "Tue Mar 15 15:44:47 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 15:44:47 2011 +0800"
      },
      "message": "[EVAL] Let funcnode refer to a function definition, not its first command\n\nIt is not unrelated: I changed the meaning of struct funcnode\u0027s field n\nto refer to the function definition, rather than the list of the\nfunction\u0027s commands, because I needed to refer to the function\ndefinition node from evalfun, which only gets passed a funcnode. But it\nis something that could be applied independently (without being useful\nby itself), so I\u0027ve attached it as a separate patch for easier review.\n\nSigned-off-by: Harald van Dijk \u003charald@gigawatt.nl\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "bfcdc4969510997fe81debf52982641febfa1bdf",
      "tree": "695ccd9508035cc35be2cfe1ed6f2ae7e892c11e",
      "parents": [
        "6e1c8399e82c015f4e9d7d67e98d70541a3ef2d0"
      ],
      "author": {
        "name": "Brian Koropoff",
        "email": "bkoropoff@gmail.com",
        "time": "Tue Mar 15 15:35:14 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Tue Mar 15 15:35:14 2011 +0800"
      },
      "message": "[SHELL] Port to Solaris\n\n- Solaris lacks paths.h and the various _PATH_* #defines.\n  Check for them in configure.ac and fall back on the\n  usual suspects when they are missing.\n\n- Older Solaris lacks isblank(), and versions that have it\n  use a macro.  Check for the declaration in configure.ac\n  and fall back on a naive version when missing.\n\n- Older Solaris does not support %jd (intmax_t) in format\n  strings, but it does support the PRIdMAX macro from inttypes.h.\n  Do a configure check for PRIdMAX and use it in the code.\n  If it doesn\u0027t exist, define it to \"lld\" when sizeof(long long)\n  equals sizeof(intmax_t) as this is more likely to work on\n  older systems.  Otherwise, use \"jd\" and hope for the best.\n\n- Older Solaris lacks stdint.h, but inttypes.h provides the\n  same types and works on all platforms I\u0027ve tried dash on,\n  so just use it instead.\n\n- Older Solaris doesn\u0027t like it when vsnprintf() is passed\n  a NULL buffer (in violation of the POSIX spec, of course).\n  Pass a 1-byte dummy buffer instead.\n\n- Solaris lacks tempfile and mktemp programs.  Fall back on a\n  \"good-enough\" custom function in mkbuiltins.\n\nSigned-off-by: Brian Koropoff \u003cbkoropoff@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "6e1c8399e82c015f4e9d7d67e98d70541a3ef2d0",
      "tree": "3f0360309fb374bca544a4527f4f63897a8a0418",
      "parents": [
        "8213431d222b56316e225a1f308b62a72fbb1faa"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Mar 11 11:07:42 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Fri Mar 11 11:07:42 2011 +0800"
      },
      "message": "[BUILTIN] Fix backslash handling in read(1)\n\nThe new read(1) implementation incorrectly assumes that ifsbreakup\nignores characters escaped by CTLESC.  As such it fails to handle\nbackslashes except for escaping newlines.\n\nThis patch makes it use recordregion for every part that isn\u0027t\nescaped by a backslash.\n\nReported-by: Jilles Tjoelker \u003cjilles@stack.nl\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "8213431d222b56316e225a1f308b62a72fbb1faa",
      "tree": "303808ccc3ab85a23f38a4920228fd35f794d6da",
      "parents": [
        "54413164e587dd2dc5d7bce0bd3fab61d7ba758c"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrnieder@gmail.com",
        "time": "Thu Mar 10 21:23:11 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Mar 10 21:23:11 2011 +0800"
      },
      "message": "[BUILTIN] Dotcmd should exit with zero when doing nothing\n\nTim Allen wrote:\n\n\u003e The POSIX specification for the dot command[1] states:\n\u003e\n\u003e     EXIT STATUS\n\u003e         Returns the value of the last command executed, or a zero exit\n\u003e         status if no command is executed.\n\u003e\n\u003e If an empty file is sourced, then \"no command is executed\"\n\nI agree.  Looking through \"git log --patch src/main.c\", though, I find\nv0.5.3~42 (Do not clobber exit status in dotcmd., 2005-03-03), which\nappears to have been meant to take care of the following case:\n\n        $ cat printstatus.sh\n        echo $?\n        $ false\n        $ . ./printstatus.sh\n        1\n\nI wonder if the following on top might help (imitating evalcmd)?\n\nSigned-off-by: Jonathan Nieder \u003cjrnieder@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "54413164e587dd2dc5d7bce0bd3fab61d7ba758c",
      "tree": "eee570d39af410e50f18528dbdc69f8f245e4d6d",
      "parents": [
        "8c7562f11d4baa3316bc7b8547cf6497181468c5"
      ],
      "author": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Mar 10 20:59:46 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Mar 10 20:59:46 2011 +0800"
      },
      "message": "[BUILTIN] Fix CTLESC clobbering by read(1)\n\nThe changeset 55c46b7286f5d9f2d8291158203e2b61d2494420\n\n\t[BUILTIN] Honor tab as IFS whitespace when splitting fields in readcmd\n\nuses CTLESC to prevent field splitting in read(1).  However,\nit did not escape CTLESC itself in the input stream.  This patch\nadds the necessary CTLESC characters so that CTLESC isn\u0027t corrupted.\n\nReported-by: Alexey Gladkov \u003cgladkov.alexey@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    },
    {
      "commit": "8c7562f11d4baa3316bc7b8547cf6497181468c5",
      "tree": "a92115684c703b9770bc86e04002542b57ffead5",
      "parents": [
        "834629283f6c629a4da05ef60bae9445c954a19a"
      ],
      "author": {
        "name": "Brian Koropoff",
        "email": "bkoropoff@gmail.com",
        "time": "Thu Mar 10 20:19:16 2011 +0800"
      },
      "committer": {
        "name": "Herbert Xu",
        "email": "herbert@gondor.apana.org.au",
        "time": "Thu Mar 10 20:19:16 2011 +0800"
      },
      "message": "[SHELL] Port to AIX\n\n- AIX lacks a WCOREDUMP macro.  It\u0027s just used to\n  append \"(core dumped)\" to the crash message, so\n  #ifdef around it.\n\n- For some reason, the nl program on AIX defaults\n  to not printing line numbers (\"-b n\"), even though\n  the spec says it should default to \"-b t\".\n  Explicitly pass \"-b a\" for good measure in mkbuiltins.\n\nSigned-off-by: Brian Koropoff \u003cbkoropoff@gmail.com\u003e\nSigned-off-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\n"
    }
  ],
  "next": "834629283f6c629a4da05ef60bae9445c954a19a"
}
