138 lines
2.1 KiB
C
138 lines
2.1 KiB
C
|
/* local.c Copyright 1992-2000 by Michael Temari All Rights Reserved
|
||
|
*
|
||
|
* This file is part of ftp.
|
||
|
*
|
||
|
*
|
||
|
* 01/25/96 Initial Release Michael Temari, <Michael@TemWare.Com>
|
||
|
*/
|
||
|
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <stdio.h>
|
||
|
#include <unistd.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <errno.h>
|
||
|
|
||
|
#include "ftp.h"
|
||
|
#include "local.h"
|
||
|
|
||
|
static char line2[512];
|
||
|
|
||
|
_PROTOTYPE(static void dodir, (char *path, int full));
|
||
|
|
||
|
int DOlpwd()
|
||
|
{
|
||
|
if(getcwd(line2, sizeof(line2)) == (char *)NULL)
|
||
|
printf("Could not determine local directory. %s\n", strerror(errno));
|
||
|
else
|
||
|
printf("Current local directory: %s\n", line2);
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOlcd()
|
||
|
{
|
||
|
char *path;
|
||
|
int s;
|
||
|
|
||
|
path = cmdargv[1];
|
||
|
|
||
|
if(cmdargc < 2) {
|
||
|
if(readline("Path: ", line2, sizeof(line2)) < 0)
|
||
|
return(-1);
|
||
|
path = line2;
|
||
|
}
|
||
|
|
||
|
if(chdir(path))
|
||
|
printf("Could not change local directory. %s\n", strerror(errno));
|
||
|
else
|
||
|
return(DOlpwd());
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOlmkdir()
|
||
|
{
|
||
|
char *path;
|
||
|
int s;
|
||
|
|
||
|
path = cmdargv[1];
|
||
|
|
||
|
if(cmdargc < 2) {
|
||
|
if(readline("Path: ", line2, sizeof(line2)) < 0)
|
||
|
return(-1);
|
||
|
path = line2;
|
||
|
}
|
||
|
|
||
|
if(mkdir(path, 0777))
|
||
|
printf("Could not make directory %s. %s\n", path, strerror(errno));
|
||
|
else
|
||
|
printf("Directory created.\n");
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOlrmdir()
|
||
|
{
|
||
|
char *path;
|
||
|
int s;
|
||
|
|
||
|
path = cmdargv[1];
|
||
|
|
||
|
if(cmdargc < 2) {
|
||
|
if(readline("Path: ", line2, sizeof(line2)) < 0)
|
||
|
return(-1);
|
||
|
path = line2;
|
||
|
}
|
||
|
|
||
|
if(rmdir(path))
|
||
|
printf("Could not remove directory %s. %s\n", path, strerror(errno));
|
||
|
else
|
||
|
printf("Directory removed.\n");
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOllist(void)
|
||
|
{
|
||
|
dodir(".", 1);
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOlnlst(void)
|
||
|
{
|
||
|
dodir(".", 0);
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
int DOlshell(void)
|
||
|
{
|
||
|
(void) system("$SHELL");
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
static void dodir(path, full)
|
||
|
char *path;
|
||
|
int full;
|
||
|
{
|
||
|
static char cmd[128];
|
||
|
static char name[32];
|
||
|
|
||
|
(void) tmpnam(name);
|
||
|
|
||
|
if(full)
|
||
|
sprintf(cmd, "ls -l %s > %s", path, name);
|
||
|
else
|
||
|
sprintf(cmd, "ls %s > %s", path, name);
|
||
|
|
||
|
(void) system(cmd);
|
||
|
sprintf(cmd, "more %s", name);
|
||
|
(void) system(cmd);
|
||
|
sprintf(cmd, "rm %s", name);
|
||
|
(void) system(cmd);
|
||
|
}
|