// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: strutl.cc,v 1.9 1998/10/30 07:53:45 jgg Exp $
+// $Id: strutl.cc,v 1.15 1998/12/04 21:16:50 jgg Exp $
/* ######################################################################
String Util - Some usefull string functions.
##################################################################### */
/*}}}*/
// Includes /*{{{*/
+#ifdef __GNUG__
+#pragma implementation "strutl.h"
+#endif
+
#include <strutl.h>
#include <apt-pkg/fileutl.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>
-#include <time.h>
/*}}}*/
// strstrip - Remove white space from the front and back of a string /*{{{*/
}
/*}}}*/
-// URI::URI - Constructor /*{{{*/
+// URI::CopyFrom - Copy from an object /*{{{*/
// ---------------------------------------------------------------------
/* This parses the URI into all of its components */
-URI::URI(string U)
+void URI::CopyFrom(string U)
{
string::const_iterator I = U.begin();
for (; I < U.end() && *I != ':' ; I++);
string::const_iterator FirstColon = I;
- // Determine if this is a host type URI with a leading double //
+ /* Determine if this is a host type URI with a leading double //
+ and then search for the first single / */
string::const_iterator SingleSlash = I;
if (I + 3 < U.end() && I[1] == '/' && I[2] == '/')
- {
- // Locate the single / that starts the path
- for (; I < U.end(); I++)
- {
- if (*I == '/' && I[1] == '/')
- I += 2;
- else
- if (*I == '/')
- break;
- }
- if (I > U.end())
- I = U.end();
- SingleSlash = I;
- }
+ SingleSlash += 3;
+ for (; SingleSlash < U.end() && *SingleSlash != '/'; SingleSlash++);
+ if (SingleSlash > U.end())
+ SingleSlash = U.end();
// We can now write the access and path specifiers
Access = string(U,0,FirstColon - U.begin());
if (SingleSlash != U.end())
- Path = string(U,SingleSlash - U.begin() + 1);
-
+ Path = string(U,SingleSlash - U.begin());
+ if (Path.empty() == true)
+ Path = "/";
+
// Now we attempt to locate a user:pass@host fragment
- FirstColon += 3;
+ if (FirstColon[1] == '/' && FirstColon[2] == '/')
+ FirstColon += 3;
+ else
+ FirstColon += 1;
if (FirstColon >= U.end())
return;
string Res = Access + ':';
if (Host.empty() == false)
{
+ Res += "//";
if (User.empty() == false)
{
Res += "//" + User;
Res += "@";
}
Res += Host;
+ if (Port != 0)
+ {
+ char S[30];
+ sprintf(S,":%u",Port);
+ Res += S;
+ }
}
if (Path.empty() == false)
- Res += "/" + Path;
+ {
+ if (Path[0] != '/')
+ Res += "/" + Path;
+ else
+ Res += Path;
+ }
return Res;
}