Add -rr option to disable shell spawning

Fixes https://dev.yorhel.nl/ncdu/bug/94
This commit is contained in:
Yorhel 2017-01-06 18:35:30 +01:00
parent e4f211db68
commit 936a9446a8
4 changed files with 20 additions and 8 deletions

View file

@ -35,8 +35,8 @@ I<FILE> is equivalent to C<->, the file is read from standard input.
For the sake of preventing a screw-up, the current version of ncdu will assume For the sake of preventing a screw-up, the current version of ncdu will assume
that the directory information in the imported file does not represent the that the directory information in the imported file does not represent the
filesystem on which the file is being imported. That is, the refresh and file filesystem on which the file is being imported. That is, the refresh, file
deletion options in the browser will be disabled. deletion and shell spawning options in the browser will be disabled.
=item I<dir> =item I<dir>
@ -97,6 +97,16 @@ option has no effect when C<-o> is used, because there will not be a browser
interface in that case. It has no effect when C<-f> is used, either, because interface in that case. It has no effect when C<-f> is used, either, because
the deletion feature is disabled in that case anyway. the deletion feature is disabled in that case anyway.
WARNING: This option will only prevent deletion through the file browser. It is
still possible to spawn a shell from ncdu and delete or modify files from
there. To disable that feature as well, pass the C<-r> option twice (see
C<-rr>).
=item -rr
In addition to C<-r>, this will also disable the shell spawning feature of the
file browser.
=item --si =item --si
List sizes using base 10 prefixes, that is, powers of 1000 (KB, MB, etc), as List sizes using base 10 prefixes, that is, powers of 1000 (KB, MB, etc), as

View file

@ -417,8 +417,8 @@ int browse_key(int ch) {
info_show = 0; info_show = 0;
break; break;
case 'd': case 'd':
if(read_only || dir_import_active) { if(read_only >= 1 || dir_import_active) {
message = read_only message = read_only >= 1
? "File deletion disabled in read-only mode." ? "File deletion disabled in read-only mode."
: "File deletion not available for imported directories."; : "File deletion not available for imported directories.";
break; break;
@ -432,8 +432,10 @@ int browse_key(int ch) {
delete_init(sel, t); delete_init(sel, t);
break; break;
case 'b': case 'b':
if(dir_import_active) { if(read_only >= 2 || dir_import_active) {
message = "Shell feature not available for imported directories."; message = read_only >= 2
? "Shell feature disabled in read-only mode."
: "Shell feature not available for imported directories.";
break; break;
} }
shell_init(); shell_init();

View file

@ -84,7 +84,7 @@ struct dir {
/* program state */ /* program state */
extern int pstate; extern int pstate;
/* read-only flag */ /* read-only flag, 1+ = disable deletion, 2+ = also disable shell */
extern int read_only; extern int read_only;
/* minimum screen update interval when calculating, in ms */ /* minimum screen update interval when calculating, in ms */
extern long update_delay; extern long update_delay;

View file

@ -162,7 +162,7 @@ static void argv_parse(int argc, char **argv) {
printf("ncdu %s\n", PACKAGE_VERSION); printf("ncdu %s\n", PACKAGE_VERSION);
exit(0); exit(0);
case 'x': dir_scan_smfs = 1; break; case 'x': dir_scan_smfs = 1; break;
case 'r': read_only = 1; break; case 'r': read_only++; break;
case 's': si = 1; break; case 's': si = 1; break;
case 'o': export = val; break; case 'o': export = val; break;
case 'f': import = val; break; case 'f': import = val; break;