/*********************************************************************\
* Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu) *
* Copyright (c) 1993 by Phil Richards (pgr@prg.ox.ac.uk) *
* *
* You may copy or modify this file in any manner you wish, provided *
* that this notice is always included, and that you hold the author *
* harmless for any loss or damage resulting from the installation or *
* use of this software. *
\*********************************************************************/
/* ---INFOBEGIN--- * DO NOT DELETE THIS COMMENT BLOCK!!!
COMMAND put local "upload files to the remote system"
* ---INFOEND--- */
#include "client.h"
static int dirty;
static int
put_file(char *name)
{
struct stat sbuf;
char *path;
int retval = 0;
FILE *fp;
if (stat(name, &sbuf) != 0)
{
perror(name);
return -1;
}
if (!S_ISREG(sbuf.st_mode))
{
ffprintf(STDERR,"put: `%s' is not a file\n", name);
return -1;
}
if (!validate_operation(name, UTIL_UPLOAD))
return -1;
path = strrchr(name, '/');
if (path)
path++;
else
path = name;
if ((fp = fopen(name, "r")))
{
if (util_upload(path, fp) < 0)
{
retval = 1;
dirty = 1;
}
(void)fclose(fp);
}
else
{
retval = 1;
ffprintf(STDERR,"put: cannot read `%s'\n", name);
}
return -retval;
}
/* ARGSUSED */
int
rput_main(int argc, char **argv, char **envp)
{
int retval;
dirty = 0;
if(argc > 1)
retval = -util_process_arglist(argv + 1, put_file);
else
{
retval = 0;
while (client_intr_state < 2)
{
#define INBUF_SIZE 1024
char buf[INBUF_SIZE], *eofn;
ffprintf(STDPROMPT, "(put) ");
if (!my_fgets(buf, INBUF_SIZE, STDIN) || !buf[0])
break;
if (buf[0] == '\n')
continue;
eofn = strrchr(buf, '\n');
if (eofn)
*eofn = 0;
retval |= (put_file(buf) < 0);
}
}
if (dirty)
util_dirtydir(".");
client_done();
return retval;
}
syntax highlighted by Code2HTML, v. 0.9.1