|
|
1.1 ! root 1: /* uupick.c ! 2: Get files stored in the public directory by uucp -t. ! 3: ! 4: Copyright (C) 1992 Ian Lance Taylor ! 5: ! 6: This file is part of the Taylor UUCP package. ! 7: ! 8: This program is free software; you can redistribute it and/or ! 9: modify it under the terms of the GNU General Public License as ! 10: published by the Free Software Foundation; either version 2 of the ! 11: License, or (at your option) any later version. ! 12: ! 13: This program is distributed in the hope that it will be useful, but ! 14: WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 16: General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with this program; if not, write to the Free Software ! 20: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 21: ! 22: The author of the program may be contacted at [email protected] or ! 23: c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. ! 24: */ ! 25: ! 26: #include "uucp.h" ! 27: ! 28: #if USE_RCS_ID ! 29: const char uupick_rcsid[] = "$Id: uupick.c,v 1.1 93/07/30 07:59:06 bin Exp Locker: bin $"; ! 30: #endif ! 31: ! 32: #include <errno.h> ! 33: ! 34: #include "getopt.h" ! 35: ! 36: #include "uudefs.h" ! 37: #include "uuconf.h" ! 38: #include "system.h" ! 39: ! 40: /* Local functions. */ ! 41: ! 42: static void upmovedir P((const char *zfull, const char *zrelative, ! 43: pointer pinfo)); ! 44: static void upmove P((const char *zfrom, const char *zto)); ! 45: ! 46: /* The program name. */ ! 47: char abProgram[] = "uupick"; ! 48: ! 49: /* Long getopt options. */ ! 50: static const struct option asPlongopts[] = { { NULL, 0, NULL, 0 } }; ! 51: ! 52: /* Local functions. */ ! 53: ! 54: static void upusage P((void)); ! 55: ! 56: int ! 57: main (argc, argv) ! 58: int argc; ! 59: char **argv; ! 60: { ! 61: /* -s: system name. */ ! 62: const char *zsystem = NULL; ! 63: /* -I: configuration file name. */ ! 64: const char *zconfig = NULL; ! 65: int iopt; ! 66: pointer puuconf; ! 67: int iuuconf; ! 68: struct uuconf_system ssys; ! 69: const char *zpubdir; ! 70: char *zfile, *zfrom, *zfull; ! 71: char *zallsys; ! 72: char ab[1000]; ! 73: boolean fquit; ! 74: ! 75: while ((iopt = getopt_long (argc, argv, "I:s:x:", asPlongopts, ! 76: (int *) NULL)) != EOF) ! 77: { ! 78: switch (iopt) ! 79: { ! 80: case 's': ! 81: /* System name to get files from. */ ! 82: zsystem = optarg; ! 83: break; ! 84: ! 85: case 'I': ! 86: /* Name configuration file. */ ! 87: if (fsysdep_other_config (optarg)) ! 88: zconfig = optarg; ! 89: break; ! 90: ! 91: case 'x': ! 92: #if DEBUG > 1 ! 93: /* Set debugging level. */ ! 94: iDebug |= idebug_parse (optarg); ! 95: #endif ! 96: break; ! 97: ! 98: case 0: ! 99: /* Long option found and flag set. */ ! 100: break; ! 101: ! 102: default: ! 103: upusage (); ! 104: break; ! 105: } ! 106: } ! 107: ! 108: if (argc != optind) ! 109: upusage (); ! 110: ! 111: iuuconf = uuconf_init (&puuconf, (const char *) NULL, zconfig); ! 112: if (iuuconf != UUCONF_SUCCESS) ! 113: ulog_uuconf (LOG_FATAL, puuconf, iuuconf); ! 114: ! 115: usysdep_initialize (puuconf, INIT_GETCWD | INIT_NOCHDIR); ! 116: ! 117: zpubdir = NULL; ! 118: if (zsystem != NULL) ! 119: { ! 120: iuuconf = uuconf_system_info (puuconf, zsystem, &ssys); ! 121: if (iuuconf == UUCONF_SUCCESS) ! 122: { ! 123: zpubdir = zbufcpy (ssys.uuconf_zpubdir); ! 124: (void) uuconf_system_free (puuconf, &ssys); ! 125: } ! 126: else if (iuuconf != UUCONF_NOT_FOUND) ! 127: (void) ulog_uuconf (LOG_FATAL, puuconf, iuuconf); ! 128: } ! 129: if (zpubdir == NULL) ! 130: { ! 131: iuuconf = uuconf_pubdir (puuconf, &zpubdir); ! 132: if (iuuconf != UUCONF_SUCCESS) ! 133: ulog_uuconf (LOG_FATAL, puuconf, iuuconf); ! 134: } ! 135: ! 136: if (! fsysdep_uupick_init (zsystem, zpubdir)) ! 137: usysdep_exit (FALSE); ! 138: ! 139: zallsys = NULL; ! 140: fquit = FALSE; ! 141: ! 142: while (! fquit ! 143: && ((zfile = zsysdep_uupick (zsystem, zpubdir, &zfrom, &zfull)) ! 144: != NULL)) ! 145: { ! 146: boolean fdir; ! 147: char *zto, *zlocal; ! 148: FILE *e; ! 149: boolean fcontinue; ! 150: ! 151: fdir = fsysdep_directory (zfull); ! 152: ! 153: do ! 154: { ! 155: fcontinue = FALSE; ! 156: ! 157: if (zallsys == NULL ! 158: || strcmp (zallsys, zfrom) != 0) ! 159: { ! 160: if (zallsys != NULL) ! 161: { ! 162: ubuffree (zallsys); ! 163: zallsys = NULL; ! 164: } ! 165: ! 166: printf ("from %s: %s %s ?\n", zfrom, fdir ? "dir" : "file", ! 167: zfile); ! 168: ! 169: if (fgets (ab, sizeof ab, stdin) == NULL) ! 170: break; ! 171: } ! 172: ! 173: if (ab[0] == 'q') ! 174: { ! 175: fquit = TRUE; ! 176: break; ! 177: } ! 178: ! 179: switch (ab[0]) ! 180: { ! 181: case '\n': ! 182: break; ! 183: ! 184: case 'd': ! 185: if (fdir) ! 186: (void) fsysdep_rmdir (zfull); ! 187: else ! 188: { ! 189: if (remove (zfull) != 0) ! 190: ulog (LOG_ERROR, "remove (%s): %s", zfull, ! 191: strerror(errno)); ! 192: } ! 193: break; ! 194: ! 195: case 'm': ! 196: case 'a': ! 197: zto = ab + 1 + strspn (ab + 1, " \t"); ! 198: zto[strcspn (zto, " \t\n")] = '\0'; ! 199: zlocal = zsysdep_uupick_local_file (zto); ! 200: if (zlocal == NULL) ! 201: usysdep_exit (FALSE); ! 202: zto = zsysdep_in_dir (zlocal, zfile); ! 203: ubuffree (zlocal); ! 204: if (zto == NULL) ! 205: usysdep_exit (FALSE); ! 206: if (! fdir) ! 207: upmove (zfull, zto); ! 208: else ! 209: { ! 210: usysdep_walk_tree (zfull, upmovedir, (pointer) zto); ! 211: (void) fsysdep_rmdir (zfull); ! 212: } ! 213: ubuffree (zto); ! 214: ! 215: if (ab[0] == 'a') ! 216: { ! 217: zallsys = zbufcpy (zfrom); ! 218: ab[0] = 'm'; ! 219: } ! 220: ! 221: break; ! 222: ! 223: case 'p': ! 224: if (fdir) ! 225: ulog (LOG_ERROR, "Can't print directory"); ! 226: else ! 227: { ! 228: e = fopen (zfull, "r"); ! 229: if (e == NULL) ! 230: ulog (LOG_ERROR, "fopen (%s): %s", zfull, ! 231: strerror (errno)); ! 232: else ! 233: { ! 234: while (fgets (ab, sizeof ab, e) != NULL) ! 235: (void) fputs (ab, stdout); ! 236: (void) fclose (e); ! 237: } ! 238: } ! 239: fcontinue = TRUE; ! 240: break; ! 241: ! 242: case '!': ! 243: (void) system (ab + 1); ! 244: fcontinue = TRUE; ! 245: break; ! 246: ! 247: default: ! 248: printf ("uupick commands:\n"); ! 249: printf ("q: quit\n"); ! 250: printf ("<return>: skip file\n"); ! 251: printf ("m [dir]: move file to directory\n"); ! 252: printf ("a [dir]: move all files from this system to directory\n"); ! 253: printf ("p: list file to stdout\n"); ! 254: printf ("! command: shell escape\n"); ! 255: fcontinue = TRUE; ! 256: break; ! 257: } ! 258: } ! 259: while (fcontinue); ! 260: ! 261: ubuffree (zfull); ! 262: ubuffree (zfrom); ! 263: ubuffree (zfile); ! 264: } ! 265: ! 266: (void) fsysdep_uupick_free (zsystem, zpubdir); ! 267: ! 268: usysdep_exit (TRUE); ! 269: ! 270: /* Avoid error about not returning. */ ! 271: return 0; ! 272: } ! 273: ! 274: /* Print usage message. */ ! 275: ! 276: static void ! 277: upusage () ! 278: { ! 279: fprintf (stderr, ! 280: "Taylor UUCP version %s, copyright (C) 1991, 1992 Ian Lance Taylor\n", ! 281: VERSION); ! 282: fprintf (stderr, ! 283: "Usage: uupick [-s system] [-I config] [-x debug]\n"); ! 284: fprintf (stderr, ! 285: " -s system: Only consider files from named system\n"); ! 286: fprintf (stderr, ! 287: " -x debug: Set debugging level\n"); ! 288: #if HAVE_TAYLOR_CONFIG ! 289: fprintf (stderr, ! 290: " -I file: Set configuration file to use\n"); ! 291: #endif /* HAVE_TAYLOR_CONFIG */ ! 292: exit (EXIT_FAILURE); ! 293: } ! 294: ! 295: /* This routine is called by usysdep_walk_tree when moving the ! 296: contents of an entire directory. */ ! 297: ! 298: static void ! 299: upmovedir (zfull, zrelative, pinfo) ! 300: const char *zfull; ! 301: const char *zrelative; ! 302: pointer pinfo; ! 303: { ! 304: const char *ztodir = (const char *) pinfo; ! 305: char *zto; ! 306: ! 307: zto = zsysdep_in_dir (ztodir, zrelative); ! 308: if (zto == NULL) ! 309: usysdep_exit (FALSE); ! 310: upmove (zfull, zto); ! 311: ubuffree (zto); ! 312: } ! 313: ! 314: /* Move a file. */ ! 315: ! 316: static void ! 317: upmove (zfrom, zto) ! 318: const char *zfrom; ! 319: const char *zto; ! 320: { ! 321: (void) fsysdep_move_file (zfrom, zto, TRUE, TRUE, FALSE, ! 322: (const char *) NULL); ! 323: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.