summaryrefslogtreecommitdiffstats
path: root/gnu/libexec/uucp/uux/uux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/libexec/uucp/uux/uux.c')
-rw-r--r--gnu/libexec/uucp/uux/uux.c272
1 files changed, 157 insertions, 115 deletions
diff --git a/gnu/libexec/uucp/uux/uux.c b/gnu/libexec/uucp/uux/uux.c
index c5e7c20..4990585 100644
--- a/gnu/libexec/uucp/uux/uux.c
+++ b/gnu/libexec/uucp/uux/uux.c
@@ -1,7 +1,7 @@
/* uux.c
Prepare to execute a command on a remote system.
- Copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor
+ Copyright (C) 1991, 1992, 1993, 1994, 1995 Ian Lance Taylor
This file is part of the Taylor UUCP package.
@@ -17,16 +17,16 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
The author of the program may be contacted at ian@airs.com or
- c/o Cygnus Support, Building 200, 1 Kendall Square, Cambridge, MA 02139.
+ c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
*/
#include "uucp.h"
#if USE_RCS_ID
-const char uux_rcsid[] = "$Id: uux.c,v 1.5 1994/10/02 23:09:41 ache Exp $";
+const char uux_rcsid[] = "$Id: uux.c,v 1.81 1995/08/02 01:25:17 ian Rel $";
#endif
#include "uudefs.h"
@@ -54,8 +54,24 @@ const char uux_rcsid[] = "$Id: uux.c,v 1.5 1994/10/02 23:09:41 ache Exp $";
operators. */
#define ZSHELLNONREDIRSEPS ";&*| \t"
-/* The name of the execute file. */
-const char *zXxqt_name;
+/* Whether this execution is occurring on the local system. */
+static boolean fXxqtlocal;
+
+/* The execution system. */
+static struct uuconf_system sXxqtsys;
+
+/* The name of local system from the point of view of the execution
+ system. */
+static const char *zXxqtloc;
+
+/* The job grade to use. */
+static char bXgrade = BDEFAULT_UUX_GRADE;
+
+/* The temporary file name of the execute file. */
+static char abXxqt_tname[CFILE_NAME_LEN];
+
+/* The name of the execute file on the remote system. */
+static char abXxqt_xname[CFILE_NAME_LEN];
/* The execute file we are creating. */
static FILE *eXxqt_file;
@@ -77,10 +93,7 @@ static void uxhelp P((void));
static void uxadd_xqt_line P((int bchar, const char *z1, const char *z2));
static void uxadd_send_file P((const char *zfrom, const char *zto,
const char *zoptions, const char *ztemp,
- const char *zforward,
- const struct uuconf_system *qxqtsys,
- const char *zxqtloc,
- int bgrade));
+ const char *zforward));
static void uxcopy_stdin P((FILE *e));
static void uxrecord_file P((const char *zfile));
static void uxabort P((void));
@@ -128,8 +141,6 @@ main (argc, argv)
const char *zconfig = NULL;
/* -j: output job id. */
boolean fjobid = FALSE;
- /* -g: job grade. */
- char bgrade = BDEFAULT_UUX_GRADE;
/* -l: link file to spool directory. */
boolean flink = FALSE;
/* -n: do not notify upon command completion. */
@@ -148,7 +159,6 @@ main (argc, argv)
pointer puuconf;
int iuuconf;
const char *zlocalname;
- const char *zxqtloc;
int i;
size_t clen;
char *zargs;
@@ -158,14 +168,10 @@ main (argc, argv)
char *zexclam;
boolean fgetcwd;
const char *zuser;
- struct uuconf_system sxqtsys;
- boolean fxqtlocal;
char *zforward;
char **pzargs;
int calloc_args;
int cargs;
- char abxqt_tname[CFILE_NAME_LEN];
- char abxqt_xname[CFILE_NAME_LEN];
const char *zinput_from;
const char *zinput_to;
const char *zinput_temp;
@@ -175,6 +181,7 @@ main (argc, argv)
struct uuconf_system slocalsys;
boolean fneedshell;
char *zfullcmd;
+ boolean fpoll;
char aboptions[10];
boolean fexit;
@@ -186,7 +193,7 @@ main (argc, argv)
opterr = 0;
while (1)
{
- while (getopt_long (argc, argv, "+a::bcCg:I:jlnprs:Wvx:z",
+ while (getopt_long (argc, argv, "+a:bcCg:I:jlnprs:Wvx:z",
asXlongopts, (int *) NULL) != EOF)
;
if (optind >= argc || strcmp (argv[optind], "-") != 0)
@@ -227,7 +234,7 @@ main (argc, argv)
break;
case 'I':
- /* Configuration file name. */
+ /* Configuration file name. */
if (fsysdep_other_config (optarg))
zconfig = optarg;
break;
@@ -239,7 +246,7 @@ main (argc, argv)
case 'g':
/* Set job grade. */
- bgrade = optarg[0];
+ bXgrade = optarg[0];
break;
case 'l':
@@ -308,7 +315,7 @@ main (argc, argv)
case 'v':
/* Print version and exit. */
- printf ("%s: Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
+ printf ("%s: Taylor UUCP %s, copyright (C) 1991, 92, 93, 94, 1995 Ian Lance Taylor\n",
zProgram, VERSION);
exit (EXIT_SUCCESS);
/*NOTREACHED*/
@@ -329,10 +336,10 @@ main (argc, argv)
}
}
- if (! UUCONF_GRADE_LEGAL (bgrade))
+ if (! UUCONF_GRADE_LEGAL (bXgrade))
{
ulog (LOG_ERROR, "Ignoring illegal grade");
- bgrade = BDEFAULT_UUX_GRADE;
+ bXgrade = BDEFAULT_UUX_GRADE;
}
if (optind == argc)
@@ -399,7 +406,10 @@ main (argc, argv)
calloc_args * sizeof (char *));
}
- clen = strcspn (zarg, ZSHELLSEPS);
+ if (*zarg == '(')
+ clen = strlen (zarg);
+ else
+ clen = strcspn (zarg, ZSHELLSEPS);
if (clen > 0)
{
pzargs[cargs] = zbufalc (clen + 1);
@@ -501,7 +511,7 @@ main (argc, argv)
if (zexclam == NULL)
{
zsys = zlocalname;
- fxqtlocal = TRUE;
+ fXxqtlocal = TRUE;
zforward = NULL;
}
else
@@ -509,7 +519,7 @@ main (argc, argv)
*zexclam = '\0';
zsys = zcmd;
zcmd = zexclam + 1;
- fxqtlocal = FALSE;
+ fXxqtlocal = FALSE;
/* See if we must forward this command through other systems
(e.g. uux a!b!cmd). */
@@ -526,40 +536,24 @@ main (argc, argv)
}
}
- if (fxqtlocal)
- sxqtsys = slocalsys;
+ if (fXxqtlocal)
+ sXxqtsys = slocalsys;
else
{
- iuuconf = uuconf_system_info (puuconf, zsys, &sxqtsys);
+ iuuconf = uuconf_system_info (puuconf, zsys, &sXxqtsys);
if (iuuconf != UUCONF_SUCCESS)
{
if (iuuconf != UUCONF_NOT_FOUND)
ulog_uuconf (LOG_FATAL, puuconf, iuuconf);
- if (! funknown_system (puuconf, zsys, &sxqtsys))
+ if (! funknown_system (puuconf, zsys, &sXxqtsys))
ulog (LOG_FATAL, "%s: System not found", zsys);
}
}
/* Get the local name the remote system know us as. */
- zxqtloc = sxqtsys.uuconf_zlocalname;
- if (zxqtloc == NULL)
- zxqtloc = zlocalname;
-
- /* We can send this as an E command if the execution is on a
- different, directly connected, system and the only file used is
- the standard input and comes from this system. This is true of
- the common cases of rmail and rnews. We get an execute file name
- here in case we need it. */
- if (fxqtlocal)
- zXxqt_name = zsysdep_xqt_file_name ();
- else
- zXxqt_name = zsysdep_data_file_name (&sxqtsys, zxqtloc, bgrade, TRUE,
- abxqt_tname, (char *) NULL,
- abxqt_xname);
- if (zXxqt_name == NULL)
- uxabort ();
-
- uxrecord_file (zXxqt_name);
+ zXxqtloc = sXxqtsys.uuconf_zlocalname;
+ if (zXxqtloc == NULL)
+ zXxqtloc = zlocalname;
/* Look through the arguments. Any argument containing an
exclamation point character is interpreted as a file name, and is
@@ -649,8 +643,8 @@ main (argc, argv)
/* Check if the file is already on the execution system. */
if (flocal)
- fonxqt = fxqtlocal;
- else if (fxqtlocal)
+ fonxqt = fXxqtlocal;
+ else if (fXxqtlocal)
fonxqt = FALSE;
else if (zforward == NULL ? zforw != NULL : zforw == NULL)
fonxqt = FALSE;
@@ -658,16 +652,16 @@ main (argc, argv)
&& zforw != NULL
&& strcmp (zforward, zforw) != 0)
fonxqt = FALSE;
- else if (strcmp (zsystem, sxqtsys.uuconf_zname) == 0)
+ else if (strcmp (zsystem, sXxqtsys.uuconf_zname) == 0)
fonxqt = TRUE;
- else if (sxqtsys.uuconf_pzalias == NULL)
+ else if (sXxqtsys.uuconf_pzalias == NULL)
fonxqt = FALSE;
else
{
char **pzal;
fonxqt = FALSE;
- for (pzal = sxqtsys.uuconf_pzalias; *pzal != NULL; pzal++)
+ for (pzal = sXxqtsys.uuconf_pzalias; *pzal != NULL; pzal++)
{
if (strcmp (zsystem, *pzal) == 0)
{
@@ -679,7 +673,7 @@ main (argc, argv)
/* Turn the file into an absolute path. */
if (flocal)
- zfile = zsysdep_local_file_cwd (zfile, sxqtsys.uuconf_zpubdir,
+ zfile = zsysdep_local_file_cwd (zfile, sXxqtsys.uuconf_zpubdir,
(boolean *) NULL);
else if (fexpand)
zfile = zsysdep_add_cwd (zfile);
@@ -692,8 +686,8 @@ main (argc, argv)
if (flocal)
{
if (! fin_directory_list (zfile,
- sxqtsys.uuconf_pzremote_receive,
- sxqtsys.uuconf_zpubdir, TRUE,
+ sXxqtsys.uuconf_pzremote_receive,
+ sXxqtsys.uuconf_zpubdir, TRUE,
FALSE, (const char *) NULL))
ulog (LOG_FATAL, "Not permitted to create %s", zfile);
}
@@ -747,7 +741,7 @@ main (argc, argv)
if (fonxqt)
uxadd_xqt_line ('O', zfile, (const char *) NULL);
else if (flocal)
- uxadd_xqt_line ('O', zfile, zxqtloc);
+ uxadd_xqt_line ('O', zfile, zXxqtloc);
else
uxadd_xqt_line ('O', zfile, zsystem);
pzargs[i] = NULL;
@@ -781,12 +775,12 @@ main (argc, argv)
if (! fsysdep_access (zfile))
uxabort ();
- zdata = zsysdep_data_file_name (&sxqtsys, zxqtloc, bgrade, FALSE,
+ zdata = zsysdep_data_file_name (&sXxqtsys, zXxqtloc, bXgrade, FALSE,
abtname, abdname, (char *) NULL);
if (zdata == NULL)
uxabort ();
- if (fcopy || flink || fxqtlocal)
+ if (fcopy || flink || fXxqtlocal)
{
boolean fdid;
@@ -814,7 +808,7 @@ main (argc, argv)
efile = esysdep_user_fopen (zfile, TRUE, TRUE);
if (! ffileisopen (efile))
uxabort ();
- if (! fcopy_open_file (efile, zdata, FALSE, TRUE))
+ if (! fcopy_open_file (efile, zdata, FALSE, TRUE, TRUE))
uxabort ();
(void) ffileclose (efile);
}
@@ -829,8 +823,8 @@ main (argc, argv)
/* Make sure the daemon can access the file. */
if (! fsysdep_daemon_access (zfile))
uxabort ();
- if (! fin_directory_list (zfile, sxqtsys.uuconf_pzlocal_send,
- sxqtsys.uuconf_zpubdir, TRUE,
+ if (! fin_directory_list (zfile, sXxqtsys.uuconf_pzlocal_send,
+ sXxqtsys.uuconf_zpubdir, TRUE,
TRUE, zuser))
ulog (LOG_FATAL, "Not permitted to send from %s",
zfile);
@@ -838,7 +832,7 @@ main (argc, argv)
zuse = zfile;
}
- if (fxqtlocal)
+ if (fXxqtlocal)
{
if (finput)
uxadd_xqt_line ('I', zuse, (char *) NULL);
@@ -861,8 +855,7 @@ main (argc, argv)
uxadd_send_file (zuse, abdname,
finputcopied ? "C" : "c",
- abtname, zforward, &sxqtsys,
- zxqtloc, bgrade);
+ abtname, zforward);
zbase = zsysdep_base_name (zfile);
if (zbase == NULL)
uxabort ();
@@ -933,7 +926,7 @@ main (argc, argv)
/* We must request the file from the remote system to
this one. */
- zdata = zsysdep_data_file_name (&slocalsys, zxqtloc, bgrade,
+ zdata = zsysdep_data_file_name (&slocalsys, zXxqtloc, bXgrade,
FALSE, abtname, (char *) NULL,
(char *) NULL);
if (zdata == NULL)
@@ -945,7 +938,7 @@ main (argc, argv)
spool directory; normally such requests are rejected.
This privilege is easy to abuse. */
s.bcmd = 'R';
- s.bgrade = bgrade;
+ s.bgrade = bXgrade;
s.pseq = NULL;
s.zfrom = zfile;
s.zto = zbufcpy (abtname);
@@ -958,7 +951,7 @@ main (argc, argv)
s.zcmd = NULL;
s.ipos = 0;
- zjobid = zsysdep_spool_commands (&sfromsys, bgrade, 1, &s);
+ zjobid = zsysdep_spool_commands (&sfromsys, bXgrade, 1, &s);
if (zjobid == NULL)
uxabort ();
@@ -978,7 +971,7 @@ main (argc, argv)
zcall_system = zbufcpy (sfromsys.uuconf_zname);
}
- if (fxqtlocal)
+ if (fXxqtlocal)
{
/* Tell the command execution to wait until the file
has been received, and tell it the real file
@@ -1009,8 +1002,8 @@ main (argc, argv)
/* Now we must arrange to forward the file on to the
execution system. We need to get a name to give
the file on the execution system (abxtname). */
- zdata = zsysdep_data_file_name (&sxqtsys, zxqtloc,
- bgrade, TRUE, abxtname,
+ zdata = zsysdep_data_file_name (&sXxqtsys, zXxqtloc,
+ bXgrade, TRUE, abxtname,
(char *) NULL,
(char *) NULL);
if (zdata == NULL)
@@ -1032,12 +1025,14 @@ main (argc, argv)
fprintf (e, "U %s %s\n", zsysdep_login_name (),
zlocalname);
fprintf (e, "F %s %s\n", abtname, zbase);
- fprintf (e, "C uucp -C -W -d -g %c %s %s!", bgrade,
- zbase, sxqtsys.uuconf_zname);
+ fprintf (e, "C uucp -C -W -d -g %c %s %s!", bXgrade,
+ zbase, sXxqtsys.uuconf_zname);
if (zforward != NULL)
fprintf (e, "%s!", zforward);
fprintf (e, "%s\n", abxtname);
+ if (! fstdiosync (e, zxqt))
+ ulog (LOG_FATAL, "fsync failed");
if (fclose (e) != 0)
ulog (LOG_FATAL, "fclose: %s", strerror (errno));
@@ -1068,7 +1063,7 @@ main (argc, argv)
char abdname[CFILE_NAME_LEN];
FILE *e;
- zdata = zsysdep_data_file_name (&sxqtsys, zxqtloc, bgrade, FALSE,
+ zdata = zsysdep_data_file_name (&sXxqtsys, zXxqtloc, bXgrade, FALSE,
abtname, abdname, (char *) NULL);
if (zdata == NULL)
uxabort ();
@@ -1082,11 +1077,13 @@ main (argc, argv)
uxcopy_stdin (e);
+ if (! fstdiosync (e, zdata))
+ ulog (LOG_FATAL, "fsync failed");
eXclose = NULL;
if (fclose (e) != 0)
ulog (LOG_FATAL, "fclose: %s", strerror (errno));
- if (fxqtlocal)
+ if (fXxqtlocal)
uxadd_xqt_line ('I', abtname, (const char *) NULL);
else
{
@@ -1135,6 +1132,8 @@ main (argc, argv)
}
}
+ fpoll = FALSE;
+
/* If we haven't written anything to the execution file yet, and we
have a standard input file, and we're not forwarding, then every
other option can be handled in an E command. */
@@ -1145,7 +1144,7 @@ main (argc, argv)
/* Set up an E command. */
s.bcmd = 'E';
- s.bgrade = bgrade;
+ s.bgrade = bXgrade;
s.pseq = NULL;
s.zuser = zuser;
s.zfrom = zinput_from;
@@ -1170,7 +1169,7 @@ main (argc, argv)
s.cbytes = -1;
s.zcmd = zfullcmd;
s.ipos = 0;
-
+
++cXcmds;
pasXcmds = (struct scmd *) xrealloc ((pointer) pasXcmds,
cXcmds * sizeof (struct scmd));
@@ -1178,18 +1177,26 @@ main (argc, argv)
uxadd_name (zinput_from);
}
+ else if (*zfullcmd == '\0'
+ && eXxqt_file == NULL
+ && zinput_from == NULL
+ && cXcmds == 0)
+ {
+ /* As a special case, if we are asked to execute an empty
+ command, we create a poll file instead. */
+ fpoll = TRUE;
+ }
else
{
/* Finish up the execute file. */
- uxadd_xqt_line ('U', zuser, zxqtloc);
+ uxadd_xqt_line ('U', zuser, zXxqtloc);
if (zinput_from != NULL)
{
uxadd_xqt_line ('F', zinput_to, (char *) NULL);
uxadd_xqt_line ('I', zinput_to, (char *) NULL);
uxadd_send_file (zinput_from, zinput_to,
finputcopied ? "C" : "c",
- zinput_temp, zforward, &sxqtsys, zxqtloc,
- bgrade);
+ zinput_temp, zforward);
}
if (fno_ack)
uxadd_xqt_line ('N', (const char *) NULL, (const char *) NULL);
@@ -1200,15 +1207,17 @@ main (argc, argv)
if (fneedshell)
uxadd_xqt_line ('e', (const char *) NULL, (const char *) NULL);
uxadd_xqt_line ('C', zfullcmd, (const char *) NULL);
+ if (! fstdiosync (eXxqt_file, "execution file"))
+ ulog (LOG_FATAL, "fsync failed");
if (fclose (eXxqt_file) != 0)
ulog (LOG_FATAL, "fclose: %s", strerror (errno));
eXxqt_file = NULL;
/* If the execution is to occur on another system, we must now
arrange to copy the execute file to this system. */
- if (! fxqtlocal)
- uxadd_send_file (abxqt_tname, abxqt_xname, "C", abxqt_tname,
- zforward, &sxqtsys, zxqtloc, bgrade);
+ if (! fXxqtlocal)
+ uxadd_send_file (abXxqt_tname, abXxqt_xname, "C", abXxqt_tname,
+ zforward);
}
/* If we got a signal, get out before spooling anything. */
@@ -1216,16 +1225,17 @@ main (argc, argv)
uxabort ();
/* From here on in, it's too late. We don't call uxabort. */
- if (cXcmds > 0)
+ if (cXcmds > 0 || fpoll)
{
char *zjobid;
- if (! sxqtsys.uuconf_fcall_transfer
- && ! sxqtsys.uuconf_fcalled_transfer)
+ if (! fpoll
+ && ! sXxqtsys.uuconf_fcall_transfer
+ && ! sXxqtsys.uuconf_fcalled_transfer)
ulog (LOG_FATAL, "Not permitted to transfer files to or from %s",
- sxqtsys.uuconf_zname);
+ sXxqtsys.uuconf_zname);
- zjobid = zsysdep_spool_commands (&sxqtsys, bgrade, cXcmds, pasXcmds);
+ zjobid = zsysdep_spool_commands (&sXxqtsys, bXgrade, cXcmds, pasXcmds);
if (zjobid == NULL)
{
ulog_close ();
@@ -1245,26 +1255,47 @@ main (argc, argv)
else
{
fcall_any = TRUE;
- zcall_system = zbufcpy (sxqtsys.uuconf_zname);
+ zcall_system = zbufcpy (sXxqtsys.uuconf_zname);
}
}
- /* If all that worked, make a log file entry. All log file reports
- up to this point went to stderr. */
- ulog_to_file (puuconf, TRUE);
- ulog_system (sxqtsys.uuconf_zname);
- ulog_user (zuser);
-
- if (zXnames == NULL)
- ulog (LOG_NORMAL, "Queuing %s", zfullcmd);
- else
- ulog (LOG_NORMAL, "Queuing %s (%s)", zfullcmd, zXnames);
+ if (! fpoll)
+ {
+ /* If all that worked, make a log file entry. All log file
+ reports up to this point went to stderr. */
+ ulog_to_file (puuconf, TRUE);
+ ulog_system (sXxqtsys.uuconf_zname);
+ ulog_user (zuser);
+
+ if (zXnames == NULL)
+ ulog (LOG_NORMAL, "Queuing %s", zfullcmd);
+ else
+ ulog (LOG_NORMAL, "Queuing %s (%s)", zfullcmd, zXnames);
- ulog_close ();
+ ulog_close ();
+ }
if (! fuucico
|| (zcall_system == NULL && ! fcall_any))
- fexit = TRUE;
+ {
+ if (! fXxqtlocal || ! fuucico)
+ fexit = TRUE;
+ else
+ {
+ char *zconfigarg;
+
+ if (zconfig == NULL)
+ zconfigarg = NULL;
+ else
+ {
+ zconfigarg = zbufalc (sizeof "-I" + strlen (zconfig));
+ sprintf (zconfigarg, "-I%s", zconfig);
+ }
+
+ fexit = fsysdep_run (FALSE, "uuxqt", zconfigarg,
+ (const char *) NULL);
+ }
+ }
else
{
const char *zcicoarg;
@@ -1303,7 +1334,7 @@ main (argc, argv)
static void
uxhelp ()
{
- printf ("Taylor UUCP %s, copyright (C) 1991, 1992, 1993, 1994 Ian Lance Taylor\n",
+ printf ("Taylor UUCP %s, copyright (C) 1991, 92, 93, 94, 1995 Ian Lance Taylor\n",
VERSION);
printf ("Usage: %s [options] [-] command\n", zProgram);
printf (" -,-p,--stdin: Read standard input for standard input of command\n");
@@ -1345,7 +1376,20 @@ uxadd_xqt_line (bchar, z1, z2)
{
if (eXxqt_file == NULL)
{
- eXxqt_file = esysdep_fopen (zXxqt_name, FALSE, FALSE, TRUE);
+ const char *zxqt_name;
+
+ if (fXxqtlocal)
+ zxqt_name = zsysdep_xqt_file_name ();
+ else
+ zxqt_name = zsysdep_data_file_name (&sXxqtsys, zXxqtloc, bXgrade, TRUE,
+ abXxqt_tname, (char *) NULL,
+ abXxqt_xname);
+ if (zxqt_name == NULL)
+ uxabort ();
+
+ uxrecord_file (zxqt_name);
+
+ eXxqt_file = esysdep_fopen (zxqt_name, FALSE, FALSE, TRUE);
if (eXxqt_file == NULL)
uxabort ();
}
@@ -1361,16 +1405,12 @@ uxadd_xqt_line (bchar, z1, z2)
/* Add a file to be sent to the execute system. */
static void
-uxadd_send_file (zfrom, zto, zoptions, ztemp, zforward, qxqtsys, zxqtloc,
- bgrade)
+uxadd_send_file (zfrom, zto, zoptions, ztemp, zforward)
const char *zfrom;
const char *zto;
const char *zoptions;
const char *ztemp;
const char *zforward;
- const struct uuconf_system *qxqtsys;
- const char *zxqtloc;
- int bgrade;
{
struct scmd s;
@@ -1390,8 +1430,8 @@ uxadd_send_file (zfrom, zto, zoptions, ztemp, zforward, qxqtsys, zxqtloc,
if (zbase == NULL)
uxabort ();
- zxqt = zsysdep_data_file_name (qxqtsys, zxqtloc, bgrade, TRUE, abtname,
- abdname, abxname);
+ zxqt = zsysdep_data_file_name (&sXxqtsys, zXxqtloc, bXgrade, TRUE,
+ abtname, abdname, abxname);
if (zxqt == NULL)
uxabort ();
e = esysdep_fopen (zxqt, FALSE, FALSE, TRUE);
@@ -1399,19 +1439,21 @@ uxadd_send_file (zfrom, zto, zoptions, ztemp, zforward, qxqtsys, zxqtloc,
uxabort ();
uxrecord_file (zxqt);
- fprintf (e, "U %s %s\n", zsysdep_login_name (), zxqtloc);
+ fprintf (e, "U %s %s\n", zsysdep_login_name (), zXxqtloc);
fprintf (e, "F %s %s\n", abdname, zbase);
fprintf (e, "C uucp -C -W -d -g %c %s %s!%s\n",
- bgrade, zbase, zforward, zto);
+ bXgrade, zbase, zforward, zto);
ubuffree (zbase);
+ if (! fstdiosync (e, zxqt))
+ ulog (LOG_FATAL, "fsync failed");
if (fclose (e) != 0)
ulog (LOG_FATAL, "fclose: %s", strerror (errno));
/* Send the execution file. */
s.bcmd = 'S';
- s.bgrade = bgrade;
+ s.bgrade = bXgrade;
s.pseq = NULL;
s.zfrom = zbufcpy (abtname);
s.zto = zbufcpy (abxname);
@@ -1437,7 +1479,7 @@ uxadd_send_file (zfrom, zto, zoptions, ztemp, zforward, qxqtsys, zxqtloc,
}
s.bcmd = 'S';
- s.bgrade = bgrade;
+ s.bgrade = bXgrade;
s.pseq = NULL;
s.zfrom = zbufcpy (zfrom);
s.zto = zbufcpy (zto);
OpenPOWER on IntegriCloud