|
|
1.1 ! root 1: /* ftam-dir.c - interactive initiator FTAM -- directory management */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/ftam2/RCS/ftam-dir.c,v 7.0 89/11/23 21:54:16 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/ftam2/RCS/ftam-dir.c,v 7.0 89/11/23 21:54:16 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: ftam-dir.c,v $ ! 12: * Revision 7.0 89/11/23 21:54:16 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include <stdio.h> ! 29: #include "ftamuser.h" ! 30: ! 31: /* DATA */ ! 32: ! 33: #ifndef BRIDGE ! 34: static char *lcwd = NULL; ! 35: #endif ! 36: ! 37: ! 38: int fdffnx (); ! 39: ! 40: ! 41: #ifndef SYS5 ! 42: char *getcwd (); ! 43: #endif ! 44: ! 45: /* */ ! 46: ! 47: #ifndef BRIDGE ! 48: int f_lcd (vec) ! 49: char **vec; ! 50: { ! 51: char *cp, ! 52: cwd[MAXPATHLEN]; ! 53: ! 54: if (*++vec == NULL) ! 55: cp = strdup (myhome); ! 56: else ! 57: if ((cp = xglob1val (*vec, 0)) == NULL) ! 58: return OK; ! 59: ! 60: if (chdir (cp) == NOTOK) ! 61: advise (cp, "unable to change to"); ! 62: else { ! 63: if (lcwd) ! 64: free (lcwd); ! 65: ! 66: if (getcwd (cwd, MAXPATHLEN) && strcmp (cp, cwd)) ! 67: #ifdef apollo ! 68: printf ("/%s\n", lcwd = strdup (cwd)); /* network root */ ! 69: #else ! 70: printf ("%s\n", lcwd = strdup (cwd)); ! 71: #endif ! 72: else ! 73: lcwd = cp, cp = NULL; ! 74: } ! 75: ! 76: if (cp) ! 77: free (cp); ! 78: ! 79: return OK; ! 80: } ! 81: #endif ! 82: ! 83: /* */ ! 84: ! 85: int f_cd (vec) ! 86: char **vec; ! 87: { ! 88: int silent; ! 89: char *cp, ! 90: cwd[MAXPATHLEN]; ! 91: ! 92: silent = strcmp (*vec, "sd") == 0; ! 93: ! 94: cp = *++vec; ! 95: ! 96: switch (realstore) { ! 97: case RFS_UNKNOWN: ! 98: if (!silent) ! 99: advise (NULLCP, rs_unknown); ! 100: #ifndef BRIDGE ! 101: else ! 102: if (rcwd) { ! 103: free (rcwd); ! 104: rcwd = NULL; ! 105: } ! 106: #endif ! 107: return OK; ! 108: ! 109: case RFS_UNIX: ! 110: break; ! 111: ! 112: default: ! 113: if (!silent) ! 114: advise (NULLCP, "%s", rs_support); ! 115: return OK; ! 116: } ! 117: ! 118: if (cp) { ! 119: if ((cp = xglob1val (cp, 1)) == NULL ! 120: || isdir (cp, cwd, silent) == NOTOK) ! 121: return OK; ! 122: ! 123: if (cwd[0]) { ! 124: free (cp); ! 125: cp = strdup (cwd); ! 126: } ! 127: } ! 128: ! 129: if (rcwd) ! 130: free (rcwd); ! 131: rcwd = cp; ! 132: ! 133: return OK; ! 134: } ! 135: ! 136: /* */ ! 137: ! 138: int isdir (dir, dp, silent) ! 139: char *dir, ! 140: *dp; ! 141: int silent; ! 142: { ! 143: int result; ! 144: struct FTAMgroup ftgs; ! 145: register struct FTAMgroup *ftg = &ftgs; ! 146: struct FTAMindication ftis; ! 147: register struct FTAMindication *fti = &ftis; ! 148: struct vfsmap *vf = &vfs[VFS_FDF]; ! 149: ! 150: result = OK; ! 151: if (dp) ! 152: *dp = NULL; ! 153: ! 154: if (!vf -> vf_oid || !(units & FUNIT_LIMITED)) ! 155: return result; ! 156: ! 157: bzero ((char *) ftg, sizeof *ftg); ! 158: ftg -> ftg_flags |= FTG_BEGIN | FTG_END; ! 159: ftg -> ftg_threshold = 0; ! 160: ! 161: ftg -> ftg_flags |= FTG_SELECT; ! 162: { ! 163: register struct FTAMselect *ftse = &ftg -> ftg_select; ! 164: register struct FTAMattributes *fa = &ftse -> ftse_attrs; ! 165: ! 166: fa -> fa_present = FA_FILENAME; ! 167: fa -> fa_nfile = 0; ! 168: fa -> fa_files[fa -> fa_nfile++] = dir; ! 169: ! 170: ftse -> ftse_access = FA_PERM_READATTR; ! 171: FCINIT (&ftse -> ftse_conctl); ! 172: } ! 173: ftg -> ftg_threshold++; ! 174: ! 175: ftg -> ftg_flags |= FTG_RDATTR; ! 176: { ! 177: register struct FTAMreadattr *ftra = &ftg -> ftg_readattr; ! 178: ! 179: ftra -> ftra_attrnames = FA_FILENAME | FA_CONTENTS; ! 180: } ! 181: ftg -> ftg_threshold++; ! 182: ! 183: ftg -> ftg_flags |= FTG_DESELECT; ! 184: ftg -> ftg_threshold++; ! 185: ! 186: if (FManageRequest (ftamfd, ftg, fti) == NOTOK) { ! 187: if (!silent) ! 188: ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST"); ! 189: return NOTOK; ! 190: } ! 191: ! 192: ftg = &fti -> fti_group; ! 193: ! 194: if (ftg -> ftg_flags & FTG_SELECT) { ! 195: register struct FTAMselect *ftse = &ftg -> ftg_select; ! 196: ! 197: if (!silent) ! 198: ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1, ! 199: ftse -> ftse_action); ! 200: if (ftse -> ftse_state != FSTATE_SUCCESS) ! 201: goto you_lose; ! 202: } ! 203: ! 204: if (ftg -> ftg_flags & FTG_RDATTR) { ! 205: register struct FTAMreadattr *ftra = &ftg -> ftg_readattr; ! 206: register struct FTAMattributes *fa = &ftra -> ftra_attrs; ! 207: ! 208: if (!silent) ! 209: ftam_diag (ftra -> ftra_diags, ftra -> ftra_ndiag, 1, ! 210: ftra -> ftra_action); ! 211: if (ftra -> ftra_action != FACTION_SUCCESS) ! 212: fa -> fa_present = 0; ! 213: ! 214: if ((fa -> fa_present & FA_FILENAME) && fa -> fa_nfile == 1 && dp) ! 215: (void) strcpy (dp, fa -> fa_files[0]); ! 216: ! 217: if (fa -> fa_present & FA_CONTENTS) ! 218: if (oid_cmp (vf -> vf_oid, fa -> fa_contents)) { ! 219: if (!silent) ! 220: advise (NULLCP, "not a directory"); ! 221: goto you_lose; ! 222: } ! 223: else ! 224: result = DONE; ! 225: } ! 226: ! 227: if (ftg -> ftg_flags & FTG_DESELECT) { ! 228: register struct FTAMdeselect *ftde = &ftg -> ftg_deselect; ! 229: ! 230: if (!silent) { ! 231: ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1, ! 232: ftde -> ftde_action); ! 233: ftam_chrg (&ftde -> ftde_charges); ! 234: } ! 235: } ! 236: ! 237: FTGFREE (ftg); ! 238: return result; ! 239: ! 240: you_lose: ; ! 241: FTGFREE (ftg); ! 242: return NOTOK; ! 243: } ! 244: ! 245: /* */ ! 246: ! 247: /* ARGSUSED */ ! 248: ! 249: int f_pwd (vec) ! 250: char **vec; ! 251: { ! 252: #ifndef BRIDGE ! 253: char cwd[MAXPATHLEN]; ! 254: ! 255: if (lcwd == NULL) ! 256: lcwd = strdup (getcwd (cwd, MAXPATHLEN) ? cwd : "."); ! 257: #ifdef apollo ! 258: printf ("local directory: /%s\n", lcwd); /* network root */ ! 259: #else ! 260: printf ("local directory: %s\n", lcwd); ! 261: #endif ! 262: #endif ! 263: ! 264: if (rcwd) ! 265: #ifndef BRIDGE ! 266: printf ("virtual filestore directory: %s\n", rcwd); ! 267: #else ! 268: (void) sprintf (ftam_error, "virtual filestore directory: %s\n", rcwd); ! 269: #endif ! 270: ! 271: return OK; ! 272: } ! 273: ! 274: /* */ ! 275: ! 276: char *str2file (s) ! 277: char *s; ! 278: { ! 279: register char *bp; ! 280: static int i = 0; ! 281: static char buffer1[BUFSIZ], ! 282: buffer2[BUFSIZ]; ! 283: ! 284: if (!rcwd) ! 285: return s; ! 286: ! 287: bp = (i++ % 2) ? buffer1 : buffer2; ! 288: ! 289: switch (realstore) { ! 290: case RFS_UNIX: ! 291: if (*s == '/' || *s == '~') ! 292: return s; ! 293: ! 294: #ifdef apollo ! 295: if (strcmp (rcwd, "/") == 0 || strcmp (rcwd, "//") == 0) ! 296: (void) sprintf (bp, "%s%s", rcwd, s); ! 297: else ! 298: #endif ! 299: (void) sprintf (bp, "%s/%s", rcwd, s); ! 300: break; ! 301: ! 302: #ifdef BRIDGE ! 303: default: ! 304: return s; ! 305: #endif ! 306: } ! 307: ! 308: return bp; ! 309: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.