static unsigned long getMaxSize(SmiType *smiType) { SmiRange *smiRange; SmiType *parentType; SmiNamedNumber *nn; unsigned int max = 0, size; switch (smiType->basetype) { case SMI_BASETYPE_BITS: case SMI_BASETYPE_OCTETSTRING: size = 65535; break; case SMI_BASETYPE_OBJECTIDENTIFIER: size = 128; break; default: return 0xffffffff; } if (smiType->basetype == SMI_BASETYPE_BITS) { for (nn = smiGetFirstNamedNumber(smiType); nn; nn = smiGetNextNamedNumber(nn)) { if (nn->value.value.unsigned32 > max) { max = nn->value.value.unsigned32; } } size = (max / 8) + 1; return size; } for (smiRange = smiGetFirstRange(smiType); smiRange ; smiRange = smiGetNextRange(smiRange)) { if (smiRange->maxValue.value.unsigned32 > max) { max = smiRange->maxValue.value.unsigned32; } } if (max > 0 && max < size) { size = max; } parentType = smiGetParentType(smiType); if (parentType) { unsigned int psize = getMaxSize(parentType); if (psize < size) { size = psize; } } return size; }
static void fprintRanges(FILE *f, int indent, SmiType *smiType) { SmiRange *range; for(range = smiGetFirstRange(smiType); range; range = smiGetNextRange(range)) { fprintSegment(f, indent, "<range", 0); fprint(f, " min=\"%s\"", getValueString(&range->minValue, smiType)); fprint(f, " max=\"%s\"", getValueString(&range->maxValue, smiType)); fprint(f, "/>\n"); } }
static void fprintSubtype(FILE *f, SmiType *smiType) { SmiRange *range; SmiNamedNumber *nn; char s[100]; int i; if ((smiType->basetype == SMI_BASETYPE_ENUM) || (smiType->basetype == SMI_BASETYPE_BITS)) { for(i = 0, nn = smiGetFirstNamedNumber(smiType); nn ; i++, nn = smiGetNextNamedNumber(nn)) { if (i) { fprint(f, ", "); } else { fprint(f, " ("); } sprintf(s, "%s(%s)", nn->name, getValueString(&nn->value, smiType)); fprintWrapped(f, INDENTVALUE + INDENT, s); } if (i) { fprint(f, ")"); } } else { for(i = 0, range = smiGetFirstRange(smiType); range ; i++, range = smiGetNextRange(range)) { if (i) { fprint(f, " | "); } else { fprint(f, " ("); } if (memcmp(&range->minValue, &range->maxValue, sizeof(SmiValue))) { sprintf(s, "%s", getValueString(&range->minValue, smiType)); sprintf(&s[strlen(s)], "..%s", getValueString(&range->maxValue, smiType)); } else { sprintf(s, "%s", getValueString(&range->minValue, smiType)); } fprintWrapped(f, INDENTVALUE + INDENT, s); } if (i) { fprint(f, ")"); } } }
static SmiInteger32 getAbsMinInteger32(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger32 min = SMI_BASETYPE_INTEGER32_MAX; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getAbsMinInteger32(parent) : 0; } for (; range; range = smiGetNextRange(range)) { if (abs(range->minValue.value.integer32) < min) { min = abs(range->minValue.value.integer32); } } return min; }
static SmiUnsigned64 getMinUnsigned64(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger64 min = SMI_BASETYPE_UNSIGNED64_MAX; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getMinUnsigned64(parent) : min; } for (; range; range = smiGetNextRange(range)) { if (range->minValue.value.unsigned64 < min) { min = range->minValue.value.unsigned64; } } return min; }
static SmiUnsigned64 getMaxUnsigned64(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiUnsigned64 max = SMI_BASETYPE_UNSIGNED64_MIN; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getMaxUnsigned64(parent) : max; } for (; range; range = smiGetNextRange(range)) { if (range->maxValue.value.unsigned64 > max) { max = range->maxValue.value.unsigned64; } } return max; }
static SmiInteger64 getAbsMaxInteger64(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger64 max = SMI_BASETYPE_INTEGER64_MIN; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getAbsMaxInteger64(parent) : max; } for (; range; range = smiGetNextRange(range)) { if (m_abs(range->maxValue.value.integer64) > max) { max = m_abs(range->maxValue.value.integer64); } } return max; }
static SmiInteger64 getAbsMinInteger64(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger64 min = SMI_BASETYPE_INTEGER64_MAX; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getAbsMinInteger64(parent) : min; } for (; range; range = smiGetNextRange(range)) { if (m_abs(range->minValue.value.integer64) < min) { min = m_abs(range->minValue.value.integer64); } } return min; }
static SmiUnsigned32 getMaxUnsigned32(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiUnsigned32 max = 0; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getMaxUnsigned32(parent) : 0xffffffff; } for (; range; range = smiGetNextRange(range)) { if (range->maxValue.value.unsigned32 > max) { max = range->maxValue.value.unsigned32; } } return max; }
static SmiUnsigned32 getMinUnsigned32(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger32 min = 0xffffffff; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getMinUnsigned32(parent) : 0; } for (; range; range = smiGetNextRange(range)) { if (range->minValue.value.unsigned32 < min) { min = range->minValue.value.unsigned32; } } return min; }
static SmiInteger32 getAbsMaxInteger32(SmiType *smiType) { SmiType *parent; SmiRange *range; SmiInteger32 max = SMI_BASETYPE_INTEGER32_MIN; range = smiGetFirstRange(smiType); if (! range) { parent = smiGetParentType(smiType); return parent ? getAbsMaxInteger32(parent) : SMI_BASETYPE_INTEGER32_MAX; } for (; range; range = smiGetNextRange(range)) { if (abs(range->maxValue.value.integer32) > max) { max = abs(range->maxValue.value.integer32); } } return max; }
static unsigned long getMinSize(SmiType *smiType) { SmiRange *smiRange; SmiType *parentType; unsigned int min = 65535, size; switch (smiType->basetype) { case SMI_BASETYPE_BITS: return 0; case SMI_BASETYPE_OCTETSTRING: case SMI_BASETYPE_OBJECTIDENTIFIER: size = 0; break; default: return 0; } for (smiRange = smiGetFirstRange(smiType); smiRange ; smiRange = smiGetNextRange(smiRange)) { if (smiRange->minValue.value.unsigned32 < min) { min = smiRange->minValue.value.unsigned32; } } if (min < 65535 && min > size) { size = min; } parentType = smiGetParentType(smiType); if (parentType) { unsigned int psize = getMinSize(parentType); if (psize > size) { size = psize; } } return size; }