SCP: Add MKDIR and RMDIR commands
This commit is contained in:
parent
85770281fb
commit
461f2ea513
2 changed files with 65 additions and 0 deletions
63
scp.c
63
scp.c
|
@ -1186,6 +1186,14 @@ static const char simh_help[] =
|
||||||
#define HLP_CP "*Commands Copying_Files CP"
|
#define HLP_CP "*Commands Copying_Files CP"
|
||||||
"3CP\n"
|
"3CP\n"
|
||||||
"++CP sfile dfile copies a file\n"
|
"++CP sfile dfile copies a file\n"
|
||||||
|
"2Creating Directories\n"
|
||||||
|
#define HLP_MKDIR "*Commands Creating_Directories MKDIR"
|
||||||
|
"3MKDIR\n"
|
||||||
|
"++MKDIR path creates a directory\n"
|
||||||
|
"2Deleting Directories\n"
|
||||||
|
#define HLP_RMDIR "*Commands Deleting_Directories RMDIR"
|
||||||
|
"3RMDIR\n"
|
||||||
|
"++RMDIR path deleting a directory\n"
|
||||||
#define HLP_SET "*Commands SET"
|
#define HLP_SET "*Commands SET"
|
||||||
"2SET\n"
|
"2SET\n"
|
||||||
/***************** 80 character line width template *************************/
|
/***************** 80 character line width template *************************/
|
||||||
|
@ -2334,6 +2342,8 @@ static CTAB cmd_table[] = {
|
||||||
{ "RM", &delete_cmd, 0, HLP_RM, NULL, NULL },
|
{ "RM", &delete_cmd, 0, HLP_RM, NULL, NULL },
|
||||||
{ "COPY", ©_cmd, 0, HLP_COPY, NULL, NULL },
|
{ "COPY", ©_cmd, 0, HLP_COPY, NULL, NULL },
|
||||||
{ "CP", ©_cmd, 0, HLP_CP, NULL, NULL },
|
{ "CP", ©_cmd, 0, HLP_CP, NULL, NULL },
|
||||||
|
{ "MKDIR", &mkdir_cmd, 0, HLP_MKDIR, NULL, NULL },
|
||||||
|
{ "RMDIR", &rmdir_cmd, 0, HLP_RMDIR, NULL, NULL },
|
||||||
{ "SET", &set_cmd, 0, HLP_SET, NULL, NULL },
|
{ "SET", &set_cmd, 0, HLP_SET, NULL, NULL },
|
||||||
{ "SHOW", &show_cmd, 0, HLP_SHOW, NULL, NULL },
|
{ "SHOW", &show_cmd, 0, HLP_SHOW, NULL, NULL },
|
||||||
{ "DO", &do_cmd, 1, HLP_DO, NULL, NULL },
|
{ "DO", &do_cmd, 1, HLP_DO, NULL, NULL },
|
||||||
|
@ -6548,6 +6558,59 @@ if ((stat == SCPE_OK) && (copy_state.count))
|
||||||
return copy_state.stat;
|
return copy_state.stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t_stat mkdir_cmd (int32 flg, CONST char *cptr)
|
||||||
|
{
|
||||||
|
char path[CBUFSIZE];
|
||||||
|
char *c;
|
||||||
|
struct stat filestat;
|
||||||
|
|
||||||
|
if ((!cptr) || (*cptr == '\0'))
|
||||||
|
return sim_messagef (SCPE_2FARG, "Must specify a directory path\n");
|
||||||
|
strlcpy (path, cptr, sizeof (path));
|
||||||
|
while ((c = strchr (path, '\\')))
|
||||||
|
*c = '/';
|
||||||
|
c = path;
|
||||||
|
while ((c = strchr (c, '/'))) {
|
||||||
|
*c = '\0';
|
||||||
|
if (!stat (path, &filestat)) {
|
||||||
|
if (filestat.st_mode & S_IFDIR) {
|
||||||
|
*c = '/'; /* restore / */
|
||||||
|
++c;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return sim_messagef (SCPE_ARG, "%s is not a directory\n", path);
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
mkdir (path)
|
||||||
|
#else
|
||||||
|
mkdir (path, 0777)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
return sim_messagef (SCPE_ARG, "Can't create directory: %s - %s\n", path, strerror (errno));
|
||||||
|
*c = '/'; /* restore / */
|
||||||
|
++c;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
mkdir (path)
|
||||||
|
#else
|
||||||
|
mkdir (path, 0777)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
return sim_messagef (SCPE_ARG, "Can't create directory: %s - %s\n", path, strerror (errno));
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
t_stat rmdir_cmd (int32 flg, CONST char *cptr)
|
||||||
|
{
|
||||||
|
if ((!cptr) || (*cptr == '\0'))
|
||||||
|
return sim_messagef (SCPE_2FARG, "Must specify a directory\n");
|
||||||
|
if (rmdir (cptr))
|
||||||
|
return sim_messagef (SCPE_ARG, "Can't remove directory: %s - %s\n", cptr, strerror (errno));
|
||||||
|
return SCPE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/* Debug command */
|
/* Debug command */
|
||||||
|
|
||||||
t_stat debug_cmd (int32 flg, CONST char *cptr)
|
t_stat debug_cmd (int32 flg, CONST char *cptr)
|
||||||
|
|
2
scp.h
2
scp.h
|
@ -95,6 +95,8 @@ t_stat dir_cmd (int32 flg, CONST char *cptr);
|
||||||
t_stat type_cmd (int32 flg, CONST char *cptr);
|
t_stat type_cmd (int32 flg, CONST char *cptr);
|
||||||
t_stat delete_cmd (int32 flg, CONST char *cptr);
|
t_stat delete_cmd (int32 flg, CONST char *cptr);
|
||||||
t_stat copy_cmd (int32 flg, CONST char *cptr);
|
t_stat copy_cmd (int32 flg, CONST char *cptr);
|
||||||
|
t_stat mkdir_cmd (int32 flg, CONST char *cptr);
|
||||||
|
t_stat rmdir_cmd (int32 flg, CONST char *cptr);
|
||||||
t_stat brk_cmd (int32 flag, CONST char *ptr);
|
t_stat brk_cmd (int32 flag, CONST char *ptr);
|
||||||
t_stat do_cmd (int32 flag, CONST char *ptr);
|
t_stat do_cmd (int32 flag, CONST char *ptr);
|
||||||
t_stat goto_cmd (int32 flag, CONST char *ptr);
|
t_stat goto_cmd (int32 flag, CONST char *ptr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue