typestr::typestr(const typestr & t) { m_str = NULL; m_size = 0; allocstr(t.m_size); memcpy(m_str, t.m_str, t.m_size); m_token = t.m_token; m_token_pos = t.m_token_pos; }
void typestr::promise(size_t size) { if (m_size >= size) return; typestr tmpstr = *this; allocstr(size); memcpy(m_str, tmpstr.str(), tmpstr.m_size); }
// Rule formatted string init void typestr::rulestr(const char *s) { if (!s || !*s || !*(s + 1)) { freestr(); return; } int i=1, j=0; allocstr(strlen(s) + 1); while(s[i]) { switch(s[i]) { case '$' : if (s[i+1]=='$') m_str[j++] = s[++i]; else m_str[j++] = START_OF_FIELD; ++i; break; case '\\' : // hex value ++i; if (s[i]=='\\' || s[i]=='$') m_str[j++]=s[i++]; else { int d=s[i++]; int u=s[i++]; if (d>='0' && d<='9') d-='0'; else if (d>='A' && d<='F') d-='A'-10; else if (d>='a' && d<='f') d-='a'-10; if (u>='0' && u<='9') u-='0'; else if (u>='A' && u<='F') u-='A'-10; else if (u>='a' && u<='f') u-='a'-10; m_str[j++]=16*d+u; } break; default : m_str[j++]=s[i++]; } } m_str[j-1]=0; }
void _alert(const char *libdir, const char *msgtype, const char *description) { static char none[1] = ""; char *cmd; int dummy; if ( description==NULL ) description = none; cmd = allocstr("%s/alert '%s' '%s' &",libdir,msgtype,description); logmsg(LOG_INFO,"executing '%s'",cmd); /* Assign return value to dummy variable to remove compiler * warnings. We're already trying to generate a warning; there's * no sense in generating another warning when this gives an * error. */ dummy = system(cmd); free(cmd); }
char* typestr::str(const char *str, size_t maxlen /*= 0*/) { if (!str) { freestr(); return NULL; } size_t needed = 1 + (maxlen > 0 ? maxlen : strlen(str)); if (m_size < needed) { allocstr(needed); } if (maxlen > 0) { strncpy(m_str, str, maxlen); m_str[maxlen] = '\0'; } else strcpy(m_str, str); return m_str; }