diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-06 03:01:46 +0000 |
commit | f8fe689a81f906d1b91bb3220acde2a4ecb14c5b (patch) | |
tree | 26484e9d7e2c67806c2d1760196ff01aaa858e8c /src/VBox/GuestHost/OpenGL/util/url.c | |
parent | Initial commit. (diff) | |
download | virtualbox-upstream.tar.xz virtualbox-upstream.zip |
Adding upstream version 6.0.4-dfsg.upstream/6.0.4-dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/util/url.c')
-rw-r--r-- | src/VBox/GuestHost/OpenGL/util/url.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/VBox/GuestHost/OpenGL/util/url.c b/src/VBox/GuestHost/OpenGL/util/url.c new file mode 100644 index 00000000..cb5cc3da --- /dev/null +++ b/src/VBox/GuestHost/OpenGL/util/url.c @@ -0,0 +1,94 @@ +/* Copyright (c) 2001, Stanford University + * All rights reserved + * + * See the file LICENSE.txt for information on redistributing this software. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> + +#include "cr_string.h" +#include "cr_url.h" +#include "cr_error.h" + +static int is_digit_string( const char *s ) +{ + if (!isdigit( (int) *s)) + { + return 0; + } + + while (*s && isdigit ( (int) *s)) + { + s++; + } + + return ( *s == 0 ); +} + +int crParseURL( const char *url, char *protocol, char *hostname, + unsigned short *port, unsigned short default_port ) +{ + const char *temp, *temp2; + + /* pull off the protocol */ + temp = crStrstr( url, "://" ); + if ( temp == NULL && protocol != NULL ) + { + crStrcpy( protocol, "tcpip" ); + temp = url; + } + else + { + if (protocol != NULL) { + int len = temp - url; + crStrncpy( protocol, url, len ); + protocol[len] = 0; + } + temp += 3; + } + + /* handle a trailing :<digits> to specify the port */ + + /* there might be a filename here */ + temp2 = crStrrchr( temp, '/' ); + if ( temp2 == NULL ) + { + temp2 = crStrrchr( temp, '\\' ); + } + if ( temp2 == NULL ) + { + temp2 = temp; + } + + temp2 = crStrrchr( temp2, ':' ); + if ( temp2 ) + { + if (hostname != NULL) { + int len = temp2 - temp; + crStrncpy( hostname, temp, len ); + hostname[len] = 0; + } + temp2++; + if ( !is_digit_string( temp2 ) ) + goto bad_url; + + if (port != NULL) + *port = (unsigned short) atoi( temp2 ); + } + else + { + if (hostname != NULL) + crStrcpy( hostname, temp ); + if (port != NULL) + *port = default_port; + } + + return 1; + + bad_url: + crWarning( "URL: expected <protocol>://" + "<destination>[:<port>], what is \"%s\"?", url ); + return 0; +} |