double jaro_winkler_dist::score(std::string s1, std::string s2) { double l_pref = (double)prefix_length(s1,s2); jaro_dist *j = new jaro_dist(); double jd = j->score(s1,s2); double jwd = jd + (l_pref*.1*(1-jd)); return jwd; }
void #line 307 "./cwebdir/comm-w2c.ch" print_prefix_name P1C(name_pointer,p) #line 808 "./cwebdir/common.w" { char*s= first_chunk(p); int l= prefix_length(p); term_write(s,l); if(s+l<(p+1)->byte_start)term_write("...",3); }
int main (int argc, char **argv) { char *path; /* The current input entry. */ char *oldpath; /* The previous input entry. */ size_t pathsize, oldpathsize; /* Amounts allocated for them. */ int line_len; /* Length of input line. */ program_name = argv[0]; (void) argc; atexit (close_stdout); pathsize = oldpathsize = 1026; /* Increased as necessary by getline. */ path = xmalloc (pathsize); oldpath = xmalloc (oldpathsize); /* Set to empty string, to force the first prefix count to 0. */ oldpath[0] = '\0'; while ((line_len = getline (&path, &pathsize, stdin)) > 0) { register int count; /* The prefix length. */ register int j; /* Index into input line. */ path[line_len - 1] = '\0'; /* Remove the newline. */ /* Output bigrams in the remainder only. */ count = prefix_length (oldpath, path); for (j = count; path[j] != '\0' && path[j + 1] != '\0'; j += 2) { putchar (path[j]); putchar (path[j + 1]); putchar ('\n'); } { /* Swap path and oldpath and their sizes. */ char *tmppath = oldpath; size_t tmppathsize = oldpathsize; oldpath = path; oldpathsize = pathsize; path = tmppath; pathsize = tmppathsize; } } free (path); free (oldpath); return 0; }
/* Function to add, remove and update entries in the kernel routing * table */ int nl_kern_route(int action, int flags, int family, int index, struct in_addr *dst, struct in_addr *gw, struct in_addr *nm, int metric) { struct { struct nlmsghdr nlh; struct rtmsg rtm; char attrbuf[1024]; } req; if (!dst || !gw) return -1; req.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(struct rtmsg)); req.nlh.nlmsg_type = action; req.nlh.nlmsg_flags = NLM_F_REQUEST | flags; req.nlh.nlmsg_pid = 0; req.rtm.rtm_family = family; if (!nm) req.rtm.rtm_dst_len = sizeof(struct in_addr) * 8; else req.rtm.rtm_dst_len = prefix_length(AF_INET, nm); req.rtm.rtm_src_len = 0; req.rtm.rtm_tos = 0; req.rtm.rtm_table = RT_TABLE_MAIN; req.rtm.rtm_protocol = 100; req.rtm.rtm_scope = RT_SCOPE_LINK; req.rtm.rtm_type = RTN_UNICAST; req.rtm.rtm_flags = 0; addattr(&req.nlh, RTA_DST, dst, sizeof(struct in_addr)); if (memcmp(dst, gw, sizeof(struct in_addr)) != 0) { req.rtm.rtm_scope = RT_SCOPE_UNIVERSE; addattr(&req.nlh, RTA_GATEWAY, gw, sizeof(struct in_addr)); } if (index > 0) addattr(&req.nlh, RTA_OIF, &index, sizeof(index)); addattr(&req.nlh, RTA_PRIORITY, &metric, sizeof(metric)); return nl_send(&rtsock, &req.nlh); }
name_pointer #line 363 "./cwebdir/comm-w2c.ch" section_lookup P3C(char*,first,char*,last,int,ispref) #line 917 "./cwebdir/common.w" { int c= 0; name_pointer p= root; name_pointer q= NULL; name_pointer r= NULL; name_pointer par= NULL; int name_len= last-first+1; /*52:*/ #line 936 "./cwebdir/common.w" while(p){ c= web_strcmp(first,name_len,first_chunk(p),prefix_length(p)); if(c==less||c==greater){ if(r==NULL) par= p; p= (c==less?p->llink:p->rlink); }else{ if(r!=NULL){ printf("\n! Ambiguous prefix: matches <"); print_prefix_name(p); printf(">\n and <"); print_prefix_name(r); err_print(">"); return name_dir; } r= p; p= p->llink; q= r->rlink; } if(p==NULL) p= q,q= NULL; } /*:52*/ #line 926 "./cwebdir/common.w" ; /*53:*/ #line 961 "./cwebdir/common.w" if(r==NULL) return add_section_name(par,c,first,last+1,ispref); /*:53*/ #line 927 "./cwebdir/common.w" ; /*54:*/ #line 969 "./cwebdir/common.w" switch(section_name_cmp(&first,name_len,r)){ case prefix: if(!ispref){ printf("\n! New name is a prefix of <"); print_section_name(r); err_print(">"); } else if(name_len<prefix_length(r))set_prefix_length(r,name_len); case equal:return r; case extension:if(!ispref||first<=last) extend_section_name(r,first,last+1,ispref); return r; case bad_extension: printf("\n! New name extends <"); print_section_name(r); err_print(">"); return r; default: printf("\n! Section name incompatible with <"); print_prefix_name(r); printf(">,\n which abbreviates <"); print_section_name(r); err_print(">"); return r; } /*:54*/ #line 928 "./cwebdir/common.w" ; }
/* I've learnt this technique from Apple's vfprintf() (BSD libc heritage?) */ static char *ulong2str( char *end, unsigned long n, unsigned base, int width, enum format_flags flags ) { char *begin = end; const char *digits = digitset(base, flags & FLAG_CAPS); char s; /* sign character (if any) or 0 */ do { *--begin = digits[n % base]; n /= base; } while (n > 0); if (flags & FLAG_NEGATIVE) { s = '-'; } else if (flags & FLAG_EXPLICITSIGN) { s = '+'; } else if (flags & FLAG_PADSIGN) { s = ' '; } else { s = 0; } if (flags & FLAG_ZEROPAD) { while (width > end - begin + 1 + prefix_length(base)) { *--begin = '0'; } if (s != 0) { *--begin = s; } else { /* if there's no sign, fill first place with zeroes */ if (width > end - begin + prefix_length(base)) { *--begin = '0'; } } if (flags & FLAG_BASEPREFIX) { /* if base prefix is present, there shall be no sign */ assert(s == 0); APPEND_BASE_PREFIX(base, begin, flags & FLAG_CAPS); } else { /* if there's no base prefix, fill rest with zeroes */ int i; for (i = 0; i < prefix_length(base); i++) { if (width > end - begin) { *--begin = '0'; } } } } else { if (s != 0) { *--begin = s; } if (flags & FLAG_BASEPREFIX) { /* if base prefix is present, there shall be no sign */ assert(s == 0); APPEND_BASE_PREFIX(base, begin, flags & FLAG_CAPS); } while (width > end - begin) { *--begin = ' '; } } return begin; }
eap_status_e asn1_der_type_c::debug_object_identifier(eap_variable_data_c * const debug_buffer) { if (debug_buffer == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); } eap_status_e status(eap_status_process_general_error); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - status = debug_buffer->set_data_length(debug_buffer->get_buffer_length()); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } const u32_t recursion(m_recursion + 1u); const u32_t max_prefix_length(recursion * SIZE_OF_ONE_OCTET_STRING + 1ul); if (debug_buffer->get_buffer_length() < (max_prefix_length + 2ul)) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } const u32_t max_data_output_length((debug_buffer->get_buffer_length() - (max_prefix_length + 2ul))/2ul); const u32_t max_plain_output_length(max_data_output_length); u32_t prefix_length(0ul); u8_t * const prefix = debug_buffer->get_data(); if (prefix == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); } status = debug_create_prefix(recursion, prefix, max_prefix_length, &prefix_length); if (status != eap_status_ok) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); } u8_t * const data_output = debug_buffer->get_data_offset(max_prefix_length, max_data_output_length); if (data_output == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } data_output[max_data_output_length-1ul] = 0; u8_t * const plain_output = debug_buffer->get_data_offset(max_prefix_length + max_data_output_length, max_plain_output_length); if (plain_output == 0) { EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); } plain_output[max_plain_output_length - 1ul] = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const u32_t length = get_content_length(); if (length == 0) { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("# ERROR: invalid %s, length=%d\n"), get_tag_string(), length)); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_buffer_too_short); } const u8_t * const oid_data = get_content(); if (oid_data == 0) { EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("# ERROR: invalid %s, length=%d\n"), get_tag_string(), length)); EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, eap_status_buffer_too_short); } u32_t offset(0ul); u8_t oid_octet = oid_data[offset]; u32_t oid1 = oid_octet / 40; u32_t oid2 = (oid_octet - oid1*40); EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("%s%02x # = %d = 40 * %d + %d => %d.%d\n"), prefix, oid_octet, oid_octet, oid1, oid2, oid1, oid2)); ++offset; while(offset < length) { u32_t oid_length(0ul); u32_t data_output_offset(0ul); u32_t plain_output_offset(0ul); u32_t ind(0ul); for (ind = offset; ind < length; ++ind) { u8_t oid_octet = oid_data[ind]; ++oid_length; if ((oid_octet & OID_HIGH_BIT) == 0) { break; } } // for() u32_t power = oid_length - 1ul; u32_t oid_value(0ul); for (ind = offset; ind < (offset+oid_length); ++ind) { u8_t oid_octet = oid_data[ind]; data_output_offset += m_am_tools->snprintf( &data_output[data_output_offset], max_data_output_length - data_output_offset, "%02x \0", oid_octet); u8_t oid = static_cast<u8_t>(oid_octet & (~OID_HIGH_BIT)); if (ind > offset) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, " + \0"); } if (power > 1ul) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x * 128 ^ %d\0", oid, power); } else if (power > 0ul) { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x * 128\0", oid); } else { plain_output_offset += m_am_tools->snprintf( &plain_output[plain_output_offset], max_data_output_length - plain_output_offset, "0x%02x\0", oid); } oid_value = (oid_value << 7) + oid; --power; } // for() EAP_TRACE_DEBUG( m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("%s%s # %s = %d\n"), prefix, data_output, plain_output, oid_value)); offset += oid_length; } EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); return EAP_STATUS_RETURN(m_am_tools, status); }