| 917 | } |
| 918 | |
| 919 | static int cmd_chmod(int argc, char **argv) |
| 920 | { |
| 921 | if (argc < 3) |
| 922 | { |
| 923 | rt_kprintf("Usage: chmod [OPTION]... MODE[,MODE]... FILE...\n"); |
| 924 | rt_kprintf(" chmod [-f|v|r] [u|g|o|a][+/-/=][r|w|x] file...\n"); |
| 925 | rt_kprintf(" -f suppress most error messages\n"); |
| 926 | rt_kprintf(" -v output a diagnostic for every file processed\n"); |
| 927 | rt_kprintf(" -r change files and directories recursively\n"); |
| 928 | rt_kprintf("Change the mode of each FILE to MODE.\n"); |
| 929 | } |
| 930 | else |
| 931 | { |
| 932 | int argv_c = 1; |
| 933 | char f = 0, r = 0, v = 0; |
| 934 | |
| 935 | if (argv[argv_c][0] == '-') |
| 936 | { |
| 937 | for (int i = 1; argv[argv_c][i]; i++) |
| 938 | { |
| 939 | switch (argv[argv_c][i]) |
| 940 | { |
| 941 | case 'f': |
| 942 | f = 1; |
| 943 | break; |
| 944 | case 'r': |
| 945 | r = 1; |
| 946 | break; |
| 947 | case 'v': |
| 948 | v = 1; |
| 949 | break; |
| 950 | default: |
| 951 | rt_kprintf("Error: Bad option: %c\n", argv[argv_c][i]); |
| 952 | return 0; |
| 953 | } |
| 954 | } |
| 955 | argv_c++; |
| 956 | } |
| 957 | |
| 958 | if (argc - argv_c > 1) |
| 959 | { |
| 960 | int U = 1, G = 2, O = 4, ALL = 7; |
| 961 | int off[5] = {0, 6, 3, 0, 0}; |
| 962 | int ADD = 1, SUB = 2, SET = 4; |
| 963 | int R = 4, W = 2, X = 1; |
| 964 | int user[3] = {0}, change[3] = {0}, mode[3] = {0}; |
| 965 | struct dfs_attr attr; |
| 966 | char *cmd = argv[argv_c]; |
| 967 | int index = 0, num = 0; |
| 968 | |
| 969 | while (cmd[index] != '\0') |
| 970 | { |
| 971 | switch (cmd[index]) |
| 972 | { |
| 973 | case 'u': |
| 974 | user[num] |= U; |
| 975 | break; |
| 976 | case 'g': |
nothing calls this directly
no test coverage detected