smk@axiom.UUCP (Steven Kramer) (01/18/84)
Following the fiasco we had in implementing some of the fclose()'s (by doing the fseek(,0L,0)) I went and simply did the fclose() in all places of transmit() that returned without closing the file. The following is the diff -c of ifuncs.c from B2.10 and my changes. --steve kramer ---------------------------------- *** ifuncs.c.orig Thu Mar 31 11:51:44 1983 --- ifuncs.c Tue Jan 17 14:29:40 1984 *************** *** 28,33 fp = xfopen(ARTICLE, "r"); if (hread(&h, fp, TRUE) == NULL) xerror("Cannot reread article"); fclose(fp); if (h.distribution[0]) strcpy(h.nbuf, h.distribution); --- 28,34 ----- fp = xfopen(ARTICLE, "r"); if (hread(&h, fp, TRUE) == NULL) xerror("Cannot reread article"); + #ifndef AXIOM fclose(fp); #endif if (h.distribution[0]) *************** *** 29,34 if (hread(&h, fp, TRUE) == NULL) xerror("Cannot reread article"); fclose(fp); if (h.distribution[0]) strcpy(h.nbuf, h.distribution); ngcat(h.nbuf); --- 30,36 ----- xerror("Cannot reread article"); #ifndef AXIOM fclose(fp); + #endif if (h.distribution[0]) strcpy(h.nbuf, h.distribution); ngcat(h.nbuf); *************** *** 43,48 hptr++; } *nptr = '\0'; /* loop once per system. */ lock(); --- 45,53 ----- hptr++; } *nptr = '\0'; + #ifdef AXIOM + fclose(fp); + #endif /* loop once per system. */ lock(); *************** *** 99,104 int useexist = (index(sp->s_flags, 'U') != NULL); if (local && mode == PROC) return; #ifdef DEBUG printf("Transmitting to '%s'\n", sp->s_name); --- 104,113 ----- int useexist = (index(sp->s_flags, 'U') != NULL); if (local && mode == PROC) + #ifdef AXIOM + { + fclose(ifp); + #endif return; #ifdef AXIOM } *************** *** 100,105 if (local && mode == PROC) return; #ifdef DEBUG printf("Transmitting to '%s'\n", sp->s_name); #endif --- 109,117 ----- fclose(ifp); #endif return; + #ifdef AXIOM + } + #endif #ifdef DEBUG printf("Transmitting to '%s'\n", sp->s_name); #endif *************** *** 108,113 fprintf(stderr, "Bad header, not transmitting\n"); log("Bad header, not transmitting %s re %s to %s", hh.ident, hh.title, sp->s_name); return; } /* Taken out for obscure reasons - see the standard. --- 120,128 ----- fprintf(stderr, "Bad header, not transmitting\n"); log("Bad header, not transmitting %s re %s to %s", hh.ident, hh.title, sp->s_name); + #ifdef AXIOM + fclose(ifp); + #endif return; } /* Taken out for obscure reasons - see the standard. *************** *** 115,120 */ if (hh.nbuf[0] == '\0') { printf("Article not subscribed to by %s\n", sp->s_name); return; } sprintf(TRANS, "%s/trXXXXXX", SPOOL); --- 130,138 ----- */ if (hh.nbuf[0] == '\0') { printf("Article not subscribed to by %s\n", sp->s_name); + #ifdef AXIOM + fclose(ifp); + #endif return; } sprintf(TRANS, "%s/trXXXXXX", SPOOL); *************** *** 139,144 if (ofp == NULL) xerror("Cannot append to %s", sp->s_xmit); fprintf(ofp, "%s\n", firstbufname); fclose(ofp); return; } --- 157,165 ----- if (ofp == NULL) xerror("Cannot append to %s", sp->s_xmit); fprintf(ofp, "%s\n", firstbufname); + #ifdef AXIOM + fclose(ifp); + #endif fclose(ofp); return; } *************** *** 151,156 sprintf(bfr, UXMIT, sp->s_name, firstbufname); else sprintf(bfr, sp->s_xmit, firstbufname); } else #endif { --- 172,180 ----- sprintf(bfr, UXMIT, sp->s_name, firstbufname); else sprintf(bfr, sp->s_xmit, firstbufname); + #ifdef AXIOM + fclose(ifp); + #endif } else #endif { *************** *** 165,170 fclose(ifp); fclose(ofp); if (*sp->s_xmit == '\0') sprintf(bfr, DFTXMIT, sp->s_name, TRANS); else sprintf(bfr, "(%s) < %s", sp->s_xmit, TRANS); --- 189,206 ----- fclose(ifp); fclose(ofp); if (*sp->s_xmit == '\0') + #ifdef AXIOM + /* There needs to to be a define for uux + without the - flag and the < %s. + Without this fix uucp sends the article + over the wires with 2 set of input + (one from the - and one from the < %s). + */ + if (noshell) + sprintf(bfr, EFTXMIT, sp->s_name); + else + sprintf(bfr, DFTXMIT, sp->s_name, TRANS); + #else sprintf(bfr, DFTXMIT, sp->s_name, TRANS); #endif else *************** *** 166,171 fclose(ofp); if (*sp->s_xmit == '\0') sprintf(bfr, DFTXMIT, sp->s_name, TRANS); else sprintf(bfr, "(%s) < %s", sp->s_xmit, TRANS); } --- 202,208 ----- sprintf(bfr, DFTXMIT, sp->s_name, TRANS); #else sprintf(bfr, DFTXMIT, sp->s_name, TRANS); + #endif else sprintf(bfr, "(%s) < %s", sp->s_xmit, TRANS); } *************** *** 177,182 else { close(0); open(TRANS, 0); ptr = sp->s_xmit; for (pid = 0; pid < 19; pid++) { while (isspace(*ptr)) --- 214,232 ----- else { close(0); open(TRANS, 0); + #ifdef AXIOM + /* The code works fine if the command is + just one program with no arguments, but + otherwise it passes the whole string (args + as well) to the execv as a path. The + problems comes with the S flag and a + supplied command, hence the if statement + to allow for when no command is supplied. + */ + if (*sp->s_xmit == '\0') /* need bfp? */ + ptr = bfr; + else + #endif ptr = sp->s_xmit; for (pid = 0; pid < 19; pid++) { while (isspace(*ptr)) *************** *** 188,193 break; } argv[++pid] = 0; execv(sp->s_xmit, argv); xerror("Can't execv\n"); } --- 238,246 ----- break; } argv[++pid] = 0; + #ifdef AXIOM + execv(argv[0], argv); + #else execv(sp->s_xmit, argv); #endif xerror("Can't execv\n"); *************** *** 189,194 } argv[++pid] = 0; execv(sp->s_xmit, argv); xerror("Can't execv\n"); } } else --- 242,248 ----- execv(argv[0], argv); #else execv(sp->s_xmit, argv); + #endif xerror("Can't execv\n"); } } else -- --steve kramer {allegra,genrad,ihnp4,utzoo,philabs,uw-beaver}!linus!axiom!smk (UUCP) linus!axiom!smk@mitre-bedford (MIL)