]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/strutl.cc
fix partial (206 and 416) support in https
[apt.git] / apt-pkg / contrib / strutl.cc
index f4dd3407d32dc01fa58197409279a841d60e4439..0955b69f79a67f538e1af0f59359f543cc3f5bb5 100644 (file)
@@ -758,7 +758,8 @@ bool ReadMessages(int Fd, vector<string> &List)
       // Look for the end of the message
       for (char *I = Buffer; I + 1 < End; I++)
       {
-        if (I[0] != '\n' || I[1] != '\n')
+        if (I[1] != '\n' ||
+              (I[0] != '\n' && strncmp(I, "\r\n\r\n", 4) != 0))
            continue;
         
         // Pull the message out
@@ -766,7 +767,7 @@ bool ReadMessages(int Fd, vector<string> &List)
         PartialMessage += Message;
 
         // Fix up the buffer
-        for (; I < End && *I == '\n'; I++);
+        for (; I < End && (*I == '\n' || *I == '\r'); ++I);
         End -= I-Buffer;        
         memmove(Buffer,I,End-Buffer);
         I = Buffer;
@@ -942,6 +943,8 @@ bool StrToTime(const string &Val,time_t &Result)
    Tm.tm_isdst = 0;
    if (Month[0] != 0)
       Tm.tm_mon = MonthConv(Month);
+   else
+      Tm.tm_mon = 0; // we don't have a month, so pick something
    Tm.tm_year -= 1900;
    
    // Convert to local time and then to GMT
@@ -1232,12 +1235,12 @@ char *safe_snprintf(char *Buffer,char *End,const char *Format,...)
    va_list args;
    int Did;
 
-   va_start(args,Format);
-
    if (End <= Buffer)
       return End;
-
+   va_start(args,Format);
    Did = vsnprintf(Buffer,End - Buffer,Format,args);
+   va_end(args);
+
    if (Did < 0 || Buffer + Did > End)
       return End;
    return Buffer + Did;
@@ -1290,6 +1293,18 @@ bool CheckDomainList(const string &Host,const string &List)
    return false;
 }
                                                                        /*}}}*/
+// strv_length - Return the length of a NULL-terminated string array   /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+size_t strv_length(const char **str_array)
+{
+   size_t i;
+   for (i=0; str_array[i] != NULL; i++)
+      /* nothing */
+      ;
+   return i;
+}
+
 // DeEscapeString - unescape (\0XX and \xXX) from a string             /*{{{*/
 // ---------------------------------------------------------------------
 /* */