# url.c File Reference

`#include "system.h"`
`#include <netinet/in.h>`
`#include <rpmmacro.h>`
`#include <rpmmessages.h>`
`#include <rpmio_internal.h>`
`#include "debug.h"`

Go to the source code of this file.

## Defines

#define | IPPORT_FTP 21
#define | IPPORT_HTTP 80
#define | URLDBG(_f, _m, _x) if ((_url_debug | (_f)) & (_m)) fprintf _x
#define | URLDBGIO(_f, _x) URLDBG((_f), RPMURL_DEBUG_IO, _x)
#define | URLDBGREFS(_f, _x) URLDBG((_f), RPMURL_DEBUG_REFS, _x)

## Functions

static void * | _free (const void *p)
| Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
urlinfo | XurlLink (urlinfo u, const char *msg, const char *file, unsigned line)
urlinfo | XurlNew (const char *msg, const char *file, unsigned line)
urlinfo | XurlFree (urlinfo u, const char *msg, const char *file, unsigned line)
void | urlFreeCache (void)
| Free cached URL control structures.
static int | urlStrcmp (const char *str1, const char *str2)
static void | urlFind (urlinfo *uret, int mustAsk)
urltype | urlIsURL (const char *url)
| Return type of URL.
urltype | urlPath (const char *url, const char **pathp)
| Return path component of URL.
int | urlSplit (const char *url, urlinfo *uret)
| Parse URL string into a control structure.
int | urlGetFile (const char *url, const char *dest)
| Copy data from URL to local file.

## Variables

int | _url_iobuf_size = RPMURL_IOBUF_SIZE
int | _url_debug = 0
urlinfo * | _url_cache = NULL
int | _url_count = 0
static struct urlstring | urlstrings []

## Detailed Description

Definition in file url.c.

## Define Documentation

#define IPPORT_FTP 21

| Definition at line 20 of file url.c.

#define IPPORT_HTTP 80

| Definition at line 23 of file url.c.

#define URLDBG | ( | _f,
|  | _m,
|  | _x |  | ) | if ((_url_debug | (_f)) & (_m)) fprintf _x

| Definition at line 36 of file url.c.

#define URLDBGIO | ( | _f,
|  | _x |  | ) | URLDBG((_f), RPMURL_DEBUG_IO, _x)

| Definition at line 38 of file url.c.

#define URLDBGREFS | ( | _f,
|  | _x |  | ) | URLDBG((_f), RPMURL_DEBUG_REFS, _x)

| Definition at line 39 of file url.c. Referenced by XurlFree(), and XurlLink().

## Function Documentation

static void* _free | ( | const void * | p | ) | `[inline, static]`

Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.

Parameters:

  | p | memory to free

Return values:

  | NULL | always

Definition at line 58 of file url.c.

static void urlFind | ( | urlinfo * | uret,
|  | int | mustAsk
| ) | `[static]`

Definition at line 190 of file url.c.

References _, _free(), _url_cache, _url_count, alloca(), urlinfo_s::host, urlinfo_s::password, urlinfo_s::portstr, urlinfo_s::proxyh, urlinfo_s::proxyp, urlinfo_s::proxyu, rpmExpand(), urlinfo_s::service, stpcpy(), URL_IS_FTP, URL_IS_HTTP, urlFree, urlLink, URLSANE, urlStrcmp(), urlinfo_s::urltype, urlinfo_s::user, xmalloc(), xrealloc(), and xstrdup().

Referenced by urlSplit().

void urlFreeCache | ( | void |  | ) |

| Free cached URL control structures. Definition at line 158 of file url.c. References _, _free(), _url_cache, _url_count, and urlFree. Referenced by main().

int urlGetFile | ( | const char * | url,
|  | const char * | dest
| ) |

Copy data from URL to local file.

Parameters:

  | url | url string of source
  | dest | file name of destination

Returns:
  0 on success, otherwise FTPERR_* code

Definition at line 496 of file url.c.

References _, _url_debug, Fclose(), Ferror(), Fopen(), Fstrerror(), FTPERR_UNKNOWN, RPMMESS_DEBUG, rpmMessage, ufdGetFile(), Unlink(), URL_IS_DASH, URL_IS_FTP, URL_IS_HTTP, URL_IS_PATH, URL_IS_UNKNOWN, and urlPath().

Referenced by doUntar(), and rpmInstall().

urltype urlIsURL | ( | const char * | url | ) |

Return type of URL.

Parameters:

  | url | url string

Returns:
  type of url

Definition at line 344 of file url.c.

References urlstring::leadin, urlstring::ret, URL_IS_UNKNOWN, and urlstrings.

Referenced by Fopen(), main(), rpmInstall(), runScript(), urlPath(), urlSplit(), and urlStrerror().

urltype urlPath | ( | const char * | url,
|  | const char ** | pathp
| ) |

Return path component of URL.

Parameters:

  | url | url string

Return values:

  | pathp | pointer to path component of url

Returns:
  type of url

Definition at line 360 of file url.c.

References URL_IS_DASH, URL_IS_FTP, URL_IS_HTTP, URL_IS_PATH, URL_IS_UNKNOWN, and urlIsURL().

Referenced by Access(), addFile(), buildForTarget(), Chdir(), chkdir(), db1close(), db1open(), db3close(), db3open(), doFoo(), doPatch(), doScript(), doSetupMacro(), doUntar(), ftpCmd(), ftpNLST(), genCpioListAndHeader(), Glob(), handlePreambleTag(), Link(), Lstat(), makeTempFile(), Mkdir(), myGlobPatternP(), Opendir(), parseSpec(), processBinaryFile(), processSourceFiles(), psmStage(), Readlink(), Rename(), Rmdir(), rpmGenPath(), rpmGlob(), rpmInstall(), rpmioFileExists(), Stat(), ufdOpen(), Unlink(), and urlGetFile().

int urlSplit | ( | const char * | url,
|  | urlinfo * | uret
| ) |

Parse URL string into a control structure.

Parameters:

  | url | url string

Return values:

  | uret | address of new control instance pointer

Returns:
  0 on success, -1 on error

Definition at line 400 of file url.c.

References _, _free(), urlinfo_s::host, IPPORT_FTP, IPPORT_HTTP, urlinfo_s::password, urlinfo_s::port, urlinfo_s::portstr, RPMMESS_ERROR, rpmMessage, urlinfo_s::service, urlinfo_s::url, URL_IS_FTP, URL_IS_HTTP, urlFind(), urlFree, urlIsURL(), urlNew, urlinfo_s::urltype, urlinfo_s::user, and xstrdup().

Referenced by doScript(), httpOpen(), urlConnect(), and urlStrerror().

static int urlStrcmp | ( | const char * | str1,
|  | const char * | str2
| ) | `[static]`

| Definition at line 177 of file url.c. Referenced by urlFind().

urlinfo XurlFree | ( | urlinfo | u,
|  | const char * | msg,
|  | const char * | file,
|  | unsigned | line
| ) |

Todo:
  Remove debugging entry from the ABI.

Definition at line 94 of file url.c.

References _, FDIO_s::_fdderef, FDIO_s::_fileno, _free(), urlinfo_s::buf, FDIO_s::close, urlinfo_s::ctrl, urlinfo_s::data, Fclose(), fdGetFp(), fdio, fdPush(), fpio, urlinfo_s::host, urlinfo_s::nrefs, urlinfo_s::password, urlinfo_s::portstr, urlinfo_s::proxyh, urlinfo_s::proxyu, urlinfo_s::service, urlinfo_s::url, URLDBGREFS, URLSANE, and urlinfo_s::user.

urlinfo XurlLink | ( | urlinfo | u,
|  | const char * | msg,
|  | const char * | file,
|  | unsigned | line
| ) |

Todo:
  Remove debugging entry from the ABI.

Definition at line 64 of file url.c.

References urlinfo_s::nrefs, URLDBGREFS, and URLSANE.

Referenced by XurlNew().

urlinfo XurlNew | ( | const char * | msg,
|  | const char * | file,
|  | unsigned | line
| ) |

Todo:
  Remove debugging entry from the ABI.

Definition at line 74 of file url.c.

References urlinfo_s::buf, urlinfo_s::bufAlloced, urlinfo_s::ctrl, urlinfo_s::data, urlinfo_s::httpHasRange, urlinfo_s::httpVersion, urlinfo_s::magic, urlinfo_s::nrefs, urlinfo_s::port, urlinfo_s::proxyp, URL_IS_UNKNOWN, URLMAGIC, urlinfo_s::urltype, xmalloc(), and XurlLink().

## Variable Documentation

urlinfo* _url_cache = NULL

| URL cache. Definition at line 45 of file url.c. Referenced by urlFind(), and urlFreeCache().

int _url_count = 0

| No. of cached URL's. Definition at line 50 of file url.c. Referenced by urlFind(), and urlFreeCache().

int _url_debug = 0

| URL debugging? Definition at line 34 of file url.c.

int _url_iobuf_size = RPMURL_IOBUF_SIZE

| Initial size of URL I/O buffer. Definition at line 29 of file url.c. Referenced by checkResponse(), and ftpNLST().

struct urlstring urlstrings[]`[static]`

| Referenced by urlIsURL().