Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KXML_PUSH(3)		     Library Functions Manual		    KXML_PUSH(3)

NAME
     kxml_push, kxml_pushattrs -- open an element scope for kcgixml

LIBRARY
     libkcgixml

SYNOPSIS
     #include <sys/types.h>
     #include <stdarg.h>
     #include <stdint.h>
     #include <kcgi.h>
     #include <kcgixml.h>

     enum kcgi_err
     kxml_push(struct kxmlreq *req, size_t elem);

     enum kcgi_err
     kxml_pushattrs(struct kxmlreq *req, size_t elem, ...);

DESCRIPTION
     Open a new scope of element index elem on the current element stack of req,
     initialised  with	kxml_open(3).	The element must be in the element array
     passed  to  kxml_open(3).	  Scopes   are	 closed   with	 kxml_popall(3),
     kxml_pop(3).  or kxml_close(3).

     The  kxml_pushattrs() form accepts pairs of character string arguments, the
     first being an attribute name, the second its value.   This  list	must  be
     terminated  by  a NULL pointer.  Attribute names are left as-is: the caller
     must make sure that keys are valid XML.  Attribute values are  XML  escaped
     to prevent content from breaking out of the attribute string.

RETURN VALUES
     Returns an enum kcgi_err indicating the error state.

     KCGI_OK
	  Success (not an error).

     KCGI_ENOMEM
	  Internal  memory  allocation	failure,  including reaching the maximum
	  number of possible JSON scopes.

     KCGI_HUP
	  The output connection has been terminated.  For  FastCGI  connections,
	  the current connection should be released with khttp_free(3) and parse
	  loop reentered.

     KCGI_FORM
	  The  connection  is still expecting headers with khttp_head(3).  Indi-
	  cates that khttp_body(3) did not return with success or  was	not  in-
	  voked.   For FastCGI connections, the current connection should be re-
	  leased with khttp_free(3) and parse loop reentered.

     KCGI_SYSTEM
	  Internal system error writing to the output stream.

     KCGI_WRITER
	  The elem is not a valid element index.

EXAMPLES
     The following outputs a simple XML page.  It assumes r  is  a  struct  kreq
     pointer.  For brevity, it does not do any error checking.

	   const char *const elems[] =
	     { "foo", "bar", "baz" };
	   khttp_head(r, kresps[KRESP_STATUS],
	     "%s", khttps[KHTTP_200]);
	   khttp_head(r, kresps[KRESP_CONTENT_TYPE],
	     "%s", kmimetypes[KMIME_TEXT_XML]);
	   khttp_body(r);
	   kxml_open(&req, r, elems, 3);
	   kxml_push(&req, 0); /* foo */
	   kxml_puts(&req, "Hello, world");
	   kxml_pop(&req);
	   kxml_pushattrs(&req, 1, "baz", "xyzzy", NULL); /* bar */
	   kxml_puts(&req, "Hello, world");
	   kxml_pop(&req);
	   kxml_close(&req);

SEE ALSO
     kcgixml(3)

AUTHORS
     Written by Kristaps Dzonsons <kristaps@bsd.lv>.

FreeBSD ports 15.quarterly	   $Mdocdate$			    KXML_PUSH(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kxml_push&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help