dn_seq.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 249 行
C
249 行
/* dn_seq.c - General Directory Name Sequence routines */#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/common/RCS/dn_seq.c,v 9.0 1992/06/16 12:12:39 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/common/RCS/dn_seq.c,v 9.0 1992/06/16 12:12:39 isode Rel $ * * * $Log: dn_seq.c,v $ * Revision 9.0 1992/06/16 12:12:39 isode * Release 8.0 * *//* * NOTICE * * Acquisition, use, and distribution of this module and related * materials are subject to the restrictions of a license agreement. * Consult the Preface in the User's Manual for the full terms of * this agreement. * *//* LINTLIBRARY */#include "quipu/util.h"#include "quipu/entry.h"dn_seq_free (dnseq)struct dn_seq * dnseq;{struct dn_seq * ptr;struct dn_seq * next; for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=next ) { next = ptr->dns_next; dn_free (ptr->dns_dn); free ((char *) ptr); }}struct dn_seq * dn_seq_cpy (dnseq)struct dn_seq * dnseq;{register struct dn_seq * ptr;struct dn_seq * ptr2;struct dn_seq * result = NULLDNSEQ; for (ptr=dnseq ; ptr!=NULLDNSEQ; ptr=ptr->dns_next ) { ptr2 = dn_seq_alloc(); ptr2 -> dns_next = result; result = ptr2; result->dns_dn = dn_cpy (ptr->dns_dn); } return (result);}check_dnseq (dnseq,who)struct dn_seq * dnseq;DN who;{register struct dn_seq * ptr; for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) { if (dn_cmp (who,ptr->dns_dn) == OK) return (OK); } return (NOTOK);}dn_seq_cmp (a,b)struct dn_seq * a, * b;{ struct dn_seq * dns1; struct dn_seq * dns2; if((a == NULLDNSEQ) && (b == NULLDNSEQ)) return(0); if(a==NULLDNSEQ) return(-1); if(b==NULLDNSEQ) return(1); for (dns1=a; dns1!=NULLDNSEQ; dns1=dns1->dns_next) { for (dns2=b; dns2!=NULLDNSEQ; dns2=dns2->dns_next) { if(dn_cmp (dns1->dns_dn,dns2->dns_dn) == 0) break; } if(dns2 == NULLDNSEQ) return(1); } for (dns2=b; dns2!=NULLDNSEQ; dns2=dns2->dns_next) { for (dns1=a; dns1!=NULLDNSEQ; dns1=dns1->dns_next) { if(dn_cmp (dns1->dns_dn,dns2->dns_dn) == 0) break; } if(dns1 == NULLDNSEQ) return(-1); } return (0);}check_dnseq_prefix (dnseq,who)struct dn_seq * dnseq;DN who;{struct dn_seq * ptr; for (ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next) { if (dn_cmp_prefix (ptr->dns_dn,who) == OK) return (OK); } return (NOTOK);}dn_seq_print (ps,dnseq,format)PS ps;struct dn_seq * dnseq;int format;{ if (dnseq == NULLDNSEQ) return; dn_print (ps,dnseq->dns_dn,EDBOUT); for (dnseq=dnseq->dns_next; dnseq!=NULLDNSEQ; dnseq=dnseq->dns_next) { if (format == READOUT) ps_print (ps," AND "); else ps_print (ps,"$"); dn_print (ps,dnseq->dns_dn,EDBOUT); }}struct dn_seq * str2dnseq (str)register char * str;{register char *ptr;register char *save,val;struct dn_seq * dns = NULLDNSEQ;struct dn_seq * newdns; while ( (ptr = index (str,'$')) != 0) { save = ptr++; save--; if (! isspace (*save)) save++; val = *save; *save = 0; newdns = dn_seq_alloc(); if ((newdns->dns_dn = str2dn (str)) == NULLDN) { dn_seq_free (dns); free ((char *) newdns); return (NULLDNSEQ); } newdns->dns_next = dns; dns = newdns; *save = val; str = ptr; } if ((ptr = rindex (str,'#')) != 0) { /* a bit or reverse compatability... */ if (*++ptr != 0) { parse_error ("invalid # in sequence '%s'",str); dn_seq_free (dns); return (NULLDNSEQ); } else *--ptr = 0; } newdns = dn_seq_alloc(); if ((newdns->dns_dn = str2dn (str)) == NULLDN) { dn_seq_free (dns); free ((char *) newdns); return (NULLDNSEQ); } newdns->dns_next = dns; dns = newdns; return (dns);}int dn_in_dnseq(dn, dnseq)DN dn;struct dn_seq * dnseq;{ struct dn_seq * ptr; register int i = 1; for(ptr=dnseq; ptr!=NULLDNSEQ; ptr=ptr->dns_next, i++) { if(dn_cmp(dn, ptr->dns_dn) == 0) break; } if(ptr == NULLDNSEQ) return(FALSE); return(i);}struct dn_seq * dn_seq_push(dn,dnseq)DN dn;struct dn_seq * dnseq;{ struct dn_seq * ret; ret = dn_seq_alloc(); ret->dns_dn = dn_cpy(dn); ret->dns_next = dnseq; return(ret);}struct dn_seq * dn_seq_pop(dnseq)struct dn_seq * dnseq;{ struct dn_seq * ret; if(dnseq == NULLDNSEQ) return(NULLDNSEQ); ret = dnseq->dns_next; dn_free(dnseq->dns_dn); free((char *)dnseq); return(ret);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?