Annotation of 43BSDReno/contrib/isode-beta/ftam2/ftam-mgmt.c, revision 1.1.1.1

1.1       root        1: /* ftam-mgmt.c - interactive initiator FTAM -- file management */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/ftam2/RCS/ftam-mgmt.c,v 7.0 89/11/23 21:54:23 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/ftam2/RCS/ftam-mgmt.c,v 7.0 89/11/23 21:54:23 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       ftam-mgmt.c,v $
                     12:  * Revision 7.0  89/11/23  21:54:23  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: /*  */
                     32: 
                     33: int    f_mv (vec)
                     34: char  **vec;
                     35: {
                     36: #ifdef BRIDGE
                     37:     register char *src;
                     38: #else
                     39:     int        sglobbed;
                     40:     register char  *bp,
                     41:                  **gp,
                     42:                  **src;
                     43:     char   *freedst = NULL,
                     44:            buffer[BUFSIZ];
                     45: #endif
                     46:     register char  *dst;
                     47: 
                     48:     if (*++vec == NULL) {
                     49: #ifdef BRIDGE
                     50:        return NOTOK;
                     51: #else
                     52:        if (getline ("source: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
                     53:            return OK;
                     54:        dst = NULL;
                     55: #endif
                     56:     }
                     57: #ifdef BRIDGE
                     58:     src = *vec;
                     59:     if (*++vec == NULL)
                     60:        return NOTOK;
                     61:     dst = *vec;
                     62: #else
                     63:     else {
                     64:        register char **ap;
                     65: 
                     66:        for (ap = vec; *ap; ap++)
                     67:            continue;
                     68:        if (--ap != vec)
                     69:            dst = *ap, *ap = NULL;
                     70:        else
                     71:            dst = NULL;
                     72:     }
                     73: #endif
                     74: #ifndef        BRIDGE
                     75:     if (!(src = xglob (vec, 1)))
                     76:        return OK;
                     77:     sglobbed = xglobbed;
                     78: 
                     79:     if (dst == NULL) {
                     80:        if (getline ("destination: ", buffer) == NOTOK) {
                     81:            blkfree (src);
                     82:            return OK;
                     83:        }
                     84:        switch (str2vec (buffer, vec)) {
                     85:            case 0: 
                     86:                switch (realstore) {
                     87:                    case RFS_UNIX:
                     88:                        dst = ".";
                     89:                        break;
                     90: 
                     91:                    default:
                     92:                        advise (NULLCP, "need a destination");
                     93:                        goto out;
                     94:                }
                     95:                break;
                     96: 
                     97:            case 1: 
                     98:                dst = *vec;
                     99:                break;
                    100: 
                    101:            default: 
                    102:                advise (NULLCP, "too many destinations");
                    103:                goto out;
                    104:        }
                    105:     }
                    106:     if (!(dst = freedst = xglob1val (dst, 1)))
                    107:        goto out;
                    108: 
                    109:     if (src[1] == NULL) {
                    110:        if (interrupted)
                    111:            goto out;
                    112:            
                    113:        switch (realstore) {
                    114:            case RFS_UNIX:
                    115:                if (isdir (dst, NULLCP, 1) == NOTOK)
                    116:                    break;
                    117: #ifdef apollo
                    118:                 if (*dst == '/')
                    119:                    (void) sprintf (bp = buffer, "%s", dst);
                    120:                 else
                    121: #endif
                    122:                (void) sprintf (bp = buffer, "%s/", dst);
                    123:                bp += strlen (bp);
                    124:                if (dst = rindex (*src, '/'))
                    125:                    dst++;
                    126:                if (dst == NULL || *dst == NULL)
                    127:                    dst = *src;
                    128:                (void) strcpy (bp, dst);
                    129:                dst = buffer;
                    130: 
                    131:                switch (ask ("mv %s %s", *src, dst)) {
                    132:                    case NOTOK: 
                    133:                        goto out;
                    134: 
                    135:                    case OK: 
                    136:                    default: 
                    137:                        break;
                    138: 
                    139:                    case DONE: 
                    140:                        goto out;
                    141:                }
                    142:                break;
                    143: 
                    144:            default:
                    145:                break;
                    146:        }
                    147: 
                    148:        (void) mv (*src, dst, 0);
                    149:        goto out;
                    150:     }
                    151: 
                    152:     switch (realstore) {
                    153:        case RFS_UNKNOWN: 
                    154:            advise (NULLCP, "%s", rs_unknown);
                    155:            goto out;
                    156: 
                    157:        case RFS_UNIX: 
                    158: #ifdef apollo
                    159:             if (*dst == '/')
                    160:                 (void) sprintf (bp = buffer, "%s", dst);
                    161:             else
                    162: #endif
                    163:            (void) sprintf (bp = buffer, "%s/", dst);
                    164:            bp += strlen (bp);
                    165:            break;
                    166: 
                    167:        default: 
                    168:            advise (NULLCP, "%s", rs_support);
                    169:            goto out;
                    170:     }
                    171: 
                    172:     if (isdir (dst, NULLCP, 0) == NOTOK)
                    173:        goto out;
                    174: 
                    175:     for (gp = src; *gp; gp++) {
                    176:        switch (realstore) {
                    177:            case RFS_UNIX:
                    178:                if (dst = rindex (*gp, '/'))
                    179:                    dst++;
                    180:                if (dst == NULL || *dst == NULL)
                    181:                    dst = *gp;
                    182:                break;
                    183: 
                    184:            default:
                    185:                dst = *gp;
                    186:        }
                    187:        (void) strcpy (bp, dst);
                    188:        dst = str2file (buffer);
                    189: 
                    190:        if (sglobbed) {
                    191:            if (query)
                    192:                switch (ask ("mv %s %s", *gp, dst)) {
                    193:                    case NOTOK:
                    194:                        continue;
                    195: 
                    196:                    case OK:
                    197:                    default:
                    198:                        break;
                    199: 
                    200:                    case DONE:
                    201:                        goto out;
                    202:                }
                    203:            else
                    204:                advise (NULLCP, "mv %s %s", *gp, dst);
                    205:        }
                    206: 
                    207:        (void) mv (*gp, dst, 1);
                    208: 
                    209:        if (ftamfd == NOTOK)
                    210:            break;
                    211:     }
                    212: #else
                    213:     return mv (src, dst, 0);
                    214: #endif
                    215: 
                    216: #ifndef        BRIDGE
                    217: out: ;
                    218:     blkfree (src);
                    219:     if (freedst)
                    220:        free (freedst);
                    221: 
                    222:     return OK;
                    223: #endif
                    224: }
                    225: 
                    226: /*  */
                    227: 
                    228: static int  mv (src, dst, multi)
                    229: char   *src,
                    230:        *dst;
                    231: int    multi;
                    232: {
                    233:     struct FTAMgroup    ftgs;
                    234:     register struct FTAMgroup  *ftg = &ftgs;
                    235:     struct FTAMindication   ftis;
                    236:     register struct FTAMindication *fti = &ftis;
                    237: 
                    238:     bzero ((char *) ftg, sizeof *ftg);
                    239:     ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
                    240:     ftg -> ftg_threshold = 0;
                    241: 
                    242:     ftg -> ftg_flags |= FTG_SELECT;
                    243:     {
                    244:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    245:        register struct FTAMattributes *fa = &ftse -> ftse_attrs;
                    246: 
                    247:        fa -> fa_present = FA_FILENAME;
                    248:        fa -> fa_nfile = 0;
                    249:        fa -> fa_files[fa -> fa_nfile++] = src;
                    250: 
                    251:        ftse -> ftse_access = FA_PERM_CHNGATTR;
                    252:        FCINIT (&ftse -> ftse_conctl);
                    253:     }
                    254:     ftg -> ftg_threshold++;
                    255: 
                    256:     ftg -> ftg_flags |= FTG_CHATTR;
                    257:     {
                    258:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    259:        register struct FTAMattributes *fa = &ftca -> ftca_attrs;
                    260: 
                    261:        fa -> fa_present = FA_FILENAME;
                    262:        fa -> fa_nfile = 0;
                    263:        fa -> fa_files[fa -> fa_nfile++] = dst;
                    264:     }
                    265:     ftg -> ftg_threshold++;
                    266: 
                    267:     ftg -> ftg_flags |= FTG_DESELECT;
                    268:     ftg -> ftg_threshold++;
                    269: 
                    270:     if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
                    271:        ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
                    272:        return NOTOK;
                    273:     }
                    274: 
                    275:     ftg = &fti -> fti_group;
                    276: 
                    277:     if (ftg -> ftg_flags & FTG_SELECT) {
                    278:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    279: 
                    280:        if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
                    281:            printf ("%s\n", src);
                    282:        ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1, 
                    283:                ftse -> ftse_action);
                    284:        if (ftse -> ftse_state != FSTATE_SUCCESS)
                    285:            goto you_lose;
                    286:     }
                    287: 
                    288:     if (ftg -> ftg_flags & FTG_CHATTR) {
                    289:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    290: 
                    291:        ftam_diag (ftca -> ftca_diags, ftca -> ftca_ndiag, 1,
                    292:                ftca -> ftca_action);
                    293:     }
                    294: 
                    295:     if (ftg -> ftg_flags & FTG_DESELECT) {
                    296:        register struct FTAMdeselect   *ftde = &ftg -> ftg_deselect;
                    297: 
                    298:        ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
                    299:                ftde -> ftde_action);
                    300:        ftam_chrg (&ftde -> ftde_charges);
                    301:     }
                    302: 
                    303:     FTGFREE (ftg);
                    304:     return OK;
                    305: 
                    306: you_lose: ;
                    307:     FTGFREE (ftg);
                    308:     return NOTOK;
                    309: }
                    310: 
                    311: /*  */
                    312: 
                    313: int    f_rm (vec)
                    314: char  **vec;
                    315: {
                    316: #ifndef        BRIDGE
                    317:     int     multi;
                    318:     char    buffer[BUFSIZ];
                    319: #endif
                    320: 
                    321:     if (*++vec == NULL) {
                    322: #ifdef BRIDGE
                    323:        return NOTOK;
                    324: #else
                    325:        if (getline ("file: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
                    326:            return OK;
                    327: #endif
                    328:     }
                    329: 
                    330: #ifdef BRIDGE
                    331:     return rm (*vec, 0);
                    332: #else
                    333:     if (vec = xglob (vec, 1)) {
                    334:        register char **gp;
                    335: 
                    336:        multi = vec[1] ? 1 : 0;
                    337: 
                    338:        for (gp = vec; *gp && !interrupted; gp++) {
                    339:            if (xglobbed && query)
                    340:                switch (ask ("rm %s", *gp)) {
                    341:                    case NOTOK:
                    342:                        continue;
                    343: 
                    344:                    case OK:
                    345:                    default:
                    346:                        break;
                    347: 
                    348:                    case DONE:
                    349:                        goto out;
                    350:                }
                    351:                    
                    352:            (void) rm (*gp, multi);
                    353: 
                    354:            if (ftamfd == NOTOK)
                    355:                break;
                    356:        }
                    357: 
                    358: out: ;
                    359:        blkfree (vec);
                    360:     }
                    361: 
                    362:     return OK;
                    363: #endif
                    364: }
                    365: 
                    366: /*  */
                    367: 
                    368: static int  rm (file, multi)
                    369: char   *file;
                    370: int    multi;
                    371: {
                    372:     struct FTAMgroup    ftgs;
                    373:     register struct FTAMgroup  *ftg = &ftgs;
                    374:     struct FTAMindication   ftis;
                    375:     register struct FTAMindication *fti = &ftis;
                    376: 
                    377:     bzero ((char *) ftg, sizeof *ftg);
                    378:     ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
                    379:     ftg -> ftg_threshold = 0;
                    380: 
                    381:     ftg -> ftg_flags |= FTG_SELECT;
                    382:     {
                    383:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    384:        register struct FTAMattributes *fa = &ftse -> ftse_attrs;
                    385: 
                    386:        fa -> fa_present = FA_FILENAME;
                    387:        fa -> fa_nfile = 0;
                    388:        fa -> fa_files[fa -> fa_nfile++] = file;
                    389: 
                    390:        ftse -> ftse_access = FA_PERM_DELETE;
                    391:        FCINIT (&ftse -> ftse_conctl);
                    392:     }
                    393:     ftg -> ftg_threshold++;
                    394: 
                    395:     ftg -> ftg_flags |= FTG_DELETE;
                    396:     ftg -> ftg_threshold++;
                    397: 
                    398:     if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
                    399:        ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
                    400:        return NOTOK;
                    401:     }
                    402: 
                    403:     ftg = &fti -> fti_group;
                    404: 
                    405:     if (ftg -> ftg_flags & FTG_SELECT) {
                    406:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    407: 
                    408:        if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
                    409:            printf ("%s\n", file);
                    410:        ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1,
                    411:                ftse -> ftse_action);
                    412:        if (ftse -> ftse_state != FSTATE_SUCCESS)
                    413:            goto you_lose;
                    414:     }
                    415: 
                    416:     if (ftg -> ftg_flags & FTG_DELETE) {
                    417:        register struct FTAMdelete   *ftxe = &ftg -> ftg_delete;
                    418: 
                    419:        ftam_diag (ftxe -> ftxe_diags, ftxe -> ftxe_ndiag, 1,
                    420:                ftxe -> ftxe_action);
                    421:        ftam_chrg (&ftxe -> ftxe_charges);
                    422:     }
                    423: 
                    424:     FTGFREE (ftg);
                    425:     return OK;
                    426: 
                    427: you_lose: ;
                    428:     FTGFREE (ftg);
                    429:     return NOTOK;
                    430: }
                    431: 
                    432: /*  */
                    433: 
                    434: #ifndef        BRIDGE
                    435: int    f_chgrp (vec)
                    436: char  **vec;
                    437: {
                    438:     int     multi;
                    439:     char    group[8 + 1];
                    440:     char    buffer[BUFSIZ];
                    441: 
                    442:     if (!(attrs & FATTR_STORAGE)) {
                    443:        advise (NULLCP, "no support for storage attributes");
                    444:        return OK;
                    445:     }
                    446: 
                    447:     if (*++vec == NULL) {
                    448:        if (getline ("group: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
                    449:            return OK;
                    450:     }
                    451: 
                    452:     (void) strcpy (group, vec[0]);
                    453: 
                    454:     if (*++vec == NULL) {
                    455:        if (getline ("file: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
                    456:            return OK;
                    457:     }
                    458: 
                    459:     if (vec = xglob (vec, 1)) {
                    460:        register char **gp;
                    461: 
                    462:        multi = vec[1] ? 1 : 0;
                    463: 
                    464:        for (gp = vec; *gp && !interrupted; gp++) {
                    465:            if (xglobbed && query)
                    466:                switch (ask ("chgrp %s %s", group, *gp)) {
                    467:                    case NOTOK:
                    468:                        continue;
                    469: 
                    470:                    case OK:
                    471:                    default:
                    472:                        break;
                    473: 
                    474:                    case DONE:
                    475:                        goto out;
                    476:                }
                    477:                    
                    478:            (void) chgrp (group, *gp, multi);
                    479: 
                    480:            if (ftamfd == NOTOK)
                    481:                break;
                    482:        }
                    483: 
                    484: out: ;
                    485:        blkfree (vec);
                    486:     }
                    487: 
                    488:     return OK;
                    489: }
                    490: 
                    491: /*  */
                    492: 
                    493: static int  chgrp (group, file, multi)
                    494: char   *group,
                    495:        *file;
                    496: int    multi;
                    497: {
                    498:     struct FTAMgroup    ftgs;
                    499:     register struct FTAMgroup  *ftg = &ftgs;
                    500:     struct FTAMindication   ftis;
                    501:     register struct FTAMindication *fti = &ftis;
                    502: 
                    503:     bzero ((char *) ftg, sizeof *ftg);
                    504:     ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
                    505:     ftg -> ftg_threshold = 0;
                    506: 
                    507:     ftg -> ftg_flags |= FTG_SELECT;
                    508:     {
                    509:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    510:        register struct FTAMattributes *fa = &ftse -> ftse_attrs;
                    511: 
                    512:        fa -> fa_present = FA_FILENAME;
                    513:        fa -> fa_nfile = 0;
                    514:        fa -> fa_files[fa -> fa_nfile++] = file;
                    515: 
                    516:        ftse -> ftse_access = FA_PERM_CHNGATTR;
                    517:        FCINIT (&ftse -> ftse_conctl);
                    518:     }
                    519:     ftg -> ftg_threshold++;
                    520: 
                    521:     ftg -> ftg_flags |= FTG_CHATTR;
                    522:     {
                    523:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    524:        register struct FTAMattributes *fa = &ftca -> ftca_attrs;
                    525: 
                    526:        fa -> fa_present = FA_ACCOUNT;
                    527:        fa -> fa_account = group;
                    528:     }
                    529:     ftg -> ftg_threshold++;
                    530: 
                    531:     ftg -> ftg_flags |= FTG_DESELECT;
                    532:     ftg -> ftg_threshold++;
                    533: 
                    534:     if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
                    535:        ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
                    536:        return NOTOK;
                    537:     }
                    538: 
                    539:     ftg = &fti -> fti_group;
                    540: 
                    541:     if (ftg -> ftg_flags & FTG_SELECT) {
                    542:        register struct FTAMselect *ftse = &ftg -> ftg_select;
                    543: 
                    544:        if (multi && ftse -> ftse_state != FSTATE_SUCCESS)
                    545:            printf ("%s\n", file);
                    546:        ftam_diag (ftse -> ftse_diags, ftse -> ftse_ndiag, 1, 
                    547:                ftse -> ftse_action);
                    548:        if (ftse -> ftse_state != FSTATE_SUCCESS)
                    549:            goto you_lose;
                    550:     }
                    551: 
                    552:     if (ftg -> ftg_flags & FTG_CHATTR) {
                    553:        register struct FTAMchngattr   *ftca = &ftg -> ftg_chngattr;
                    554: 
                    555:        ftam_diag (ftca -> ftca_diags, ftca -> ftca_ndiag, 1,
                    556:                ftca -> ftca_action);
                    557:     }
                    558: 
                    559:     if (ftg -> ftg_flags & FTG_DESELECT) {
                    560:        register struct FTAMdeselect   *ftde = &ftg -> ftg_deselect;
                    561: 
                    562:        ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
                    563:                ftde -> ftde_action);
                    564:        ftam_chrg (&ftde -> ftde_charges);
                    565:     }
                    566: 
                    567:     FTGFREE (ftg);
                    568:     return OK;
                    569: 
                    570: you_lose: ;
                    571:     FTGFREE (ftg);
                    572:     return NOTOK;
                    573: }
                    574: #endif
                    575: 
                    576: /*  */
                    577: 
                    578: int    f_mkdir (vec)
                    579: char  **vec;
                    580: {
                    581: #ifndef        BRIDGE
                    582:     int            multi;
                    583:     register char  *dir;
                    584:     char    buffer[BUFSIZ];
                    585: #endif
                    586: 
                    587:     if (*++vec == NULL) {
                    588: #ifdef BRIDGE
                    589:        return NOTOK;
                    590: #else
                    591:        if (getline ("directory: ", buffer) == NOTOK
                    592:                || str2vec (buffer, vec) < 1)
                    593:            return OK;
                    594: 
                    595:        (void) makedir (str2file (*vec), 0);
                    596: #endif
                    597:     }
                    598: #ifdef BRIDGE
                    599:     return makedir (str2file (*vec));
                    600: #else
                    601:     else {
                    602:        multi = vec[1] ? 1 : 0;
                    603: 
                    604:        while (dir = *vec++)
                    605:            (void) makedir (str2file (dir), multi);
                    606:     }
                    607: 
                    608:     return OK;
                    609: #endif
                    610: }
                    611: 
                    612: /*  */
                    613: 
                    614: static int  makedir (dir, multi)
                    615: char   *dir;
                    616: int    multi;
                    617: {
                    618:     struct FTAMgroup    ftgs;
                    619:     register struct FTAMgroup  *ftg = &ftgs;
                    620:     struct FTAMindication   ftis;
                    621:     register struct FTAMindication *fti = &ftis;
                    622:     struct vfsmap *vf = &vfs[VFS_FDF];
                    623: 
                    624:     if (vf -> vf_oid == NULLOID) {
                    625:        advise (NULLCP, "no support for %ss", vf -> vf_text);
                    626:        return NOTOK;
                    627:     }
                    628: 
                    629:     bzero ((char *) ftg, sizeof *ftg);
                    630:     ftg -> ftg_flags |= FTG_BEGIN | FTG_END;
                    631:     ftg -> ftg_threshold = 0;
                    632: 
                    633:     ftg -> ftg_flags |= FTG_CREATE;
                    634:     {
                    635:        register struct FTAMcreate *ftce = &ftg -> ftg_create;
                    636:        register struct FTAMattributes *fa = &ftce -> ftce_attrs;
                    637: 
                    638:        ftce -> ftce_override = FOVER_FAIL;
                    639: 
                    640:        fa -> fa_present = FA_FILENAME;
                    641:        fa -> fa_nfile = 0;
                    642:        fa -> fa_files[fa -> fa_nfile++] = dir;
                    643: 
                    644:        fa -> fa_present |= FA_ACTIONS;
                    645:        fa -> fa_permitted = FA_PERM_READ | FA_PERM_READATTR | FA_PERM_CHNGATTR
                    646:                                | FA_PERM_DELETE | FA_PERM_TRAV;
                    647: 
                    648:        fa -> fa_present |= FA_CONTENTS;
                    649:        fa -> fa_contents = vf -> vf_oid;
                    650: 
                    651:        ftce -> ftce_access = 0;
                    652:        FCINIT (&ftce -> ftce_conctl);
                    653:     }
                    654:     ftg -> ftg_threshold++;
                    655: 
                    656:     ftg -> ftg_flags |= FTG_DESELECT;
                    657:     ftg -> ftg_threshold++;
                    658: 
                    659:     if (FManageRequest (ftamfd, ftg, fti) == NOTOK) {
                    660:        ftam_advise (&fti -> fti_abort, "F-MANAGE.REQUEST");
                    661:        return NOTOK;
                    662:     }
                    663: 
                    664:     ftg = &fti -> fti_group;
                    665: 
                    666:     if (ftg -> ftg_flags & FTG_CREATE) {
                    667:        register struct FTAMcreate *ftce = &ftg -> ftg_create;
                    668: 
                    669:        if (multi && ftce -> ftce_state != FSTATE_SUCCESS)
                    670:            printf ("%s\n", dir);
                    671:        ftam_diag (ftce -> ftce_diags, ftce -> ftce_ndiag, 1, 
                    672:                ftce -> ftce_action);
                    673:        if (ftce -> ftce_state != FSTATE_SUCCESS)
                    674:            goto you_lose;
                    675:     }
                    676: 
                    677:     if (ftg -> ftg_flags & FTG_DESELECT) {
                    678:        register struct FTAMdeselect   *ftde = &ftg -> ftg_deselect;
                    679: 
                    680:        ftam_diag (ftde -> ftde_diags, ftde -> ftde_ndiag, 1,
                    681:                ftde -> ftde_action);
                    682:        ftam_chrg (&ftde -> ftde_charges);
                    683:     }
                    684: 
                    685:     FTGFREE (ftg);
                    686:     return OK;
                    687: 
                    688: you_lose: ;
                    689:     FTGFREE (ftg);
                    690:     return NOTOK;
                    691: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.