X-Git-Url: http://git.silcnet.org/gitweb/?p=website.git;a=blobdiff_plain;f=docs%2Ftoolkit%2Fmanual%2Fsilcstack-silc_stack_push.html;fp=docs%2Ftoolkit%2Fmanual%2Fsilcstack-silc_stack_push.html;h=934feff3988e8cb5eafa327641386d697f9c1d69;hp=0000000000000000000000000000000000000000;hb=80b80cef93d9dff6acc4bc8e3a522c55fcdc3fca;hpb=43e53f529ca5c7d2ddb7cee8e76e273631e6f1e2 diff --git a/docs/toolkit/manual/silcstack-silc_stack_push.html b/docs/toolkit/manual/silcstack-silc_stack_push.html new file mode 100644 index 0000000..934feff --- /dev/null +++ b/docs/toolkit/manual/silcstack-silc_stack_push.html @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + +
Copyright © 2001 - 2007 SILC Project
+ SILC Project Website
+ SILC Toolkit Reference Manual
+ Index
+ + +
+ + + + + + + + + + + + + + +
+ + + +
+
+ + + +SILC Toolkit Reference Manual
+ + +SILC Crypto Library
+    Introduction to SILC RNG
+    SILC RNG Interface
+    SILC Cipher API
+    SILC PKCS API
+    SILC Public Key API
+    SILC PKCS #1 API
+    SILC Hash Interface
+    SILC HMAC Interface
+SILC Core Library
+    SILC Authentication Interface
+    SILC Message Interface
+    SILC Channel Interface
+    SILC Command Interface
+    SILC Notify Interface
+    SILC Status Types
+    SILC Modes
+    SILC ID Interface
+    SILC Argument Interface
+    SILC Attributes Interface
+    Packet Engine Interface
+    SILC Public Key Payload Interface
+SILC Key Exchange Library
+    SILC SKE Interface
+    SILC Connection Authentication Interface
+SILC VCard Library
+    SILC VCard Interface
+SILC Math Library
+    SILC MP Interface
+    SILC Math Interface
+SILC Client Library
+    Using SILC Client Library Tutorial
+    Arguments for command_reply Client Operation
+    SilcStatus Error Arguments in command_reply Client Operation
+    Arguments for notify Client Operation
+    Unicode and UTF-8 Strings in Client Library
+    Client Library Interface Reference
+    Client Entry Interface Reference
+SILC ASN.1 Library
+    SILC ASN.1 Interface
+    SILC BER interface
+SILC HTTP Library
+    SILC HTTP Server Interface
+    SILC HTTP PHP Translator
+SILC Utility Library
+    Basic Types and Definitions
+    Data Buffer Interface
+    Data Buffer Format Interface
+    Hash Table Interface
+    Memory Allocation Interface
+    Data Stack (memory pool) Interface
+    Finite State Machine Interface
+    Thread Interface
+    Mutual Exclusion Lock Interface
+    Condition Variable Interface
+    Atomic Operations Interface
+    Network (TCP and UDP) Interface
+    Scheduler Interface
+    Asynchronous Operation Interface
+    Abstract Stream Interface
+    Socket Stream Interface
+    File Descriptor Stream Interface
+    File Utility Functions
+    String Utility Interface
+    Snprintf Interface
+    UTF-8 String Interface
+    Stringprep Interface
+    Utility Functions
+    List Interface
+    Dynamic List Interface
+    MIME Interface
+    Time Utility Functions
+    Logging Interface
+    Config File Interface
+SILC Key Repository Library
+    SILC SKR Interface
+SILC Application Utility Library
+    SILC Application Utilities
+    SILC ID Cache Interface
+SILC SFTP Library
+    SILC SFTP Interface
+    SFTP Filesystems Interface
+ +
+Resource Links +
+SILC Project Website
+SILC Protocol Documentation
+SILC White Paper
+SILC FAQs
+ +
+



+
+
+ + + + +
+
+ +Function silc_stack_push

+ + +SYNOPSIS + +

+    SilcUInt32 silc_stack_push(SilcStack stack, SilcStackFrame *frame);
+
+
+DESCRIPTION + +

+    Push the top of the stack down which becomes the new top of the stack.
+    For every silc_stack_push call there must be silc_stack_pop call.  All
+    allocations between these two calls will be done from the top of the
+    stack and all allocated memory is freed after the next silc_stack_pop
+    is called.  This returns so called stack pointer for the new stack
+    frame, which the caller may use to check that all calls to
+    silc_stack_pop has been made.  This call may do a small memory
+    allocation in some cases, but usually it does not allocate any memory.
+    If this returns zero (0) the system is out of memory.
+
+    If the `frame' is non-NULL then that SilcStackFrame is used as
+    stack frame.  Usually `frame' is set to NULL by user.  Statically
+    allocated SilcStackFrame should be used when using silc_stack_push
+    in recursive function and the recursion may become deep.  In this
+    case using statically allocated SilcStackFrame is recommended since
+    it assures that frames never run out and silc_stack_push never
+    allocates any memory.  If your routine is not recursive then
+    setting `frame' to NULL is recommended, unless performance is
+    critical.
+
+    This function is used when a routine is doing frequent allocations
+    from the stack.  If the stack is not pushed and later popped all
+    allocations are made from the stack and the stack eventually runs out
+    (it gets enlarged by normal memory allocation).  By pushing and then
+    later popping the frequent allocations does not consume the stack.
+
+    If `stack' is NULL this call has no effect.
+
+
+EXAMPLE + +

+    All memory allocations in silc_foo_parse_packet will be done in
+    a fresh stack frame and that data is freed after the parsing is
+    completed.
+
+    silc_stack_push(stack, NULL);
+    silc_foo_parse_packet(packet, stack);
+    silc_stack_pop(stack);
+
+    Another example with recursion and using statically allocated
+    SilcStackFrame.  After popping the statically allocated frame can
+    be reused if necessary.
+
+    void silc_foo_this_function(SilcStack stack)
+    {
+      SilcStackFrame frame;
+      ...
+      silc_stack_push(stack, &frame);
+      silc_foo_this_function(stack);   // Call recursively
+      silc_stack_pop(stack);
+      ...
+    }
+
+
+



+
+
+ + + + +
+
+ +SilcStack Interface
+SilcStack
+SilcStackFrame
+silc_stack_alloc
+silc_stack_free
+silc_stack_push
+silc_stack_pop
+
+ +



+
+
+ + + +
+ + + + + + +
Copyright © 2001 - 2007 SILC Project
+ SILC Project Website
+ SILC Toolkit Reference Manual
+ Index
+ + +