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
146
147
148
149
150
151
152
153
|
/*
* 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
#ifndef lint
static char sccsid[] = "@(#)tctsfile.c 1.9 (96/11/04) TET3 release 3.3";
#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"
#ifdef NEEDsrcFile
static char srcFile[] = __FILE__; /* file name for error reporting */
#endif
/* 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);
}
|