Home | History | Annotate | Download | only in src
      1 /***************************************************************************
      2  *                                  _   _ ____  _
      3  *  Project                     ___| | | |  _ \| |
      4  *                             / __| | | | |_) | |
      5  *                            | (__| |_| |  _ <| |___
      6  *                             \___|\___/|_| \_\_____|
      7  *
      8  * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel (at) haxx.se>, et al.
      9  *
     10  * This software is licensed as described in the file COPYING, which
     11  * you should have received as part of this distribution. The terms
     12  * are also available at http://curl.haxx.se/docs/copyright.html.
     13  *
     14  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
     15  * copies of the Software, and permit persons to whom the Software is
     16  * furnished to do so, under the terms of the COPYING file.
     17  *
     18  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     19  * KIND, either express or implied.
     20  *
     21  ***************************************************************************/
     22 #include "tool_setup.h"
     23 
     24 #ifdef USE_ENVIRONMENT
     25 
     26 #ifdef __riscos__
     27 #  include <kernel.h>
     28 #endif
     29 
     30 #include <curl/mprintf.h>
     31 #include "tool_writeenv.h"
     32 #include "memdebug.h" /* keep this as LAST include */
     33 
     34 static const struct
     35 {
     36   const char * name;
     37   CURLINFO id;
     38   enum {
     39     writeenv_NONE,
     40     writeenv_DOUBLE,
     41     writeenv_LONG,
     42     writeenv_STRING
     43   } type;
     44 } variables[14] =
     45 {
     46   {"curl_url_effective", CURLINFO_EFFECTIVE_URL, writeenv_STRING},
     47   {"curl_http_code", CURLINFO_RESPONSE_CODE, writeenv_LONG},
     48   {"curl_time_total", CURLINFO_TOTAL_TIME, writeenv_DOUBLE},
     49   {"curl_time_namelookup", CURLINFO_NAMELOOKUP_TIME, writeenv_DOUBLE},
     50   {"curl_time_connect", CURLINFO_CONNECT_TIME, writeenv_DOUBLE},
     51   {"curl_time_pretransfer", CURLINFO_PRETRANSFER_TIME, writeenv_DOUBLE},
     52   {"curl_time_starttransfer", CURLINFO_STARTTRANSFER_TIME, writeenv_DOUBLE},
     53   {"curl_size_header", CURLINFO_HEADER_SIZE, writeenv_LONG},
     54   {"curl_size_request", CURLINFO_REQUEST_SIZE, writeenv_LONG},
     55   {"curl_size_download", CURLINFO_SIZE_DOWNLOAD, writeenv_DOUBLE},
     56   {"curl_size_upload", CURLINFO_SIZE_UPLOAD, writeenv_DOUBLE},
     57   {"curl_speed_download", CURLINFO_SPEED_DOWNLOAD, writeenv_DOUBLE},
     58   {"curl_speed_upload", CURLINFO_SPEED_UPLOAD, writeenv_DOUBLE},
     59   {NULL, 0, writeenv_NONE}
     60  };
     61 
     62 static void internalSetEnv(const char * name, char * value)
     63 {
     64   /* Add your OS-specific code here. */
     65 #ifdef __riscos__
     66   _kernel_setenv(name, value);
     67 #elif defined (CURLDEBUG)
     68   curl_memlog("ENV %s = %s\n", name, value);
     69 #endif
     70   return;
     71 }
     72 
     73 void ourWriteEnv(CURL *curl)
     74 {
     75   unsigned int i;
     76   char *string, numtext[10];
     77   long longinfo;
     78   double doubleinfo;
     79 
     80   for(i=0; variables[i].name; i++) {
     81     switch (variables[i].type) {
     82     case writeenv_STRING:
     83       if(curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK)
     84         internalSetEnv(variables[i].name, string);
     85       else
     86         internalSetEnv(variables[i].name, NULL);
     87       break;
     88 
     89     case writeenv_LONG:
     90       if(curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) {
     91         curl_msprintf(numtext, "%5ld", longinfo);
     92         internalSetEnv(variables[i].name, numtext);
     93       }
     94       else
     95         internalSetEnv(variables[i].name, NULL);
     96       break;
     97     case writeenv_DOUBLE:
     98       if(curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) {
     99         curl_msprintf(numtext, "%6.2f", doubleinfo);
    100         internalSetEnv(variables[i].name, numtext);
    101       }
    102       else
    103         internalSetEnv(variables[i].name, NULL);
    104       break;
    105     default:
    106       break;
    107     }
    108   }
    109 
    110   return;
    111 }
    112 
    113 #endif
    114