getcgi() - get CGI variable


#include "cgi.h"

char  **getcgi(cp, name, which)
CGI    *cp;
char   *name;
int     which;

The getcgi() function looks for a CGI variable with the name pointed to by name, and returns its value(s). If no such CGI variable is set, CHARPPN is returned. Since there may be more than one value to the variable (e.g. for a multiple-select form variable), a ""-terminated string list is returned. The list is associated with the CGI object and will be freed when the object is closed. All returned values are decoded from whatever their source is (i.e. URL vars are URL-decoded).

The which parameter indicates which of the CGI variable lists to search. It is a bitwise-OR combination of any the following flags:

  • CGI_PUT for state variables set with putcgi() during this invocation

  • CGI_PREVPUT for state variables set from previous invocations

  • CGI_COOKIE for cookie variables

  • CGI_ENV for environment variables

  • CGI_URL for variables encoded in the URL

  • CGI_CONTENT for variables encoded via the POST method (i.e. content variables from a form)

In addition, there are some shorthand flags:

  • CGI_STATE for any state variable (equivalent to CGI_PUT|CGI_PREVPUT)

  • CGI_ANY for any variable from any list

If a variable occurs in more than one of the specified lists (e.g. in the environment and URL), only the values in the first list in which the variable is found are returned. The lists are searched in the order given above, i.e. state variables first, then cookie, environment, URL, and content variables. Since state variables have the highest precedence, they will always be found before variables sent by the Web client; this ensures that state variables saved by the CGI program can't be "hidden" by client-sent variables.


#include "cgi.h"

CGI  *cp;


  char   **vals;

  vals = getcgi(cp, "PATH", CGI_ENV); /* check environment for PATH */
  if (vals != CHARPPN) printf("PATH is: %s\n", *vals);
  else printf("No PATH set in the environment\n");
  /* MAGIC might be a form variable sent via POST or GET methods */
  vals = getcgi(cp, "MAGIC", CGI_ANY);
  if (vals != CHARPPN) {
    printf("MAGIC is:");
    for ( ; **vals; vals++) printf(" %s", *vals);

The returned string list is not allocated to the caller, and should not be freed or modified; it is associated with the CGI object. The list may change after certain API calls that affect CGI variables (e.g. putcgi(), closecgi(), cgiprocenv()) and should be assumed invalid after such calls.

putcgi() cgivar()

Copyright © Thunderstone Software     Last updated: May 19 2023
Copyright © 2023 Thunderstone Software LLC. All rights reserved.