diff --git a/programs/system/shell/Docs_rus.txt b/programs/system/shell/Docs_rus.txt index 6555a93a9..5531e4794 100644 --- a/programs/system/shell/Docs_rus.txt +++ b/programs/system/shell/Docs_rus.txt @@ -55,7 +55,7 @@ rm rmdir удаляет <каталог> shutdown выключает компьютер sleep приостанавливает работу Shell'а на заданное <время в сотых долях секунды> -touch создаёт пустой <файл> или изменяет дату/время создания файла. Не работает +touch создаёт пустой <файл> или изменяет дату/время создания файла uptime показывает время работы системы с момента загрузки ver показывает версию Shell, ver kernel - версию и номер ревизии ядра OS, ver cpu - информацию о процессоре diff --git a/programs/system/shell/cmd/cmd_cp.c b/programs/system/shell/cmd/cmd_cp.c index 7f755f554..3e6d89669 100644 --- a/programs/system/shell/cmd/cmd_cp.c +++ b/programs/system/shell/cmd/cmd_cp.c @@ -32,8 +32,8 @@ if (argc != 2) return TRUE; } -filename_in = (char*) malloc(4096); -filename_out = (char*) malloc(4096); +filename_in = (char*) malloc(FILENAME_MAX); +filename_out = (char*) malloc(FILENAME_MAX); if (argv[0][0] != '/') { diff --git a/programs/system/shell/cmd/cmd_mkdir.c b/programs/system/shell/cmd/cmd_mkdir.c index 0fcd0753a..366528e31 100644 --- a/programs/system/shell/cmd/cmd_mkdir.c +++ b/programs/system/shell/cmd/cmd_mkdir.c @@ -2,7 +2,7 @@ int cmd_mkdir(char dir[]) { -char temp[256]; +char temp[FILENAME_MAX]; kol_struct70 k70; unsigned result; @@ -34,6 +34,8 @@ if ( '/' == dir[0]) else { strcpy(temp, cur_dir); + if (temp[strlen(temp)-1] != '/') + strcat(temp, "/"); // add slash strcat(temp, dir); k70.p21 = temp; } diff --git a/programs/system/shell/cmd/cmd_more.c b/programs/system/shell/cmd/cmd_more.c index 3e65f051c..f1cf36d24 100644 --- a/programs/system/shell/cmd/cmd_more.c +++ b/programs/system/shell/cmd/cmd_more.c @@ -6,7 +6,7 @@ kol_struct70 k70; kol_struct_BDVK bdvk; unsigned result, filesize, pos, i; char buf[81]; //ЎгдҐа -char temp[256]; +char temp[FILENAME_MAX]; unsigned flags; if (strlen(file)<1) diff --git a/programs/system/shell/cmd/cmd_rm.c b/programs/system/shell/cmd/cmd_rm.c index 7b8673763..f01aaa9cd 100644 --- a/programs/system/shell/cmd/cmd_rm.c +++ b/programs/system/shell/cmd/cmd_rm.c @@ -3,7 +3,7 @@ int cmd_rm(char file[]) { kol_struct70 k70; -char temp[256]; +char temp[FILENAME_MAX]; unsigned result; if (NULL == file || strlen(file) == 0) @@ -28,6 +28,8 @@ if ( '/' == file[0]) else { strcpy(temp, cur_dir); + if (temp[strlen(temp)-1] != '/') + strcat(temp, "/"); // add slash strcat(temp, file); if ( !file_check(temp) ) diff --git a/programs/system/shell/cmd/cmd_rmdir.c b/programs/system/shell/cmd/cmd_rmdir.c index 688011385..2e755e7e1 100644 --- a/programs/system/shell/cmd/cmd_rmdir.c +++ b/programs/system/shell/cmd/cmd_rmdir.c @@ -2,7 +2,7 @@ int cmd_rmdir(char dir[]) { -char temp[256]; +char temp[FILENAME_MAX]; kol_struct70 k70; unsigned result; @@ -33,6 +33,8 @@ if ( '/' == dir[0]) else { strcpy(temp, cur_dir); + if (temp[strlen(temp)-1] != '/') + strcat(temp, "/"); // add slash strcat(temp, dir); k70.p21 = temp; } diff --git a/programs/system/shell/cmd/cmd_touch.c b/programs/system/shell/cmd/cmd_touch.c index 6a6500475..ea4556a83 100644 --- a/programs/system/shell/cmd/cmd_touch.c +++ b/programs/system/shell/cmd/cmd_touch.c @@ -3,7 +3,7 @@ int cmd_touch(char file[]) { kol_struct70 k70; -char temp[256]; +char temp[FILENAME_MAX]; unsigned result; if (NULL == file || strlen(file) == 0) @@ -33,6 +33,8 @@ if ( '/' == file[0]) else { strcpy(temp, cur_dir); + if (temp[strlen(temp)-1] != '/') + strcat(temp, "/"); // add slash strcat(temp, file); if ( !file_check(temp) ) k70.p00 = 2; @@ -47,6 +49,8 @@ k70.p16 = 0; k70.p20 = 0; k70.p21 = temp; +//printf("try to touch [%s], fn70(%d)\n\r", temp, k70.p00); + result = kol_file_70(&k70); if (0 == result) diff --git a/programs/system/shell/modules/module_executable.c b/programs/system/shell/modules/module_executable.c index 92befda71..ce823ba0f 100644 --- a/programs/system/shell/modules/module_executable.c +++ b/programs/system/shell/modules/module_executable.c @@ -4,7 +4,7 @@ int executable_run(char cmd[], char args[]) { -char exec[256]; +char exec[FILENAME_MAX]; int result; if ( '/' == cmd[0]) // Ґб«Ё Їгвм  Ўб®«ов­л© diff --git a/programs/system/shell/shell.c b/programs/system/shell/shell.c index 09d8b188b..e2c0b8561 100644 --- a/programs/system/shell/shell.c +++ b/programs/system/shell/shell.c @@ -121,6 +121,13 @@ strcpy(title, "SHELL "); strcat(title, SHELL_VERSION); CONSOLE_INIT(title); +if (sizeof (kol_struct70) != 25) +{ + printf("Invalid struct align kol_struct70, need to fix compile options\n\r"); + kol_exit(); +} + + strcpy(cur_dir, PATH); dir_truncate(cur_dir); diff --git a/programs/system/shell/system/kolibri.h b/programs/system/shell/system/kolibri.h index a3069834e..b5d665197 100644 --- a/programs/system/shell/system/kolibri.h +++ b/programs/system/shell/system/kolibri.h @@ -12,6 +12,7 @@ #define E_NOMEM 30 #define E_PARAM 33 +#define FILENAME_MAX 1024 #pragma pack(push,1) typedef struct