main index

section index




/*-------------------------------------------------------------*/
/* Name : netwib_buf_append_fmt
   Description :
     Add data to a buf.
   Input parameter(s) :
     fmt : format as explained below
   Input/output parameter(s) :
     *pbuf : netwib_buf updated
   Output parameter(s) :
   Normal return values :
     NETWIB_ERR_OK : ok
   This function supports NETWIB_BUF_FLAGS_SENSITIVE.
*/
/***************************************************************
 * Netwib provides a kind of printf format. It is not          *
 * compatible with standard printf, but it corresponds to      *
 * netwib usage.                                               *
 *   %% : %                                                    *
 *   %c : char                                                 *
 *   %s : string                                               *
 *   %p : pointer                                              *
 *   %{type} : special type                                    *
 *   %{generalformat;type:specificformat} : special type with  *
 *                                          a format           *
 *   %{generalformat;type} : special type with a format        *
 *   %{type:specificformat} : special type with a format       *
 * generalformat :                                             *
 *   - expressed as a regexp : "[lcr].[1-9][0-9]{0,1}"         *
 *       'lcr' : left, center, right                           *
 *       '.'   : padding character                             *
 *       '0-9' : minimum size                                  *
 *   - default value : "l 0"                                   *
 * type :                                                      *
 *   - uint32, uint16, uint8, uintmax, uintptr, uint64, byte   *
 *      - specificformat expressed as                          *
 *        "[#]{0,1}[0-9]{0,2}[bouxX]{0,1}"                     *
 *         '#' : add 'b' before binary numbers                 *
 *               add '0' before octal numbers                  *
 *               add '0x' before hexadecimal numbers           *
 *         '0-9' : total size (minimum value)                  *
 *         'bouxX' : binary, octal, decimal, hexadecimal       *
 *      - default value for specificformat : "u"               *
 *   - int32, int16, int8, intmax, intptr, int64               *
 *      - specificformat expressed as "[+]{0,1}[0-9]{0,2}"     *
 *         '+' : add a '+' before positive numbers             *
 *         '0-9' : total size (minimum value)                  *
 *      - default value for specificformat : ""                *
 *   - bool                                                    *
 *      - specificformat expressed as "[0tTyYsS]{0,1}"         *
 *         '0' : 0/1                                           *
 *         't' : true/false                                    *
 *         'T' : TRUE/FALSE                                    *
 *         'y' : yes/no                                        *
 *         'Y' : YES/NO                                        *
 *         's' : set/unset                                     *
 *         'S' : SET/UNSET                                     *
 *      - default value for specificformat : "t"               *
 *   - cmp                                                     *
 *      - specificformat expressed as "[=0e]{0,1}"             *
 *         '=' : <  =  >                                       *
 *         '0' : -  0  +                                       *
 *         'e' : lt eq gt                                      *
 *      - default value for specificformat : "="               *
 *   - c(char), s(char*), p(void*)                             *
 *      no specificformat                                      *
 *   - buf(netwib_buf*)                                        *
 *      no specificformat                                      *
 *   - eth(netwib_eth*), ip(netwib_ip*), port(netwib_port)     *
 *      no specificformat                                      *
 *   - eths(netwib_eths*), ips(netwib_ips*),                   *
 *     ports(netwib_ports*)                                    *
 *      no specificformat                                      *
 * examples :                                                  *
 *     %{uint32} : decimal                                     *
 *     %{int32} : decimal                                      *
 *     %{uint32:b} : binary                                    *
 *     %{uint32:o} : octal                                     *
 *     %{uint32:x} : hexadecimal                               *
 *     %{uint32:08X} : hexadecimal                             *
 *     %{c_20;uint32} : decimal centered in a 20 bytes block   *
 *                      padded with _                          *
 ***************************************************************/
netwib_err netwib_buf_append_fmt(netwib_buf *pbuf,
                                 netwib_conststring fmt,
                                 ...);

/*-------------------------------------------------------------*/
/* Name : netwib_buf_decode_fmt
   Description :
     Decode data from a buf.
   Input parameter(s) :
     *pbuf : netwib_buf
     fmt : format as explained above
   Input/output parameter(s) :
   Output parameter(s) :
     *pnumset : number of items set (decoded)
   Normal return values :
     NETWIB_ERR_OK : ok
     NETWIB_ERR_NOTCONVERTED : not decoded
   This function supports NETWIB_BUF_FLAGS_SENSITIVE.
*/
/***************************************************************
 * Netwib provides a kind of sscanf format. It is not          *
 * compatible with standard sscanf, but it corresponds to      *
 * netwib usage.                                               *
 *   %% : %                                                    *
 *   %c : char                                                 *
 *   %s : string                                               *
 *   %p : pointer                                              *
 *   %$ : end of string (if present, must be last)             *
 *   %{type} : special type                                    *
 *   %{generalformat;type:specificformat} : special type with  *
 *                                          a format           *
 *   %{generalformat;type} : special type with a format        *
 *   %{type:specificformat} : special type with a format       *
 * generalformat :                                             *
 *   - expressed as a regexp : "[*]{0,1}[lcr].[1-9][0-9]{0,1}" *
 *     or "[*]{0,1}"                                           *
 *       '*'   : suppresses assignment (skip field)            *
 *       'lcr' : left, center, right                           *
 *       '.'   : padding character                             *
 *       '0-9' : minimum size                                  *
 *   - default value : "l 0"                                   *
 * type :                                                      *
 *   They have the same meaning as for netwib_buf_append_fmt,  *
 *   but are always pointers :                                 *
 *   - uint32 : netwib_uint32*                                 *
 *   - uint16 : netwib_uint16*                                 *
 *   - uint8  : netwib_uint8*                                  *
 *   - uintmax: netwib_uintmax*                                *
 *   - uintptr: netwib_uintptr*                                *
 *   - uint64 : netwib_uint64*                                 *
 *   - byte   : netwib_byte*                                   *
 *   - bool   : netwib_bool*                                   *
 *   - int32  : netwib_int32*                                  *
 *   - int16  : netwib_int16*                                  *
 *   - int8   : netwib_int8*                                   *
 *   - cmp    : netwib_cmp*                                    *
 *   - c      : char*                                          *
 *   - s      : char[] (must be big enough : use buf instead)  *
 *   - p      : netwib_ptr* (or void**)                        *
 *   - buf    : netwib_buf*                                    *
 *   - eth    : netwib_eth*                                    *
 *   - ip     : netwib_ip*                                     *
 *   - port   : netwib_port*                                   *
 *   - eths   : netwib_eths*                                   *
 *   - ips    : netwib_ips*                                    *
 *   - ports  : netwib_ports*                                  *
 * specificformat :                                            *
 *   For "s" and "buf", the default behavior is to stop when a *
 *   space is encountered. By using "glob" as specificformat,  *
 *   every char is stored in the buffer (including leading and *
 *   ending spaces).                                           *
 ***************************************************************/
netwib_err netwib_buf_decode_fmt(netwib_constbuf *pbuf,
                                 netwib_conststring fmt,
                                 ...);




main index

section index