On Tue, Nov 8, 2016 at 4:02 PM, Bart Van Assche <bart.vanass...@sandisk.com> wrote:
> On 11/08/2016 12:17 PM, Robert Story wrote: > > On Tue, 8 Nov 2016 16:35:46 +0000 Moreno wrote: > > MF> As requested in the sujbect, what's the purpose of line 2824 in > mib.c file? > > MF> > > MF> tmpbuf2[strlen(tmpbuf2)-1] = 0; > > MF> > > MF> It causes my "/mibs" directory to be trimmed to "/mib" and nothing > works. > > > > Then it sounds like your mibindex file is not well formed. It should > start > > with a DIR line, followed by a line for each mib. e.g. > > > > --- start --- > > DIR /usr/share/snmp/mibs > > AGENTX-MIB AGENTX-MIB.txt > > --- end --- > > > > The first line is read by fgets(): > > > > fgets() reads in at most one less than size characters from > stream and > > stores them into the buffer pointed to by s. Reading stops > after an > > EOF or a newline. If a newline is read, it is stored into the > buffer. > > > > So the strlen - 1 chops off the newline. > > > > MF> Also, I had to memset to 0 all the buffers for peace of mind because > > MF> I'm porting netsnmp to an embedded plaform that doesn't automatically > > MF> set to zero static variables and arrays on declaration. > > > > Static buffers/arrays should be initialized before use. If you find any > that > > are used before they are initialized, please file a bug and, if you can, > > submit a patch to fix them. > > Hello Robert, > > A quote from the C language standard (ISO/IEC 9899:201x): "6.9.2 > External object definitions. Semantics. If the declaration of an > identifier for an object has file scope and an initializer, the > declaration is an external definition for the identifier. A declaration > of an identifier for an object that has file scope without an > initializer, and without a storage-class specifier or with the > storage-class specifier static, constitutes a tentative definition. If a > translation unit contains one or more tentative definitions for an > identifier, and the translation unit contains no external definition for > that identifier, then the behavior is exactly as if the translation unit > contains a file scope declaration of that identifier, with the composite > type as of the end of the translation unit, with an initializer equal to > 0." > > In other words, any toolchain that does not zero-initialize static > variables violates the C standard. I don't think we should care about > broken toolchains. > Its not up to the toolchain to auto-zero these variables. Whenever I've written apps for embedded systems, I had two choices: 1/ Initialize all my statics. 2/ Have either the OS, or the HW initialization routine in the ROM zero all RAM (or have the RAM test/discover routine leave the RAM zeroed when it finishes) before any app/task is loaded or starts running. That way the apps can be coded the same way as if you had UNIX/Linux/DOS/etc. Fulko
------------------------------------------------------------------------------
_______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/net-snmp-coders