summaryrefslogtreecommitdiff
path: root/src/tet3/servlib/tctsfile.c
blob: 8fb6c347347e01118698ae0fc53d6757531ac509 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
 *      SCCS:  @(#)tctsfile.c	1.9 (96/11/04) 
 *
 *	UniSoft Ltd., London, England
 *
 * (C) Copyright 1992 X/Open Company Limited
 *
 * All rights reserved.  No part of this source code may be reproduced,
 * stored in a retrieval system, or transmitted, in any form or by any
 * means, electronic, mechanical, photocopying, recording or otherwise,
 * except as stated in the end-user licence agreement, without the prior
 * permission of the copyright owners.
 *
 * X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
 * the UK and other countries.
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

/************************************************************************

SCCS:   	@(#)tctsfile.c	1.9 96/11/04 TETware release 3.3
NAME:		tctsfile.c
PRODUCT:	TETware
AUTHOR:		Andrew Dingwall, UniSoft Ltd.
DATE CREATED:	June 1992

DESCRIPTION:
	TCCD save file and transfer save file functions

MODIFICATIONS:
	Denis McConalogue, UniSoft Limited, September 1993
	added savedir (save files directory) parameter to
	tet_tctslfiles() and tet_tctsmfiles()

	Denis McConalogue, UniSoft Limited, September 1993
	fix prototype for tc_tsfiles().

	Andrew Dingwall, UniSoft Ltd., August 1996
	removed savedir parameter from tet_tctsmfiles()
	(it doesn't do anything!)

************************************************************************/

#include <stdio.h>
#include "dtmac.h"
#include "dtmsg.h"
#include "avmsg.h"
#include "error.h"
#include "servlib.h"
#include "dtetlib.h"


/* static function declarations */
static int tc_tsfiles PROTOLIST((int, char **, int, char *, char *, int));


/*
**	tet_tctslfiles() - save files locally on a remote system
**
**	return 0 if successful or -1 on error
*/

int tet_tctslfiles(sysid, files, nfile, subdir, savedir)
int sysid, nfile;
char **files, *subdir, *savedir;
{
	return(tc_tsfiles(sysid, files, nfile, subdir, savedir, AV_TS_LOCAL));
}

/*
**	tet_tctsmfiles() - copy files on a remote system to subdir in the saved
**		files directory on the master system
**
**	return 0 if successful or -1 on error
*/

int tet_tctsmfiles(sysid, files, nfile, subdir)
int sysid, nfile;
char **files, *subdir;
{
	return(tc_tsfiles(sysid, files, nfile, subdir, (char *) 0,
		AV_TS_MASTER));
}

/*
**	tc_tsfiles() - send an OP_TSFILES message to TCCD and receive a reply
**
**	return 0 if successful or -1 on error
*/

static int tc_tsfiles(sysid, files, nfile, subdir, savedir, flag)
int sysid, flag;
register char **files, *subdir, *savedir;
register int nfile;
{
	register struct avmsg *mp;
	register int n;
	extern char tet_tcerrmsg[];

	/* make sure that files is non-zero and that nfile is +ve */
	if (!files || nfile <= 0) {
		tet_tcerrno = ER_INVAL;
		return(-1);
	}

	/* get the TCCD message buffer */
	if ((mp = (struct avmsg *) tet_tcmsgbuf(sysid, avmsgsz(OP_TSFILES_ARGC(nfile)))) == (struct avmsg *) 0) {
		tet_tcerrno = ER_ERR;
		return(-1);
	}

	/* set up the request message */
	mp->av_argc = OP_TSFILES_ARGC(nfile);
	AV_FLAG(mp) = flag;
	AV_SUBDIR(mp) = subdir;
	AV_SAVEDIR(mp) = savedir;
	for (n = 0; n < nfile; n++)
		AV_TSFILE(mp, n) = *files++;

	/* send the request and receive the reply */
	mp = (struct avmsg *) tet_tctalk(sysid, OP_TSFILES, TALK_DELAY);

	/* handle the return codes */
	switch (tet_tcerrno) {
	case ER_OK:
		return(0);
	case ER_INVAL:
	case ER_CONTEXT:
		break;
	case ER_ERR:
		if (!mp)
			break;
		/* else fall through */
	default:
		error(0, tet_tcerrmsg, tet_ptrepcode(tet_tcerrno));
		break;
	}

	/* here for server error return */
	return(-1);
}