add test for processchmod
authorLaurent Mazet <mazet@softndesign.org>
Thu, 16 Jan 2025 21:43:40 +0000 (22:43 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Thu, 16 Jan 2025 21:43:40 +0000 (22:43 +0100)
fm.c

diff --git a/fm.c b/fm.c
index 95a387fa0095acabd84f49308bc233e425fc6623..41db91600ac61c9d197d4b6cc3f9558b1c2da1f2 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -435,13 +435,12 @@ int main (int argc, char *argv[])
             case ALT_X: /* chmod */
                 string = getwindow ("Change to mode", winscreen, 4, 4, "0644");
                 if (string) {
-                    int mode = strtol (string, NULL, 8);
-                    if ((mode <= 0)  || (mode > 0777)) {
-                        char *octal = itoo (mode);
-                        char *buf = strdupcat ("Can't change file(s) to mode 0", (octal && *octal) ? octal : "000" , NULL);
+                    char *endptr = NULL;
+                    int mode = strtol (string, &endptr, 8);
+                    if ((*endptr != '\0') || (mode <= 0) || (mode > 0777)) {
+                        char *buf = strdupcat ("Can't change file(s) to mode '", string, "'" , NULL);
                         msgwindow (buf, winscreen, 0);
                         getch ();
-                        free (octal);
                         free (buf);
                     } else {
                         for (i = 0; i < list[panel]->nb; i++) {
@@ -532,4 +531,10 @@ int main (int argc, char *argv[])
 /* test: echo "test" > .a && touch ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && test "$(ls -s ../.a)" = "0 ../.a" && rm .a ../.a */
 /* test: mkdir .a ../.a && { sleep 1; echo -en '\t\n\t'; sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ec'; sleep 1; echo -n y; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a ../.a */
 
+/* Chmod */
+/* test: touch .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo -n 0640; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
+/* test: mkdir .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo -n 0750; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rmdir .a */
+/* test: touch .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo -n 0649; sleep 1; echo; sleep 1; echo; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
+/* test: touch .a && { sleep 1; echo -en 'k\es'; sleep 1; echo -en '\ex'; sleep 1; echo -en '\e'; sleep 1; echo -en '\eq'; sleep 1; echo -n y; } | fm.exe && rm .a */
+
 /* vim: set ts=4 sw=4 et: */