|
Packit Service |
9ccfef |
/*
|
|
Packit Service |
9ccfef |
* dump-identifiers.c --
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
* Operations to dump flat identifier lists for SMI modules.
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
* Copyright (c) 2000 Frank Strauss, Technical University of Braunschweig.
|
|
Packit Service |
9ccfef |
* Copyright (c) 2000 J. Schoenwaelder, Technical University of Braunschweig.
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
* See the file "COPYING" for information on usage and redistribution
|
|
Packit Service |
9ccfef |
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
Packit Service |
9ccfef |
*
|
|
Packit Service |
9ccfef |
* @(#) $Id: dump-identifiers.c 5758 2006-08-16 21:10:05Z schoenw $
|
|
Packit Service |
9ccfef |
*/
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#include <config.h>
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#include <stdlib.h>
|
|
Packit Service |
9ccfef |
#include <stdio.h>
|
|
Packit Service |
9ccfef |
#include <stdarg.h>
|
|
Packit Service |
9ccfef |
#include <string.h>
|
|
Packit Service |
9ccfef |
#include <ctype.h>
|
|
Packit Service |
9ccfef |
#include <time.h>
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
#include "smi.h"
|
|
Packit Service |
9ccfef |
#include "smidump.h"
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static int moduleLen = 0;
|
|
Packit Service |
9ccfef |
static int identifierLen = 0;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static int showlines = 0;
|
|
Packit Service |
9ccfef |
static int showpath = 0;
|
|
Packit Service |
9ccfef |
static int ctagfmt = 0;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static char *smiStringNodekind(SmiNodekind nodekind)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
return
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_UNKNOWN) ? "<unknown>" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_NODE) ? "node" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_SCALAR) ? "scalar" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_TABLE) ? "table" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_ROW) ? "row" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_COLUMN) ? "column" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_NOTIFICATION) ? "notification" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_GROUP) ? "group" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_COMPLIANCE) ? "compliance" :
|
|
Packit Service |
9ccfef |
(nodekind == SMI_NODEKIND_CAPABILITIES) ? "capabilities" :
|
|
Packit Service |
9ccfef |
"<UNDEFINED>";
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static void fprintNodeIdentifiers(FILE *f, int modc, SmiModule **modv)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
SmiNode *smiNode;
|
|
Packit Service |
9ccfef |
unsigned int j;
|
|
Packit Service |
9ccfef |
int i;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for (i = 0; i < modc; i++) {
|
|
Packit Service |
9ccfef |
for (smiNode = smiGetFirstNode(modv[i], SMI_NODEKIND_ANY);
|
|
Packit Service |
9ccfef |
smiNode;
|
|
Packit Service |
9ccfef |
smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
|
|
Packit Service |
9ccfef |
if (smiNode->name) {
|
|
Packit Service |
9ccfef |
if (ctagfmt) {
|
|
Packit Service |
9ccfef |
fprintf(f, "%*s", -identifierLen, smiNode->name);
|
|
Packit Service |
9ccfef |
fprintf(f, " %d", smiGetNodeLine(smiNode));
|
|
Packit Service |
9ccfef |
fprintf(f, " %*s", -moduleLen, modv[i]->path);
|
|
Packit Service |
9ccfef |
fprintf(f, " %s OBJECT-TYPE -- %s\n", smiNode->name,
|
|
Packit Service |
9ccfef |
smiStringNodekind(smiNode->nodekind));
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
fprintf(f, "%*s",
|
|
Packit Service |
9ccfef |
-moduleLen, showpath ? modv[i]->path : modv[i]->name);
|
|
Packit Service |
9ccfef |
if (showlines) {
|
|
Packit Service |
9ccfef |
fprintf(f, ":%d:", smiGetNodeLine(smiNode));
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
fprintf(f, " %*s %-12s ", -identifierLen, smiNode->name,
|
|
Packit Service |
9ccfef |
smiStringNodekind(smiNode->nodekind));
|
|
Packit Service |
9ccfef |
for (j = 0; j < smiNode->oidlen; j++) {
|
|
Packit Service |
9ccfef |
fprintf(f, j ? ".%u" : "%u", smiNode->oid[j]);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
fprintf(f, "\n");
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static void fprintTypeIdentifiers(FILE *f, int modc, SmiModule **modv)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
SmiType *smiType;
|
|
Packit Service |
9ccfef |
int i;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for (i = 0; i < modc; i++) {
|
|
Packit Service |
9ccfef |
for (smiType = smiGetFirstType(modv[i]);
|
|
Packit Service |
9ccfef |
smiType;
|
|
Packit Service |
9ccfef |
smiType = smiGetNextType(smiType)) {
|
|
Packit Service |
9ccfef |
if (smiType->name) {
|
|
Packit Service |
9ccfef |
if (ctagfmt) {
|
|
Packit Service |
9ccfef |
fprintf(f, "%*s", -identifierLen, smiType->name);
|
|
Packit Service |
9ccfef |
fprintf(f, " %d", smiGetTypeLine(smiType));
|
|
Packit Service |
9ccfef |
fprintf(f, " %*s", -moduleLen, modv[i]->path);
|
|
Packit Service |
9ccfef |
fprintf(f, " %s TEXTUAL-CONVENTION\n", smiType->name);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
fprintf(f, "%*s",
|
|
Packit Service |
9ccfef |
-moduleLen, showpath ? modv[i]->path : modv[i]->name);
|
|
Packit Service |
9ccfef |
if (showlines) {
|
|
Packit Service |
9ccfef |
fprintf(f, ":%d:", smiGetTypeLine(smiType));
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
fprintf(f, " %*s %-12s\n", -identifierLen, smiType->name,
|
|
Packit Service |
9ccfef |
"type");
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static void dumpIdentifiers(int modc, SmiModule **modv, int flags,
|
|
Packit Service |
9ccfef |
char *output)
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
SmiNode *smiNode;
|
|
Packit Service |
9ccfef |
int i, len;
|
|
Packit Service |
9ccfef |
FILE *f = stdout;
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (output) {
|
|
Packit Service |
9ccfef |
f = fopen(output, "w");
|
|
Packit Service |
9ccfef |
if (!f) {
|
|
Packit Service |
9ccfef |
fprintf(stderr, "smidump: cannot open %s for writing: ", output);
|
|
Packit Service |
9ccfef |
perror(NULL);
|
|
Packit Service |
9ccfef |
exit(1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for (moduleLen = 0, identifierLen = 0, i = 0; i < modc; i++) {
|
|
Packit Service |
9ccfef |
if (showpath) {
|
|
Packit Service |
9ccfef |
len = strlen(modv[i]->path);
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
len = strlen(modv[i]->name);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
if (len > moduleLen) moduleLen = len;
|
|
Packit Service |
9ccfef |
for (smiNode = smiGetFirstNode(modv[i], SMI_NODEKIND_ANY);
|
|
Packit Service |
9ccfef |
smiNode;
|
|
Packit Service |
9ccfef |
smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
|
|
Packit Service |
9ccfef |
if (smiNode->name) {
|
|
Packit Service |
9ccfef |
len = strlen(smiNode->name);
|
|
Packit Service |
9ccfef |
if (len > identifierLen) identifierLen = len;
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (flags & SMIDUMP_FLAG_UNITE) {
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (! (flags & SMIDUMP_FLAG_SILENT)) {
|
|
Packit Service |
9ccfef |
fprintf(f, "# united list of identifiers (generated by smidump "
|
|
Packit Service |
9ccfef |
SMI_VERSION_STRING ")\n\n");
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (! (flags & SMIDUMP_FLAG_SILENT) && (flags & SMIDUMP_FLAG_ERROR)) {
|
|
Packit Service |
9ccfef |
fprintf(f, "# WARNING: this output may be incorrect due to "
|
|
Packit Service |
9ccfef |
"significant parse errors\n\n");
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
fprintTypeIdentifiers(f, modc, modv);
|
|
Packit Service |
9ccfef |
fprintNodeIdentifiers(f, modc, modv);
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
} else {
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
for (i = 0; i < modc; i++) {
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (! (flags & SMIDUMP_FLAG_SILENT)) {
|
|
Packit Service |
9ccfef |
fprintf(f, "# %s list of identifiers (generated by smidump "
|
|
Packit Service |
9ccfef |
SMI_VERSION_STRING ")\n\n",
|
|
Packit Service |
9ccfef |
modv[i]->name);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (! (flags & SMIDUMP_FLAG_SILENT) && (flags & SMIDUMP_FLAG_ERROR)) {
|
|
Packit Service |
9ccfef |
fprintf(f, "# WARNING: this output may be incorrect due to "
|
|
Packit Service |
9ccfef |
"significant parse errors\n\n");
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
fprintTypeIdentifiers(f, 1, &(modv[i]));
|
|
Packit Service |
9ccfef |
fprintNodeIdentifiers(f, 1, &(modv[i]));
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (fflush(f) || ferror(f)) {
|
|
Packit Service |
9ccfef |
perror("smidump: write error");
|
|
Packit Service |
9ccfef |
exit(1);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
if (output) {
|
|
Packit Service |
9ccfef |
fclose(f);
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
}
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
void initIdentifiers()
|
|
Packit Service |
9ccfef |
{
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static SmidumpDriverOption opt[] = {
|
|
Packit Service |
9ccfef |
{ "lines", OPT_FLAG, &showlines, 0,
|
|
Packit Service |
9ccfef |
"show line numbers"},
|
|
Packit Service |
9ccfef |
{ "path", OPT_FLAG, &showpath, 0,
|
|
Packit Service |
9ccfef |
"show file path instead of module name"},
|
|
Packit Service |
9ccfef |
{ "ctag", OPT_FLAG, &ctagfmt, 0,
|
|
Packit Service |
9ccfef |
"show symbols in [g]ctag format"},
|
|
Packit Service |
9ccfef |
{ 0, OPT_END, 0, 0 }
|
|
Packit Service |
9ccfef |
};
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
static SmidumpDriver driver = {
|
|
Packit Service |
9ccfef |
"identifiers",
|
|
Packit Service |
9ccfef |
dumpIdentifiers,
|
|
Packit Service |
9ccfef |
SMI_FLAG_NODESCR,
|
|
Packit Service |
9ccfef |
0,
|
|
Packit Service |
9ccfef |
"list of all identifiers",
|
|
Packit Service |
9ccfef |
opt,
|
|
Packit Service |
9ccfef |
NULL
|
|
Packit Service |
9ccfef |
};
|
|
Packit Service |
9ccfef |
|
|
Packit Service |
9ccfef |
smidumpRegisterDriver(&driver);
|
|
Packit Service |
9ccfef |
}
|