Annotation of 43BSDReno/contrib/isode-beta/dsap/common/util.c, revision 1.1.1.1

1.1       root        1: /* util.c - General utility routines */
                      2: 
                      3: #ifndef lint
                      4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/util.c,v 7.1 90/07/09 14:35:23 mrose Exp $";
                      5: #endif
                      6: 
                      7: /*
                      8:  * $Header: /f/osi/dsap/common/RCS/util.c,v 7.1 90/07/09 14:35:23 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       util.c,v $
                     12:  * Revision 7.1  90/07/09  14:35:23  mrose
                     13:  * sync
                     14:  * 
                     15:  * Revision 7.0  89/11/23  21:44:40  mrose
                     16:  * Release 6.0
                     17:  * 
                     18:  */
                     19: 
                     20: /*
                     21:  *                                NOTICE
                     22:  *
                     23:  *    Acquisition, use, and distribution of this module and related
                     24:  *    materials are subject to the restrictions of a license agreement.
                     25:  *    Consult the Preface in the User's Manual for the full terms of
                     26:  *    this agreement.
                     27:  *
                     28:  */
                     29: 
                     30: 
                     31: /* LINTLIBRARY */
                     32: 
                     33: #include "quipu/util.h"
                     34: #include "quipu/commonarg.h"
                     35: #include "quipu/malloc.h"
                     36: #include "tsap.h"
                     37: #include <varargs.h>
                     38: 
                     39: extern LLog * log_dsap;
                     40: 
                     41: char * SkipSpace (ptr)
                     42: register char * ptr;
                     43: {
                     44:        if (ptr == NULLCP)
                     45:                return (NULLCP);
                     46: 
                     47:        while ( isspace (*ptr))
                     48:                ptr++;
                     49:        return (ptr);
                     50: }
                     51: 
                     52: void StripSpace (b)
                     53: register char *b;
                     54: /* copy b to a less spaces and comments */
                     55: {
                     56: register char *a;
                     57: 
                     58:        if (*b == COMMENT ) {
                     59:                *b = 0;
                     60:                return;
                     61:        }
                     62: 
                     63:        while ((! isspace(*b)) && (*b))
                     64:                b++;
                     65: 
                     66:        if (!*b)
                     67:                return;         /* nothing needs doing */
                     68: 
                     69:        a = b;
                     70: 
                     71:        for (;;) {
                     72:                if (isspace (*b))
                     73:                        b++;
                     74:                else if ( (!*b) || (*b == COMMENT))
                     75:                        break;
                     76:                else
                     77:                        *a++ = *b++;
                     78:                }
                     79: 
                     80:        *a = 0;
                     81: }
                     82: 
                     83: void StripSpace2 (b)
                     84: register char *b;
                     85: /* copy b to a less spaces and comments */
                     86: {
                     87: register char *a;
                     88: 
                     89:        while (isascii(*b) && (! isspace(*b)) && (*b))
                     90:                b++;
                     91: 
                     92:        if (!*b)
                     93:                return;         /* nothing needs doing */
                     94: 
                     95:        a = b;
                     96: 
                     97:        for (;;) {
                     98:                if (isascii(*b) && isspace (*b))
                     99:                        b++;
                    100:                else if (!*b)
                    101:                        break;
                    102:                else
                    103:                        *a++ = *b++;
                    104:                }
                    105: 
                    106:        *a = 0;
                    107: }
                    108: 
                    109: char * TidyString2 (a)
                    110: register char * a;
                    111: {
                    112: register char * b;
                    113: char * c;
                    114: register int i = 0;
                    115: 
                    116:        /* removing multiple and trailing spaces */
                    117:        c = a, b = a;
                    118:        while (*a) {
                    119:                if (isascii(*a) && isspace (*a)) {
                    120:                        *b = ' ';       /* make sure not a tab etc */
                    121:                        while (isspace (*++a))
                    122:                                i = 1;
                    123: 
                    124:                        if (*a)
                    125:                                b++;
                    126:                        else
                    127:                                break;
                    128:                }
                    129:                if (i)
                    130:                        *b = *a;
                    131: 
                    132:                a++, b++;
                    133:        }
                    134: 
                    135:        *b = 0;
                    136: 
                    137:        if (*--b == '\n')
                    138:                *b-- = 0;
                    139: 
                    140:        if (*b == ' ')
                    141:                *b = 0;
                    142: 
                    143:        return (c);
                    144: }
                    145: 
                    146: char * TidyString (a)
                    147: register char * a;
                    148: {
                    149:        if (!*a)
                    150:                return (a);
                    151: 
                    152:        /* remove white space from front of string */
                    153:        while (isspace (*a))
                    154:                a++;
                    155: 
                    156:        return (TidyString2(a));
                    157: }
                    158: 
                    159: test_prim_pe (pe,class,id)
                    160: PE pe;
                    161: PElementClass class;
                    162: PElementID id;
                    163: {
                    164:        if (pe == NULLPE)
                    165:                return FALSE;
                    166: 
                    167:        if (pe->pe_form != PE_FORM_PRIM) {
                    168:                LLOG (log_dsap,LLOG_EXCEPTIONS,("Primative Attribute Value expected"));
                    169:                return FALSE;
                    170:        }
                    171: 
                    172:        if ( PE_ID (pe -> pe_class, pe -> pe_id) != PE_ID (class, id) ) {
                    173:                LLOG (log_dsap,LLOG_EXCEPTIONS,("Bad class/ID in Attribute Value"));
                    174:                return FALSE;
                    175:        }
                    176: 
                    177:        return (TRUE);
                    178:        
                    179: }
                    180: 
                    181: #ifndef lint
                    182: ps_printf (va_alist)
                    183: va_dcl
                    184: {
                    185:        PS ps;
                    186:        char buffer [8192];     /* How big should this go !!! */
                    187:        va_list ap;
                    188: 
                    189:        va_start (ap);
                    190: 
                    191:        ps = va_arg (ap, PS);
                    192: 
                    193:        _asprintf (buffer,NULLCP,ap);
                    194: 
                    195:        ps_print (ps,buffer);
                    196: 
                    197:        va_end (ap) ;
                    198: }
                    199: #else
                    200: 
                    201: /* VARARGS2 */
                    202: ps_printf (ps,fmt)
                    203: PS ps;
                    204: char * fmt;
                    205: {
                    206: (void) ps_printf (ps,fmt) ;
                    207: }
                    208: 
                    209: #endif
                    210: 
                    211: 
                    212: fatal (code,fmt)
                    213: int  code;
                    214: char *fmt;
                    215: {
                    216: static char buf [80] = "FATAL ERROR: ";
                    217: 
                    218:        (void) strcat (buf,fmt);
                    219:        LLOG (log_dsap,LLOG_FATAL,(fmt));
                    220:        (void) fflush (stdout);
                    221:        (void) fprintf (stderr,"%s\n",buf);
                    222:        stop_listeners ();
                    223:        exit (code);
                    224: }
                    225: 
                    226: pslog (lp,event,str,func,ptr)
                    227: LLog * lp;
                    228: int event;
                    229: char * str;
                    230: int (*func) ();         /* assumes func (PS ,dataptr,(int) format); */
                    231: caddr_t ptr;
                    232: {
                    233:        /* log info to pstream */
                    234: PS ps;
                    235: char buffer [LINESIZE];
                    236: 
                    237:     if (!(lp -> ll_events & event))
                    238:        return;
                    239: 
                    240:     if ((ps = ps_alloc (str_open)) == NULLPS) {
                    241:        LLOG (lp,LLOG_EXCEPTIONS,("pslog: can't allocate pstream"));
                    242:        return ;
                    243:     }
                    244:     if (str_setup (ps,buffer,LINESIZE,1) == NOTOK) {
                    245:        LLOG (lp,LLOG_EXCEPTIONS,("pslog: can't setup pstream"));
                    246:        return ;
                    247:     }
                    248: 
                    249:     (*func) (ps,ptr,EDBOUT);
                    250:     *ps->ps_ptr = 0;
                    251: 
                    252:     ps_free (ps);
                    253: 
                    254:     LLOG (lp,event,("%s: %s",str,buffer));
                    255: }
                    256: 
                    257: stop_listeners ()
                    258: {
                    259: struct TSAPdisconnect    td_s;
                    260: struct TSAPdisconnect  * td = &(td_s);
                    261: 
                    262:        /* close all listeners */
                    263:        (void) TNetClose (NULLTA,td);
                    264: }
                    265: 
                    266: quipu_pe_cmp (a,b)
                    267: register PE a,b;
                    268: {
                    269: char *p,*q;
                    270: register int j,i;
                    271: 
                    272:        /* based on ISODE pe_cmp */
                    273: 
                    274:        if ( a == NULLPE) {
                    275:                if ( b == NULLPE )
                    276:                        return (0);
                    277:                else 
                    278:                        return (1);
                    279:        }
                    280:        if ( b == NULLPE)
                    281:                return (-1);
                    282: 
                    283:        if (a->pe_class != b->pe_class)
                    284:                if (a->pe_class >  b->pe_class)
                    285:                        return (1) ;
                    286:                else
                    287:                        return (-1);
                    288: 
                    289:        if (a->pe_form != b->pe_form)
                    290:                if (a->pe_form >  b->pe_form)
                    291:                        return (1) ;
                    292:                else
                    293:                        return (-1);
                    294: 
                    295:        if (a->pe_id != b->pe_id)
                    296:                if (a->pe_id >  b->pe_id)
                    297:                        return (1) ;
                    298:                else
                    299:                        return (-1);
                    300: 
                    301:        switch ( a->pe_form ) {
                    302:            case PE_FORM_ICONS:
                    303:                if (a->pe_ilen != a->pe_ilen)
                    304:                        return (a->pe_ilen > b->pe_ilen ? 1 : -1);
                    305:            case PE_FORM_PRIM:
                    306:                if ( (i=a->pe_len) != b->pe_len)
                    307:                        if (  i > b->pe_len )
                    308:                                return (1);
                    309:                        else
                    310:                                return (-1);
                    311: 
                    312:                p = (char *) a->pe_prim;
                    313:                q = (char *) b->pe_prim;
                    314: 
                    315:                for (j=0; j<i; j++) {
                    316:                        if (*p != *q)
                    317:                                if ( *p > *q )
                    318:                                        return (1);
                    319:                                else
                    320:                                        return (-1);
                    321:                        p++;
                    322:                        q++;
                    323:                }
                    324:                return (0) ;
                    325: 
                    326:            case PE_FORM_CONS:
                    327:                for (a=a->pe_cons,b=b->pe_cons; a; a=a->pe_next,b=b->pe_next)
                    328:                        if ((i = quipu_pe_cmp (a,b)) != 0)
                    329:                                return (i);
                    330:                return (b ? 1 : 0);
                    331:            default:
                    332:                return (1);
                    333: 
                    334:        }
                    335: }
                    336: 
                    337: 
                    338: IFP acl_fn = NULLIFP;
                    339: 
                    340: struct acl_info * acl_dflt ()
                    341: {
                    342:        if (acl_fn == NULLIFP)
                    343:                return ((struct acl_info *) NULL);
                    344:        else
                    345:                return ((struct acl_info *)(*acl_fn)());
                    346: }
                    347: 

unix.superglobalmegacorp.com

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