• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /***************************************************************************
2   *                                  _   _ ____  _
3   *  Project                     ___| | | |  _ \| |
4   *                             / __| | | | |_) | |
5   *                            | (__| |_| |  _ <| |___
6   *                             \___|\___/|_| \_\_____|
7   *
8   * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@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  
internalSetEnv(const char * name,char * value)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  
ourWriteEnv(CURL * curl)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