Loading...
Searching...
No Matches
General Purpose Library Routines
Apache Portability Runtime library
Collaboration diagram for General Purpose Library Routines:

## Data Structures

struct | apr_vformatter_buff_t

## Macros

#define | HUGE_STRING_LEN 8192
#define | apr_killpg(x, y) (killpg ((x), (y)))

## Typedefs

typedef struct apr_vformatter_buff_t | apr_vformatter_buff_t

## Functions

const char * | apr_filepath_name_get (const char *pathname)
int | apr_vformatter (int(*flush_func)(apr_vformatter_buff_t *b), apr_vformatter_buff_t *c, const char *fmt, va_list ap)
apr_status_t | apr_password_get (const char *prompt, char *pwbuf, apr_size_t *bufsize)

## Detailed Description

This is collection of oddballs that didn't fit anywhere else, and might move to more appropriate headers with the release of APR 1.0.

## Macro Definition Documentation

## apr_killpg

#define apr_killpg | ( |  | x,
|  |  | y
| ) |  | (killpg ((x), (y)))

apr_killpg Small utility macros to make things easier to read. Not usually a goal, to be sure..

## HUGE_STRING_LEN

#define HUGE_STRING_LEN 8192

A constant representing a 'large' string.

## Typedef Documentation

## apr_vformatter_buff_t

typedef struct apr_vformatter_buff_t apr_vformatter_buff_t

See also
  apr_vformatter_buff_t

## Function Documentation

## apr_filepath_name_get()

const char * apr_filepath_name_get | ( | const char * | pathname | ) |

return the final element of the pathname

Parameters

  pathname | The path to get the final element of

Returns
  the final element of the path

Remarks

      For example:
                      "/foo/bar/gum"    -> "gum"
                      "/foo/bar/gum/"   -> ""
                      "gum"             -> "gum"
                      "bs\\path\\stuff" -> "stuff"

## apr_password_get()

apr_status_t apr_password_get | ( | const char * | prompt,
|  | char * | pwbuf,
|  | apr_size_t * | bufsize
| ) |  |

Display a prompt and read in the password from stdin.

Parameters

  prompt | The prompt to display
  pwbuf | Buffer to store the password
  bufsize | The length of the password buffer.

Remarks
  If the password entered must be truncated to fit in the provided buffer, APR_ENAMETOOLONG will be returned. Note that the bufsize paramater is passed by reference for no reason; its value will never be modified by the apr_password_get() function.

## apr_vformatter()

int apr_vformatter | ( | int(*)(apr_vformatter_buff_t *b) | flush_func,
|  | apr_vformatter_buff_t * | c,
|  | const char * | fmt,
|  | va_list | ap
| ) |  |

apr_vformatter() is a generic printf-style formatting routine with some extensions.

Parameters

  flush_func | The function to call when the buffer is full
  c | The buffer to write to
  fmt | The format string
  ap | The arguments to use to fill out the format string.

Remarks

      The extensions are:

      - %pA takes a struct in_addr *, and prints it as a.b.c.d
      - %pI takes an apr_sockaddr_t * and prints it as a.b.c.d:port or
      \[ipv6-address\]:port
      - %pT takes an apr_os_thread_t * and prints it in decimal
      ('0' is printed if !APR_HAS_THREADS)
      - %pt takes an apr_os_thread_t * and prints it in hexadecimal
      ('0' is printed if !APR_HAS_THREADS)
      - %pm takes an apr_status_t * and prints the appropriate error
      string (from apr_strerror) corresponding to that error code.
      - %pp takes a void * and outputs it in hex
      - %pB takes a apr_uint32_t * as bytes and outputs it's apr_strfsize
      - %pF same as above, but takes a apr_off_t *
      - %pS same as above, but takes a apr_size_t *

      %pA, %pI, %pT, %pp are available from APR 1.0.0 onwards (and in 0.9.x).
      %pt is only available from APR 1.2.0 onwards.
      %pm, %pB, %pF and %pS are only available from APR 1.3.0 onwards.

      The %p hacks are to force gcc's printf warning code to skip
      over a pointer argument without complaining.  This does
      mean that the ANSI-style %p (output a void * in hex format) won't
      work as expected at all, but that seems to be a fair trade-off
      for the increased robustness of having printf-warnings work.

      Additionally, apr_vformatter allows for arbitrary output methods
      using the apr_vformatter_buff and flush_func.

      The apr_vformatter_buff has two elements curpos and endpos.
      curpos is where apr_vformatter will write the next byte of output.
      It proceeds writing output to curpos, and updating curpos, until
      either the end of output is reached, or curpos == endpos (i.e. the
      buffer is full).

      If the end of output is reached, apr_vformatter returns the
      number of bytes written.

      When the buffer is full, the flush_func is called.  The flush_func
      can return -1 to indicate that no further output should be attempted,
      and apr_vformatter will return immediately with -1.  Otherwise
      the flush_func should flush the buffer in whatever manner is
      appropriate, re apr_pool_t nitialize curpos and endpos, and return 0.

      Note that flush_func is only invoked as a result of attempting to
      write another byte at curpos when curpos >= endpos.  So for
      example, it's possible when the output exactly matches the buffer
      space available that curpos == endpos will be true when
      apr_vformatter returns.

      apr_vformatter does not call out to any other code, it is entirely
      self-contained.  This allows the callers to do things which are
      otherwise "unsafe".  For example, apr_psprintf uses the "scratch"
      space at the unallocated end of a block, and doesn't actually
      complete the allocation until apr_vformatter returns.  apr_psprintf
      would be completely broken if apr_vformatter were to call anything
      that used this same pool.  Similarly http_bprintf() uses the "scratch"
      space at the end of its output buffer, and doesn't actually note
      that the space is in use until it either has to flush the buffer
      or until apr_vformatter returns.