Closed jarun closed 4 years ago
Debug logs:
ln 6534: VERSION=2.9
ln 6120: paths[i]=/home/vaio/GitHub/nnn
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/ORIG_HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/index
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/description
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/tags
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/heads
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/heads/master
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin/master
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/info
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/info/exclude
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/COMMIT_EDITMSG
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/packed-refs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-applypatch.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/fsmonitor-watchman.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/applypatch-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-push.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/post-update.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/commit-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-commit.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/prepare-commit-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-rebase.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-receive.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/update.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/FETCH_HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/branches
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ae
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ae/788ddbdb4e1286bf214cb872e107b821333d54
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/2e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/2e/893680b511a5b6751721f1a3c927af81539eed
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/40
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/40/7616c29f176140c34afc8c736b87e16cb73fba
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a6
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a6/f5f1ebc862637fb19d44369b3dffdf1ac5ae1a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/12
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/12/896c1d46abbc9bb62a272aaff383f89bc125e6
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/2b
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/2b/4928094dff9169e089b0f7c9144a46640b494f
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/2b/731b918c809f0617c991143c9cb23ef402e13e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a4
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a4/a568079321bb0f25f6701953b9703187f3ca90
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a4/aecbcd29e3462d1bc38d0c7b1c67dfc332b17a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/5e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/5e/7c42c8223d8328bce2157023cd2887f4ea2491
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a8
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a8/7be622049622b4a9af411f7cbd552cd7860a43
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/a8/b4f946321dce790583df683bb9f9834fbdabf7
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/02
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/02/211c337dbe5b6bb6794ed079044f088540484a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/02/0710248d431aa49092406a5bf9b8933a57721b
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/31
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/31/6b3add2910e841c73e926dc80285cfb793b224
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/31/e24f539a7bc6b52e9a37fc8997cb581db82bc3
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/70
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/70/c9947ce826ec0577f5e1abd2483c11833f4076
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/70/973f102744863722be2ddf241d013245909db9
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/bd
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/bd/6e926ec370db482f085dd5104a6f4728a3cd49
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/bd/b783315a2048a45f9fd6ed536250a523ec6471
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/6c
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/6c/2dc7fc95c1e36432118c17b2926952cc5e739b
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/6c/52248343e7c4d3ed12d15774cc9adf3a21d877
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/6c/daf5c941afe4d978a7e73f73448cdd85a83f76
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/6c/bc0595c862469d601508cca77671e593ca8791
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/77
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/77/c9b103100f0d171cbb4d4205a8accd32e08af7
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c4
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c4/4ecc58f9a86ff31d179bf610653599e17669de
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c4/4a659c1c23d96a9ef3b4173e255d5a36f8caa2
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c4/34d8d4bcc5b875bf75ecb80b175c6088e5419c
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c4/d6da67db7ebc93e71f67c808a4abd6686717d9
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/9c
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/9c/9059389ed878870242dc78b9162fbdbc5d1188
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/9c/badc12be7dcc71cbadcf2fe79d873987eaa569
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/e3
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/e3/d80da2ad6662e1d0bee6ebed5d7ac2bf104bc5
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/00
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/00/6ca3c74adec6ba3dd97151881c45357d392e7b
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/00/7838a6f3434903f92f13a833e103cb8e3b266a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/53
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/53/fad5c93f09c3e20e882cf3277f79e716057b6a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/53/5209cb8767fc160ba3253d93da84bf593ab8f7
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/f0
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/f0/d987694c910085cb202b727221002a0b2cd61a
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/cc
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/cc/70bf9daa86ffb70639138119bf93c62887e573
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/cc/f6aea514f8fc2829549ada8fdeaa202a16ad6c
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c0
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c0/f423496ea7b0d149bb64324e6590049e97d561
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c0/7a41dce07ad40740cf7a8e56320aa4845068b0
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16/f7529cc07d65d7ed63ffacbedd43a6ec70be9d
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16/8b43badf1980fa22ae360b83e46ef59ea5897e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16/d4c4b678b6ead4da66034a827aa10ab463b055
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16/14ce172bdfeec652c8222eb0a08999a4fcb76b
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/16/84d7b24efa49f890d59f260a86be3aaddad256
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c1
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/c1/33d57be3539fff9368c91bc44c7f3c00052547
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ec
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ec/f17e177759678236d57ad357c538f1d812996e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ec/87910849892cf6236e376b3b83495ecc083f2e
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/ec/fc13c30bb699067af283de78e70937c6e193a8
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/76
ln 6121: strerror(errno)=File exists
ln 6567: home=/home/vaio
ln 6343: cfgdir=/home/vaio/.config
ln 6349: cfgdir=/home/vaio/.config/nnn
ln 6353: cfgdir=/home/vaio/.config/nnn/plugins
ln 6356: plugindir=/home/vaio/.config/nnn/plugins
ln 6365: cfgdir=/home/vaio/.config/nnn/sessions
ln 6368: sessiondir=/home/vaio/.config/nnn/sessions
ln 6377: cfgdir=/home/vaio/.config/nnn
ln 6390: g_selpath=/home/vaio/.config/nnn/.selection
ln 6574: opener=/home/vaio/.config/nnn/plugins/nuke
ln 6651: getenv(envs[ENV_VISUAL])=ewrap
ln 6652: getenv(envs[ENV_EDITOR])=vim
ln 6653: editor=ewrap
ln 6657: pager=less -Ri
ln 6661: shell=/usr/bin/zsh
ln 6663: getenv("PWD")=/home/vaio/GitHub/nnn
ln 4799: path=/tmp/nnnoXeCeF
ln 4799: path=/tmp/nnnoXeCeF
ln 1546: status=0
ln 1624: pid=10778
Are we missing chunks?
If I remove the .git
directory, all files are showing (I guess it had too many files and we hit some limit). However, other than CHANGELOG, all files are showing as directories:
[1 2 3 4] /tmp/nnnNDuiWp
LICENSE/
Makefile/
misc/
nnn/
nnn.1/
plugins/
README.md/
src/
CHANGELOG@
logs:
ln 6538: VERSION=2.9
ln 6196: chunk_count=2
ln 6197: entries=129
ln 6198: total_read=2678
ln 6120: paths[i]=/home/vaio/GitHub/nnn
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/index
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/description
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/tags
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/heads
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/heads/master
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/info
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/info/exclude
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/packed-refs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-applypatch.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/fsmonitor-watchman.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/applypatch-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-push.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/post-update.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/commit-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-commit.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/prepare-commit-msg.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-rebase.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/pre-receive.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/hooks/update.sample
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/branches
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/pack
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/pack/pack-eea5999dffb3b401ab4586cc3c1554107d5914b9.idx
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/pack/pack-eea5999dffb3b401ab4586cc3c1554107d5914b9.pack
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/objects/info
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/heads
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/heads/master
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/remotes
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/remotes/origin
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/remotes/origin/HEAD
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/config
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.gitignore
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/README.md
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.travis.yml
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/nnn
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/Makefile
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/dragdrop
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/treeview
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/dups
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/upgrade
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/fzcd
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/picker
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/pskill
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/renamer
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/mocplay
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/.cbcp
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/.nnn-plugin-helper
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/README.md
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/pdfread
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/ipinfo
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/ringtone
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/launch
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/hexview
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/mediainf
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/nuke
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/wall
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/imgview
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/pdfview
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/fzhist
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/nmount
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/boom
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/vidthumb
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/getplugs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/imgur
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/kdeconnect
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/upload
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/uidgid
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/chksum
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/autojump
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/oldbigfile
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/.ntfy
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/imgthumb
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/gutenread
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/suedit
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/diffs
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/moclyrics
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/fzopen
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/splitjoin
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/imgresize
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/organize
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.circleci
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.circleci/config.yml
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/LICENSE
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.github
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.github/FUNDING.yml
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.github/ISSUE_TEMPLATE.md
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/quitcd
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/quitcd/quitcd.fish
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/quitcd/quitcd.zsh
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/quitcd/quitcd.bash
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/quitcd/quitcd.csh
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion/fish
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion/zsh
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion/bash/nnn-completion.bash
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/test
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/test/mktest.sh
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/natool
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/natool/natool
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/packagecore
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/haiku
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/nnn.1
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/src
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/src/dbg.h
ln 6121: strerror(errno)=File exists
ln 6120: paths[i]=/home/vaio/GitHub/nnn/src/nnn.h
ln 6121: strerror(errno)=File exists
ln 6571: home=/home/vaio
ln 6347: cfgdir=/home/vaio/.config
ln 6353: cfgdir=/home/vaio/.config/nnn
ln 6357: cfgdir=/home/vaio/.config/nnn/plugins
ln 6360: plugindir=/home/vaio/.config/nnn/plugins
ln 6369: cfgdir=/home/vaio/.config/nnn/sessions
ln 6372: sessiondir=/home/vaio/.config/nnn/sessions
ln 6381: cfgdir=/home/vaio/.config/nnn
ln 6394: g_selpath=/home/vaio/.config/nnn/.selection
ln 6578: opener=/home/vaio/.config/nnn/plugins/nuke
ln 6655: getenv(envs[ENV_VISUAL])=ewrap
ln 6656: getenv(envs[ENV_EDITOR])=vim
ln 6657: editor=ewrap
ln 6661: pager=less -Ri
ln 6665: shell=/usr/bin/zsh
ln 6667: getenv("PWD")=/home/vaio/GitHub/nnn
ln 4463: ts2.tv_nsec - ts1.tv_nsec=27569
ln 4799: path=/tmp/nnneXyKPJ
ln 1546: status=0
ln 1624: pid=11065
If I exit after load_input()
and list the entries, I see they are created as directories:
~/GitHub/nnn$ ls -l /tmp/nnnYUHsEv
total 36
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 LICENSE/
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 Makefile/
drwxrwxr-x 8 vaio vaio 4096 Feb 6 04:44 misc/
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 nnn/
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 nnn.1/
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 out/
drwxrwxr-x 46 vaio vaio 4096 Feb 6 04:44 plugins/
drwxrwxr-x 2 vaio vaio 4096 Feb 6 04:44 README.md/
drwxrwxr-x 4 vaio vaio 4096 Feb 6 04:44 src/
lrwxrwxrwx 1 vaio vaio 31 Feb 6 04:44 CHANGELOG -> /home/vaio/GitHub/nnn/CHANGELOG
However, the entries are not created as directories if I use the maxdepth
option:
find . -maxdepth 1 -print0 | nnn
I see:
[1 2 3 4] /tmp/nnnEO0CDY
misc@
plugins@
src@
CHANGELOG@
LICENSE@
Makefile@
nnn@
nnn.1@
out@
README.md@
I think the problem is, even if I run:
~/GitHub/nnn$ find . -type f -print0 | nnn
the following is wrong:
g_prefixpath=/
Ohhhh. I think I just got it. At lest the
ln 6121: strerror(errno)=File exists
message. You gave it both a directory and a file in that directory. So it gets a bit confused.
But it is only reading 4096 bytes. That could be due to the pipe, perhaps find
has a weird output pattern?
I'll take a more detailed look at it a bit later today.
Also where on master are you?
I am on latest commit. Added some local logs for testing.
I think the problem is, even if I run:
~/GitHub/nnn$ find . -type f -print0 | nnn
the following is wrong:g_prefixpath=/
I can't reproduce this. For me it does run "correctly", that is, it displays some of the hidden files, like .git, .gitignore and .travis.yml, but it cuts out at a certain point for some reason.
However, the entries are not created as directories if I use the maxdepth option:
They are created as symlinks to dirs, that's the expected behavior.
Please remove the .git
directory and try,
They are created as symlinks to dirs, that's the expected behavior.
If you see my comment https://github.com/jarun/nnn/issues/463#issuecomment-582655168, the file LICENSE becomes a directory.
the file LICENSE becomes a directory.
A wrong length was used for a function call, I'll fix that.
Also we quit reading after not reading a full chunk, that's not always good. In this case it isn't, we read output from find faster than it can write it so we call it a day. I'll redo it so we read until read a 0.
I submited #465
@KlzXS there are issues still. Steps:
find . -type f -print0 | nnn
However, if I run find . -print0 | nnn
everything is listed.
@KlzXS
We need to resolve this for the next release to happen. I will also try to stay awake tonight for some joint debugging session. I am in IST. Probably I can pitch in at 23:00 PM my time.
run find . -type f -print0 | nnn
And... everything is listed. I assume you wrote "nnn" just form brevity and that you meant "path/to/this/pr/nnn".
I checked it out on two systems and it works. I'll need some more information. Also "nothing listed". Is nothing listed, or "nothing" is listed as in there are hidden files?
I will also try to stay awake tonight for some joint debugging session. I am in IST. Probably I can pitch in at 23:00 PM my time.
This is referring to today, 7th of February, right?
Yes, for me it's nothing... not even dots. I'll check again.
Yes, it's tonight.
I couldn't replicate what you are experiencing but I found a clone where it doesn't display .git/ref/remotes/origin. I'll look into that later.
It would seem that's it's another "wrong length" type of issue that I missed. Since it's directory content dependent.
I confirmed. I have the patch in place. Now if I run:
find . -type f -print0 | nnn
nothing is listed.
With debug enabled, I see the following logs:
ln 6543: VERSION=2.9
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/HEAD
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/index
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/heads/master
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin/master
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/refs/remotes/origin/HEAD
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/info/exclude
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/HEAD
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/heads/master
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/remotes/origin/master
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/.git/logs/refs/remotes/origin/HEAD
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/dragdrop
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/treeview
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/dups
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/upgrade
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/fzcd
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/picker
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/pskill
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/renamer
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/mocplay
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/plugins/.cbcp
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion/fish/nnn.fish
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/auto-completion/zsh/_nnn
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/misc/natool/natool
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/src/dbg.h
ln 6121: strerror(errno)=No such file or directory
ln 6120: paths[i]=/home/vaio/GitHub/nnn/src/nnn.h
ln 6121: strerror(errno)=No such file or directory
ln 6576: home=/home/vaio
ln 6352: cfgdir=/home/vaio/.config
ln 6358: cfgdir=/home/vaio/.config/nnn
ln 6362: cfgdir=/home/vaio/.config/nnn/plugins
ln 6365: plugindir=/home/vaio/.config/nnn/plugins
ln 6374: cfgdir=/home/vaio/.config/nnn/sessions
ln 6377: sessiondir=/home/vaio/.config/nnn/sessions
ln 6386: cfgdir=/home/vaio/.config/nnn
ln 6399: g_selpath=/home/vaio/.config/nnn/.selection
ln 6583: opener=/home/vaio/.config/nnn/plugins/nuke
ln 6660: getenv(envs[ENV_VISUAL])=ewrap
ln 6661: getenv(envs[ENV_EDITOR])=vim
ln 6662: editor=ewrap
ln 6666: pager=less -Ri
ln 6670: shell=/usr/bin/zsh
ln 6672: getenv("PWD")=/home/vaio/GitHub/nnn
ln 4799: path=/tmp/nnnmory8v
ln 2250: event->wd=0
ln 2251: event->mask=0
ln 2261: "inotify read done"=inotify read done
ln 1546: status=0
ln 1624: pid=29324
If I print common_prefix:
ln 6240: common_prefix=H<85>ÿ^O<84>w^A
The patch is in place. Note that the line number is at the beginning so you know where I added the log.
I just pushed another commit that's supposed to fix the wrong lengths. For me it works.
ln 6240: common_prefix=H<85>ÿ^O<84>w^A
Unless you renamed something that's a function and not a variable. It makes sense that it's garbage.
Oh and as for the debugging session, I probably won't have access to a machine at the time, if there is a need for such a session, I could maybe try to chime in over my phone. But hopefully this time I got it right.
Let me test the latest version...
Still the same... :(
I picked the complete file from your changes. So no local changes either.
I know you guys are on it, but as you asked me to test, I can confirm that I repro the issue, and the latest code from #465 segfaults for me on find . -print0 | ./nnn
segfaults for me on find . -print0 | ./nnn
Yes it does. Thanks for noticing.
Still the same... :(
What I've gathered is that it doesn't create some directories that it has to. That's the "ln 6121: strerror(errno)=No such file or directory". But I don't see right now why this could be happening.
See how g_prefixpath
changes when we are switching from file config
to .gitignore
. The common prefix should have been: /home/vaio/GitHub/nnn/
but it comes as /
:
ln 6243: paths[i]=/home/vaio/GitHub/nnn/.git/config
ln 6250: g_prefixpath=/home/vaio/GitHub/nnn/.git
ln 6243: paths[i]=/home/vaio/GitHub/nnn/.gitignore
ln 6250: g_prefixpath=/
Update: The segfault would be from one of the recent changes in this patch BTW. I see it too.
I think common_prefix
is not calculating the prefix properly.
One note: we should always pass 2 directories to common_prefix
. For each path[i[ we should stat and see if it's a file or a path. If it's a file we should use xbasename()
to determine the dir and then call common_prefix
. In brief, we should not end up in a situation where the prefix is not a dir but a file path.
In brief, we should not end up in a situation where the prefix is not a dir but a file path.
That can't happen. common_prefix()
should only return prefixes ending with at a '/'. This would be problem in case only one path is supplied, should we then discard input when only one entry is given?
The common prefix should have been: /home/vaio/GitHub/nnn/ but it comes as /
I can't reproduce this. And I also can't debug it since the whole function is optimized away. Does the issue still exist if you compile with -O0
or -Og
?
I meant dirname() earleir, not basename().
Does the issue still exist if you compile with -O0 or -Og?
Yes.
find . -type f -print0 | nnn
works with the following patch:
diff --git a/src/nnn.c b/src/nnn.c
index 20e082e..05c1785 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -973,7 +973,7 @@ static char *common_prefix(const char *s, char *prefix)
blocks = len >> _WSHIFT;
len &= LONG_SIZE - 1;
- while (i < blocks && !(*x ^ *y))
+ while (i < blocks && (*x == *y))
++x, ++y, ++i;
/* This should always return */
@@ -6093,6 +6093,9 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
xstrlcpy(tmpdir, g_tmpfpath, g_tmpfplen);
xstrlcpy(tmp, "/nnnXXXXXX", 11);
+ /* Points right after the base tmp dir */
+ tmp += 10;
+
if (!mkdtemp(tmpdir)) {
free(tmpdir);
@@ -6109,14 +6112,19 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
continue;
}
- xstrlcpy(tmp + 10, paths[i] + len, strlen(paths[i]) + 1);
+ /* Don't copy the common prefix */
+ xstrlcpy(tmp, paths[i] + len, strlen(paths[i]) - len + 1);
- slash = xmemrchr((uchar *)tmp, '/', strlen(paths[i]) + 11);
- *slash = '\0';
+ /* Get the dir containing the path */
+ slash = xmemrchr((uchar *)tmp, '/', strlen(paths[i]) - len);
+ if (slash)
+ *slash = '\0';
xmktree(tmpdir, TRUE);
- *slash = '/';
+ if (slash)
+ *slash = '/';
+
if (symlink(paths[i], tmpdir)) {
DPRINTF_S(paths[i]);
DPRINTF_S(strerror(errno));
@@ -6126,7 +6134,8 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
if (ignore)
g_states |= STATE_MSG;
- tmp[10] = '\0';
+ /* Get the dir in which to start */
+ *tmp = '\0';
return tmpdir;
}
@@ -6151,12 +6160,15 @@ static char *load_input()
}
while (chunk_count < 512) {
- input_read = read(STDIN_FILENO, input, chunk);
+ input_read = read(STDIN_FILENO, input + total_read, chunk);
if (input_read < 0) {
DPRINTF_S(strerror(errno));
goto malloc_1;
}
+ if (input_read == 0)
+ break;
+
total_read += input_read;
++chunk_count;
@@ -6177,12 +6189,18 @@ static char *load_input()
off = next - input;
}
- if (input_read < chunk)
- break;
-
if (chunk_count == 512)
goto malloc_1;
+ /* We don't need to allocate another chunk */
+ if (chunk_count == (total_read - input_read) / chunk)
+ continue;
+
+ chunk_count = total_read / chunk;
+ if (total_read % chunk)
+ ++chunk_count;
+
+
if (!(input = xrealloc(input, (chunk_count + 1) * chunk)))
return NULL;
}
@@ -6194,6 +6212,10 @@ static char *load_input()
offsets[entries++] = off;
}
+ DPRINTF_D(entries);
+ DPRINTF_D(total_read);
+ DPRINTF_D(chunk_count);
+
if (!entries)
goto malloc_1;
@@ -6213,7 +6235,10 @@ static char *load_input()
if (!(paths[0] = xrealpath(paths[0], cwd)))
goto malloc_1; // free all entries
- xstrlcpy(g_prefixpath, paths[0], strlen(paths[0]) + 1);
+ DPRINTF_S(paths[0]);
+ xstrlcpy(g_prefixpath, dirname(paths[0]), strlen(dirname(paths[0])) + 1);
+
+ DPRINTF_S(g_prefixpath);
for (i = 1; i < entries; ++i) {
if (!(paths[i] = xrealpath(paths[i], cwd))) {
@@ -6222,12 +6247,18 @@ static char *load_input()
}
+ DPRINTF_S(paths[i]);
+
if (!common_prefix(paths[i], g_prefixpath)) {
entries = i + 1; // free from the current entry
goto malloc_2;
}
+
+ DPRINTF_S(g_prefixpath);
}
+ DPRINTF_S(g_prefixpath);
+
if (entries == 1) {
tmp = xmemrchr((uchar *)g_prefixpath, '/', strlen(g_prefixpath));
if (!tmp)
The segfault was happening due to the setting of *slash
without NULL check.
With the above patch we now have problem with:
find . -print0 | nnn
That's because if there's a .
as the first file, dirname() will give the parent directory and we will list only the parent dir.
We should skip .
in some way.
You only changed the comparison. How are the two different logically?
Nevermind. If it works, great, try it out a bit more and if there are no more issues, I'll put that in. That's what I get for trying to be fancy.
The segfault was happening due to the setting of *slash without NULL check.
Didn't I push a commit for that?
Didn't I push a commit for that?
Maybe I didn't notice.
What would be the simplest way to remove .
if it is the first file?
The following patch works in all cases. @maximbaz please test and confirm.
@KlzXS shall we keep the debug logs for now?
diff --git a/src/nnn.c b/src/nnn.c
index 20e082e..8c7cfc3 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -973,7 +973,7 @@ static char *common_prefix(const char *s, char *prefix)
blocks = len >> _WSHIFT;
len &= LONG_SIZE - 1;
- while (i < blocks && !(*x ^ *y))
+ while (i < blocks && (*x == *y))
++x, ++y, ++i;
/* This should always return */
@@ -6093,6 +6093,9 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
xstrlcpy(tmpdir, g_tmpfpath, g_tmpfplen);
xstrlcpy(tmp, "/nnnXXXXXX", 11);
+ /* Points right after the base tmp dir */
+ tmp += 10;
+
if (!mkdtemp(tmpdir)) {
free(tmpdir);
@@ -6109,14 +6112,19 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
continue;
}
- xstrlcpy(tmp + 10, paths[i] + len, strlen(paths[i]) + 1);
+ /* Don't copy the common prefix */
+ xstrlcpy(tmp, paths[i] + len, strlen(paths[i]) - len + 1);
- slash = xmemrchr((uchar *)tmp, '/', strlen(paths[i]) + 11);
- *slash = '\0';
+ /* Get the dir containing the path */
+ slash = xmemrchr((uchar *)tmp, '/', strlen(paths[i]) - len);
+ if (slash)
+ *slash = '\0';
xmktree(tmpdir, TRUE);
- *slash = '/';
+ if (slash)
+ *slash = '/';
+
if (symlink(paths[i], tmpdir)) {
DPRINTF_S(paths[i]);
DPRINTF_S(strerror(errno));
@@ -6126,7 +6134,8 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
if (ignore)
g_states |= STATE_MSG;
- tmp[10] = '\0';
+ /* Get the dir in which to start */
+ *tmp = '\0';
return tmpdir;
}
@@ -6139,6 +6148,7 @@ static char *load_input()
size_t offsets[LIST_FILES_MAX];
char **paths = NULL;
ssize_t input_read, total_read = 0, off = 0;
+ bool dotfirst = FALSE;
if (!input) {
DPRINTF_S(strerror(errno));
@@ -6151,12 +6161,15 @@ static char *load_input()
}
while (chunk_count < 512) {
- input_read = read(STDIN_FILENO, input, chunk);
+ input_read = read(STDIN_FILENO, input + total_read, chunk);
if (input_read < 0) {
DPRINTF_S(strerror(errno));
goto malloc_1;
}
+ if (input_read == 0)
+ break;
+
total_read += input_read;
++chunk_count;
@@ -6177,12 +6190,18 @@ static char *load_input()
off = next - input;
}
- if (input_read < chunk)
- break;
-
if (chunk_count == 512)
goto malloc_1;
+ /* We don't need to allocate another chunk */
+ if (chunk_count == (total_read - input_read) / chunk)
+ continue;
+
+ chunk_count = total_read / chunk;
+ if (total_read % chunk)
+ ++chunk_count;
+
+
if (!(input = xrealloc(input, (chunk_count + 1) * chunk)))
return NULL;
}
@@ -6194,6 +6213,10 @@ static char *load_input()
offsets[entries++] = off;
}
+ DPRINTF_D(entries);
+ DPRINTF_D(total_read);
+ DPRINTF_D(chunk_count);
+
if (!entries)
goto malloc_1;
@@ -6210,10 +6233,20 @@ static char *load_input()
if (!g_prefixpath)
goto malloc_1;
+ if (paths[0][0] == '.' && paths[0][1] == '\0')
+ dotfirst = TRUE;
+
if (!(paths[0] = xrealpath(paths[0], cwd)))
goto malloc_1; // free all entries
- xstrlcpy(g_prefixpath, paths[0], strlen(paths[0]) + 1);
+ DPRINTF_S(paths[0]);
+
+ if (dotfirst)
+ xstrlcpy(g_prefixpath, paths[0], strlen(paths[0]) + 1);
+ else
+ xstrlcpy(g_prefixpath, dirname(paths[0]), strlen(dirname(paths[0])) + 1);
+
+ DPRINTF_S(g_prefixpath);
for (i = 1; i < entries; ++i) {
if (!(paths[i] = xrealpath(paths[i], cwd))) {
@@ -6222,12 +6255,18 @@ static char *load_input()
}
+ DPRINTF_S(paths[i]);
+
if (!common_prefix(paths[i], g_prefixpath)) {
entries = i + 1; // free from the current entry
goto malloc_2;
}
+
+ DPRINTF_S(g_prefixpath);
}
+ DPRINTF_S(g_prefixpath);
+
if (entries == 1) {
tmp = xmemrchr((uchar *)g_prefixpath, '/', strlen(g_prefixpath));
if (!tmp)
When you update the PR with this patch, please rebase as well.
OR, shall I push the changes from my local?
OR, shall I push the changes from my local?
I'm fine with either.
What would be the simplest way to remove .if it is the first file?
It doesn't have to be the first file, nor only one appearance of it. The simplest would be to just handle all the NULLs preperly. The mkdir thing will fail as it should.
I'm fine with the debug logs it's just that they are very verbose.
Fixed at commit 1d60b6a4759c0d78c5046e21a12dff9a667d90ae.
Another point I was thinking of - when we list, we should probably tweak dentfill to use stat()
. That way even for the symlinks, the sizes will show.
See commit 72668069edc5499b6f4f3dce16a1de208f147075.
Inside the
nnn
directory, if I run:only the
.git
directory is listed.However, if I run:
all files are listed.