]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/strutl.cc
Small linker changes
[apt.git] / apt-pkg / contrib / strutl.cc
index 5efa6f60bdf26202cc470e436849c8d3caa14947..a05359f825914d3c0cf0a9986c0fd403ea3a9978 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: strutl.cc,v 1.11 1998/11/01 08:07:12 jgg Exp $
+// $Id: strutl.cc,v 1.16 1998/12/31 05:45:26 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   /*{{{*/
@@ -186,7 +189,7 @@ string QuoteString(string Str,const char *Bad)
          *I <= 0x20 || *I >= 0x7F)
       {
         char Buf[10];
-        sprintf(Buf,"%%%02x",(int)*I);
+        sprintf(Buf,"%%%02x",(unsigned int)((unsigned char)*I));
         Res += Buf;
       }
       else
@@ -620,23 +623,14 @@ void URI::CopyFrom(string U)
    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 < U.end() && 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());
@@ -646,7 +640,10 @@ void URI::CopyFrom(string U)
       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;
    
@@ -695,6 +692,7 @@ URI::operator string()
    string Res = Access + ':';
    if (Host.empty() == false)
    {
+      Res += "//";
       if (User.empty() == false)
       {
         Res += "//" + User;
@@ -703,10 +701,21 @@ URI::operator string()
         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;
 }