diff options
author | raveit65 (via Travis CI) <[email protected]> | 2021-08-03 19:02:55 +0000 |
---|---|---|
committer | raveit65 (via Travis CI) <[email protected]> | 2021-08-03 19:02:55 +0000 |
commit | 21cfd42a561c5ace875257298a9ac04e5592f528 (patch) | |
tree | aa953a28852c3bd9685bace9047314025130d17e /2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2 | |
download | libmateweather-21cfd42a561c5ace875257298a9ac04e5592f528.tar.bz2 libmateweather-21cfd42a561c5ace875257298a9ac04e5592f528.tar.xz |
Deploy mate-desktop/libmateweather to github.com/mate-desktop/libmateweather.git:gh-pages
Diffstat (limited to '2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2')
12 files changed, 10258 insertions, 0 deletions
diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/0.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/0.html new file mode 100644 index 0000000..81a3ae3 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/0.html @@ -0,0 +1,1368 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/location-entry.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> location-entry.c</p> +<a href="0.html#line-303"> variableScope 303</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* location-entry.c - Location-selecting text entry</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * Copyright 2008, Red Hat, Inc.</span> +<a name="line-5"></a><span class="cm"> *</span> +<a name="line-6"></a><span class="cm"> * This library is free software; you can redistribute it and/or</span> +<a name="line-7"></a><span class="cm"> * modify it under the terms of the GNU Lesser General Public License</span> +<a name="line-8"></a><span class="cm"> * as published by the Free Software Foundation; either version 2.1 of</span> +<a name="line-9"></a><span class="cm"> * the License, or (at your option) any later version.</span> +<a name="line-10"></a><span class="cm"> *</span> +<a name="line-11"></a><span class="cm"> * This library is distributed in the hope that it will be useful, but</span> +<a name="line-12"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-13"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-14"></a><span class="cm"> * Lesser General Public License for more details.</span> +<a name="line-15"></a><span class="cm"> *</span> +<a name="line-16"></a><span class="cm"> * You should have received a copy of the GNU Lesser General Public</span> +<a name="line-17"></a><span class="cm"> * License along with this library; if not, see</span> +<a name="line-18"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-19"></a><span class="cm"> */</span> +<a name="line-20"></a> +<a name="line-21"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-22"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-23"></a><span class="cp">#endif</span> +<a name="line-24"></a> +<a name="line-25"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">"location-entry.h"</span><span class="cp"></span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-29"></a> +<a name="line-30"></a><span class="cm">/**</span> +<a name="line-31"></a><span class="cm"> * SECTION:location-entry</span> +<a name="line-32"></a><span class="cm"> * @Title: MateWeatherLocationEntry</span> +<a name="line-33"></a><span class="cm"> *</span> +<a name="line-34"></a><span class="cm"> * A subclass of #GtkEntry that provides autocompletion on</span> +<a name="line-35"></a><span class="cm"> * #MateWeatherLocation<!-- -->s</span> +<a name="line-36"></a><span class="cm"> */</span> +<a name="line-37"></a> +<a name="line-38"></a><span class="n">G_DEFINE_TYPE</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span><span class="p">,</span> <span class="n">mateweather_location_entry</span><span class="p">,</span> <span class="n">GTK_TYPE_ENTRY</span><span class="p">)</span> +<a name="line-39"></a> +<a name="line-40"></a><span class="k">enum</span> <span class="p">{</span> +<a name="line-41"></a> <span class="n">PROP_0</span><span class="p">,</span> +<a name="line-42"></a> +<a name="line-43"></a> <span class="n">PROP_TOP</span><span class="p">,</span> +<a name="line-44"></a> <span class="n">PROP_LOCATION</span><span class="p">,</span> +<a name="line-45"></a> +<a name="line-46"></a> <span class="n">LAST_PROP</span> +<a name="line-47"></a><span class="p">};</span> +<a name="line-48"></a> +<a name="line-49"></a><span class="k">static</span> <span class="kt">void</span> <span class="nf">mateweather_location_entry_build_model</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">,</span> +<a name="line-50"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">top</span><span class="p">);</span> +<a name="line-51"></a><span class="k">static</span> <span class="kt">void</span> <span class="nf">set_property</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">guint</span> <span class="n">prop_id</span><span class="p">,</span> +<a name="line-52"></a> <span class="k">const</span> <span class="n">GValue</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">GParamSpec</span> <span class="o">*</span><span class="n">pspec</span><span class="p">);</span> +<a name="line-53"></a><span class="k">static</span> <span class="kt">void</span> <span class="nf">get_property</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">guint</span> <span class="n">prop_id</span><span class="p">,</span> +<a name="line-54"></a> <span class="n">GValue</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">GParamSpec</span> <span class="o">*</span><span class="n">pspec</span><span class="p">);</span> +<a name="line-55"></a> +<a name="line-56"></a><span class="k">enum</span> +<a name="line-57"></a><span class="p">{</span> +<a name="line-58"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> +<a name="line-59"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> +<a name="line-60"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME</span><span class="p">,</span> +<a name="line-61"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_SORT_NAME</span><span class="p">,</span> +<a name="line-62"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_NUM_COLUMNS</span> +<a name="line-63"></a><span class="p">};</span> +<a name="line-64"></a> +<a name="line-65"></a><span class="k">static</span> <span class="n">gboolean</span> <span class="nf">matcher</span> <span class="p">(</span><span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">key</span><span class="p">,</span> +<a name="line-66"></a> <span class="n">GtkTreeIter</span> <span class="o">*</span><span class="n">iter</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">);</span> +<a name="line-67"></a><span class="k">static</span> <span class="n">gboolean</span> <span class="nf">match_selected</span> <span class="p">(</span><span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">,</span> +<a name="line-68"></a> <span class="n">GtkTreeModel</span> <span class="o">*</span><span class="n">model</span><span class="p">,</span> +<a name="line-69"></a> <span class="n">GtkTreeIter</span> <span class="o">*</span><span class="n">iter</span><span class="p">,</span> +<a name="line-70"></a> <span class="n">gpointer</span> <span class="n">entry</span><span class="p">);</span> +<a name="line-71"></a><span class="k">static</span> <span class="kt">void</span> <span class="nf">entry_changed</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">);</span> +<a name="line-72"></a> +<a name="line-73"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-74"></a><span class="nf">mateweather_location_entry_init</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">)</span> +<a name="line-75"></a><span class="p">{</span> +<a name="line-76"></a> <span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">;</span> +<a name="line-77"></a> +<a name="line-78"></a> <span class="n">completion</span> <span class="o">=</span> <span class="n">gtk_entry_completion_new</span> <span class="p">();</span> +<a name="line-79"></a> +<a name="line-80"></a> <span class="n">gtk_entry_completion_set_popup_set_width</span> <span class="p">(</span><span class="n">completion</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-81"></a> <span class="n">gtk_entry_completion_set_text_column</span> <span class="p">(</span><span class="n">completion</span><span class="p">,</span> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span><span class="p">);</span> +<a name="line-82"></a> <span class="n">gtk_entry_completion_set_match_func</span> <span class="p">(</span><span class="n">completion</span><span class="p">,</span> <span class="n">matcher</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-83"></a> +<a name="line-84"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">completion</span><span class="p">,</span> <span class="s">"match_selected"</span><span class="p">,</span> +<a name="line-85"></a> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">match_selected</span><span class="p">),</span> <span class="n">entry</span><span class="p">);</span> +<a name="line-86"></a> +<a name="line-87"></a> <span class="n">gtk_entry_set_completion</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="n">completion</span><span class="p">);</span> +<a name="line-88"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">completion</span><span class="p">);</span> +<a name="line-89"></a> +<a name="line-90"></a> <span class="n">entry</span><span class="o">-></span><span class="n">custom_text</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-91"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="s">"changed"</span><span class="p">,</span> +<a name="line-92"></a> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">entry_changed</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-93"></a><span class="p">}</span> +<a name="line-94"></a> +<a name="line-95"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-96"></a><span class="nf">finalize</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">)</span> +<a name="line-97"></a><span class="p">{</span> +<a name="line-98"></a> <span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span> <span class="o">=</span> <span class="n">MATEWEATHER_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">object</span><span class="p">);</span> +<a name="line-99"></a> +<a name="line-100"></a> <span class="k">if</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">)</span> +<a name="line-101"></a> <span class="n">mateweather_location_unref</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-102"></a> <span class="k">if</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">top</span><span class="p">)</span> +<a name="line-103"></a> <span class="n">mateweather_location_unref</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">top</span><span class="p">);</span> +<a name="line-104"></a> +<a name="line-105"></a> <span class="n">G_OBJECT_CLASS</span> <span class="p">(</span><span class="n">mateweather_location_entry_parent_class</span><span class="p">)</span><span class="o">-></span><span class="n">finalize</span> <span class="p">(</span><span class="n">object</span><span class="p">);</span> +<a name="line-106"></a><span class="p">}</span> +<a name="line-107"></a> +<a name="line-108"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-109"></a><span class="nf">mateweather_location_entry_class_init</span> <span class="p">(</span><span class="n">MateWeatherLocationEntryClass</span> <span class="o">*</span><span class="n">location_entry_class</span><span class="p">)</span> +<a name="line-110"></a><span class="p">{</span> +<a name="line-111"></a> <span class="n">GObjectClass</span> <span class="o">*</span><span class="n">object_class</span> <span class="o">=</span> <span class="n">G_OBJECT_CLASS</span> <span class="p">(</span><span class="n">location_entry_class</span><span class="p">);</span> +<a name="line-112"></a> +<a name="line-113"></a> <span class="n">object_class</span><span class="o">-></span><span class="n">finalize</span> <span class="o">=</span> <span class="n">finalize</span><span class="p">;</span> +<a name="line-114"></a> <span class="n">object_class</span><span class="o">-></span><span class="n">set_property</span> <span class="o">=</span> <span class="n">set_property</span><span class="p">;</span> +<a name="line-115"></a> <span class="n">object_class</span><span class="o">-></span><span class="n">get_property</span> <span class="o">=</span> <span class="n">get_property</span><span class="p">;</span> +<a name="line-116"></a> +<a name="line-117"></a> <span class="cm">/* properties */</span> +<a name="line-118"></a> <span class="n">g_object_class_install_property</span> <span class="p">(</span> +<a name="line-119"></a> <span class="n">object_class</span><span class="p">,</span> <span class="n">PROP_TOP</span><span class="p">,</span> +<a name="line-120"></a> <span class="n">g_param_spec_pointer</span> <span class="p">(</span><span class="s">"top"</span><span class="p">,</span> +<a name="line-121"></a> <span class="s">"Top Location"</span><span class="p">,</span> +<a name="line-122"></a> <span class="s">"The MateWeatherLocation whose children will be used to fill in the entry"</span><span class="p">,</span> +<a name="line-123"></a> <span class="n">G_PARAM_WRITABLE</span> <span class="o">|</span> <span class="n">G_PARAM_CONSTRUCT_ONLY</span><span class="p">));</span> +<a name="line-124"></a> <span class="n">g_object_class_install_property</span> <span class="p">(</span> +<a name="line-125"></a> <span class="n">object_class</span><span class="p">,</span> <span class="n">PROP_LOCATION</span><span class="p">,</span> +<a name="line-126"></a> <span class="n">g_param_spec_pointer</span> <span class="p">(</span><span class="s">"location"</span><span class="p">,</span> +<a name="line-127"></a> <span class="s">"Location"</span><span class="p">,</span> +<a name="line-128"></a> <span class="s">"The selected MateWeatherLocation"</span><span class="p">,</span> +<a name="line-129"></a> <span class="n">G_PARAM_READWRITE</span><span class="p">));</span> +<a name="line-130"></a><span class="p">}</span> +<a name="line-131"></a> +<a name="line-132"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-133"></a><span class="nf">set_property</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">guint</span> <span class="n">prop_id</span><span class="p">,</span> +<a name="line-134"></a> <span class="k">const</span> <span class="n">GValue</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">GParamSpec</span> <span class="o">*</span><span class="n">pspec</span><span class="p">)</span> +<a name="line-135"></a><span class="p">{</span> +<a name="line-136"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">prop_id</span><span class="p">)</span> <span class="p">{</span> +<a name="line-137"></a> <span class="k">case</span> <span class="nl">PROP_TOP</span><span class="p">:</span> +<a name="line-138"></a> <span class="n">mateweather_location_entry_build_model</span> <span class="p">(</span><span class="n">MATEWEATHER_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">object</span><span class="p">),</span> +<a name="line-139"></a> <span class="n">g_value_get_pointer</span> <span class="p">(</span><span class="n">value</span><span class="p">));</span> +<a name="line-140"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-141"></a> <span class="k">case</span> <span class="nl">PROP_LOCATION</span><span class="p">:</span> +<a name="line-142"></a> <span class="n">mateweather_location_entry_set_location</span> <span class="p">(</span><span class="n">MATEWEATHER_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">object</span><span class="p">),</span> +<a name="line-143"></a> <span class="n">g_value_get_pointer</span> <span class="p">(</span><span class="n">value</span><span class="p">));</span> +<a name="line-144"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-145"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-146"></a> <span class="n">G_OBJECT_WARN_INVALID_PROPERTY_ID</span> <span class="p">(</span><span class="n">object</span><span class="p">,</span> <span class="n">prop_id</span><span class="p">,</span> <span class="n">pspec</span><span class="p">);</span> +<a name="line-147"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-148"></a> <span class="p">}</span> +<a name="line-149"></a><span class="p">}</span> +<a name="line-150"></a> +<a name="line-151"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-152"></a><span class="nf">get_property</span> <span class="p">(</span><span class="n">GObject</span> <span class="o">*</span><span class="n">object</span><span class="p">,</span> <span class="n">guint</span> <span class="n">prop_id</span><span class="p">,</span> +<a name="line-153"></a> <span class="n">GValue</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">GParamSpec</span> <span class="o">*</span><span class="n">pspec</span><span class="p">)</span> +<a name="line-154"></a><span class="p">{</span> +<a name="line-155"></a> <span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span> <span class="o">=</span> <span class="n">MATEWEATHER_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">object</span><span class="p">);</span> +<a name="line-156"></a> +<a name="line-157"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">prop_id</span><span class="p">)</span> <span class="p">{</span> +<a name="line-158"></a> <span class="k">case</span> <span class="nl">PROP_LOCATION</span><span class="p">:</span> +<a name="line-159"></a> <span class="n">g_value_set_pointer</span> <span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-160"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-161"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-162"></a> <span class="n">G_OBJECT_WARN_INVALID_PROPERTY_ID</span> <span class="p">(</span><span class="n">object</span><span class="p">,</span> <span class="n">prop_id</span><span class="p">,</span> <span class="n">pspec</span><span class="p">);</span> +<a name="line-163"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-164"></a> <span class="p">}</span> +<a name="line-165"></a><span class="p">}</span> +<a name="line-166"></a> +<a name="line-167"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-168"></a><span class="nf">entry_changed</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">)</span> +<a name="line-169"></a><span class="p">{</span> +<a name="line-170"></a> <span class="n">entry</span><span class="o">-></span><span class="n">custom_text</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-171"></a><span class="p">}</span> +<a name="line-172"></a> +<a name="line-173"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-174"></a><span class="nf">set_location_internal</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">,</span> +<a name="line-175"></a> <span class="n">GtkTreeModel</span> <span class="o">*</span><span class="n">model</span><span class="p">,</span> +<a name="line-176"></a> <span class="n">GtkTreeIter</span> <span class="o">*</span><span class="n">iter</span><span class="p">)</span> +<a name="line-177"></a><span class="p">{</span> +<a name="line-178"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span> +<a name="line-179"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> +<a name="line-180"></a> +<a name="line-181"></a> <span class="k">if</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">)</span> +<a name="line-182"></a> <span class="n">mateweather_location_unref</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-183"></a> +<a name="line-184"></a> <span class="k">if</span> <span class="p">(</span><span class="n">iter</span><span class="p">)</span> <span class="p">{</span> +<a name="line-185"></a> <span class="n">gtk_tree_model_get</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">iter</span><span class="p">,</span> +<a name="line-186"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span><span class="p">,</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> +<a name="line-187"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="o">&</span><span class="n">loc</span><span class="p">,</span> +<a name="line-188"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-189"></a> <span class="n">entry</span><span class="o">-></span><span class="n">location</span> <span class="o">=</span> <span class="n">mateweather_location_ref</span> <span class="p">(</span><span class="n">loc</span><span class="p">);</span> +<a name="line-190"></a> <span class="n">gtk_entry_set_text</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="n">name</span><span class="p">);</span> +<a name="line-191"></a> <span class="n">entry</span><span class="o">-></span><span class="n">custom_text</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-192"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-193"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-194"></a> <span class="n">entry</span><span class="o">-></span><span class="n">location</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-195"></a> <span class="n">gtk_entry_set_text</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="s">""</span><span class="p">);</span> +<a name="line-196"></a> <span class="n">entry</span><span class="o">-></span><span class="n">custom_text</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-197"></a> <span class="p">}</span> +<a name="line-198"></a> +<a name="line-199"></a> <span class="n">gtk_editable_select_region</span> <span class="p">(</span><span class="n">GTK_EDITABLE</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-200"></a> <span class="n">g_object_notify</span> <span class="p">(</span><span class="n">G_OBJECT</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="s">"location"</span><span class="p">);</span> +<a name="line-201"></a><span class="p">}</span> +<a name="line-202"></a> +<a name="line-203"></a><span class="cm">/**</span> +<a name="line-204"></a><span class="cm"> * mateweather_location_entry_set_location:</span> +<a name="line-205"></a><span class="cm"> * @entry: a #MateWeatherLocationEntry</span> +<a name="line-206"></a><span class="cm"> * @loc: (allow-none): a #MateWeatherLocation in @entry, or %NULL to</span> +<a name="line-207"></a><span class="cm"> * clear @entry</span> +<a name="line-208"></a><span class="cm"> *</span> +<a name="line-209"></a><span class="cm"> * Sets @entry's location to @loc, and updates the text of the</span> +<a name="line-210"></a><span class="cm"> * entry accordingly.</span> +<a name="line-211"></a><span class="cm"> **/</span> +<a name="line-212"></a><span class="kt">void</span> +<a name="line-213"></a><span class="nf">mateweather_location_entry_set_location</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">,</span> +<a name="line-214"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">)</span> +<a name="line-215"></a><span class="p">{</span> +<a name="line-216"></a> <span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">;</span> +<a name="line-217"></a> <span class="n">GtkTreeModel</span> <span class="o">*</span><span class="n">model</span><span class="p">;</span> +<a name="line-218"></a> <span class="n">GtkTreeIter</span> <span class="n">iter</span><span class="p">;</span> +<a name="line-219"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">cmploc</span><span class="p">;</span> +<a name="line-220"></a> +<a name="line-221"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">MATEWEATHER_IS_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">));</span> +<a name="line-222"></a> +<a name="line-223"></a> <span class="n">completion</span> <span class="o">=</span> <span class="n">gtk_entry_get_completion</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">));</span> +<a name="line-224"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">gtk_entry_completion_get_model</span> <span class="p">(</span><span class="n">completion</span><span class="p">);</span> +<a name="line-225"></a> +<a name="line-226"></a> <span class="n">gtk_tree_model_get_iter_first</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">);</span> +<a name="line-227"></a> <span class="k">do</span> <span class="p">{</span> +<a name="line-228"></a> <span class="n">gtk_tree_model_get</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> +<a name="line-229"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="o">&</span><span class="n">cmploc</span><span class="p">,</span> +<a name="line-230"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-231"></a> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span> <span class="o">==</span> <span class="n">cmploc</span><span class="p">)</span> <span class="p">{</span> +<a name="line-232"></a> <span class="n">set_location_internal</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">);</span> +<a name="line-233"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-234"></a> <span class="p">}</span> +<a name="line-235"></a> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">gtk_tree_model_iter_next</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">));</span> +<a name="line-236"></a> +<a name="line-237"></a> <span class="n">set_location_internal</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-238"></a><span class="p">}</span> +<a name="line-239"></a> +<a name="line-240"></a><span class="cm">/**</span> +<a name="line-241"></a><span class="cm"> * mateweather_location_entry_get_location:</span> +<a name="line-242"></a><span class="cm"> * @entry: a #MateWeatherLocationEntry</span> +<a name="line-243"></a><span class="cm"> *</span> +<a name="line-244"></a><span class="cm"> * Gets the location that was set by a previous call to</span> +<a name="line-245"></a><span class="cm"> * mateweather_location_entry_set_location() or was selected by the user.</span> +<a name="line-246"></a><span class="cm"> *</span> +<a name="line-247"></a><span class="cm"> * Return value: (transfer full) (allow-none): the selected location</span> +<a name="line-248"></a><span class="cm"> * (which you must unref when you are done with it), or %NULL if no</span> +<a name="line-249"></a><span class="cm"> * location is selected.</span> +<a name="line-250"></a><span class="cm"> **/</span> +<a name="line-251"></a><span class="n">MateWeatherLocation</span> <span class="o">*</span> +<a name="line-252"></a><span class="nf">mateweather_location_entry_get_location</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">)</span> +<a name="line-253"></a><span class="p">{</span> +<a name="line-254"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">MATEWEATHER_IS_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-255"></a> +<a name="line-256"></a> <span class="k">if</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">)</span> +<a name="line-257"></a> <span class="k">return</span> <span class="n">mateweather_location_ref</span> <span class="p">(</span><span class="n">entry</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-258"></a> <span class="k">else</span> +<a name="line-259"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-260"></a><span class="p">}</span> +<a name="line-261"></a> +<a name="line-262"></a><span class="cm">/**</span> +<a name="line-263"></a><span class="cm"> * mateweather_location_entry_has_custom_text:</span> +<a name="line-264"></a><span class="cm"> * @entry: a #MateWeatherLocationEntry</span> +<a name="line-265"></a><span class="cm"> *</span> +<a name="line-266"></a><span class="cm"> * Checks whether or not @entry's text has been modified by the user.</span> +<a name="line-267"></a><span class="cm"> * Note that this does not mean that no location is associated with @entry.</span> +<a name="line-268"></a><span class="cm"> * mateweather_location_entry_get_location() should be used for this.</span> +<a name="line-269"></a><span class="cm"> *</span> +<a name="line-270"></a><span class="cm"> * Return value: %TRUE if @entry's text was modified by the user, or %FALSE if</span> +<a name="line-271"></a><span class="cm"> * it's set to the default text of a location.</span> +<a name="line-272"></a><span class="cm"> **/</span> +<a name="line-273"></a><span class="n">gboolean</span> +<a name="line-274"></a><span class="nf">mateweather_location_entry_has_custom_text</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">)</span> +<a name="line-275"></a><span class="p">{</span> +<a name="line-276"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">MATEWEATHER_IS_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-277"></a> +<a name="line-278"></a> <span class="k">return</span> <span class="n">entry</span><span class="o">-></span><span class="n">custom_text</span><span class="p">;</span> +<a name="line-279"></a><span class="p">}</span> +<a name="line-280"></a> +<a name="line-281"></a><span class="cm">/**</span> +<a name="line-282"></a><span class="cm"> * mateweather_location_entry_set_city:</span> +<a name="line-283"></a><span class="cm"> * @entry: a #MateWeatherLocationEntry</span> +<a name="line-284"></a><span class="cm"> * @city_name: (allow-none): the city name, or %NULL</span> +<a name="line-285"></a><span class="cm"> * @code: the METAR station code</span> +<a name="line-286"></a><span class="cm"> *</span> +<a name="line-287"></a><span class="cm"> * Sets @entry's location to a city with the given @code, and given</span> +<a name="line-288"></a><span class="cm"> * @city_name, if non-%NULL. If there is no matching city, sets</span> +<a name="line-289"></a><span class="cm"> * @entry's location to %NULL.</span> +<a name="line-290"></a><span class="cm"> *</span> +<a name="line-291"></a><span class="cm"> * Return value: %TRUE if @entry's location could be set to a matching city,</span> +<a name="line-292"></a><span class="cm"> * %FALSE otherwise.</span> +<a name="line-293"></a><span class="cm"> **/</span> +<a name="line-294"></a><span class="n">gboolean</span> +<a name="line-295"></a><span class="nf">mateweather_location_entry_set_city</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">,</span> +<a name="line-296"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">city_name</span><span class="p">,</span> +<a name="line-297"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">code</span><span class="p">)</span> +<a name="line-298"></a><span class="p">{</span> +<a name="line-299"></a> <span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">;</span> +<a name="line-300"></a> <span class="n">GtkTreeModel</span> <span class="o">*</span><span class="n">model</span><span class="p">;</span> +<a name="line-301"></a> <span class="n">GtkTreeIter</span> <span class="n">iter</span><span class="p">;</span> +<a name="line-302"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">cmploc</span><span class="p">;</span> +<a name="line-303"></a><span class="hll"> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">cmpcode</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'cmpcode' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'cmpcode' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-304"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">cmpname</span><span class="p">;</span> +<a name="line-305"></a> +<a name="line-306"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">MATEWEATHER_IS_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-307"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">code</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-308"></a> +<a name="line-309"></a> <span class="n">completion</span> <span class="o">=</span> <span class="n">gtk_entry_get_completion</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">));</span> +<a name="line-310"></a> <span class="n">model</span> <span class="o">=</span> <span class="n">gtk_entry_completion_get_model</span> <span class="p">(</span><span class="n">completion</span><span class="p">);</span> +<a name="line-311"></a> +<a name="line-312"></a> <span class="n">gtk_tree_model_get_iter_first</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">);</span> +<a name="line-313"></a> <span class="k">do</span> <span class="p">{</span> +<a name="line-314"></a> <span class="n">gtk_tree_model_get</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> +<a name="line-315"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="o">&</span><span class="n">cmploc</span><span class="p">,</span> +<a name="line-316"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-317"></a> +<a name="line-318"></a> <span class="n">cmpcode</span> <span class="o">=</span> <span class="n">mateweather_location_get_code</span> <span class="p">(</span><span class="n">cmploc</span><span class="p">);</span> +<a name="line-319"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">cmpcode</span> <span class="o">||</span> <span class="n">strcmp</span> <span class="p">(</span><span class="n">cmpcode</span><span class="p">,</span> <span class="n">code</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-320"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-321"></a> +<a name="line-322"></a> <span class="k">if</span> <span class="p">(</span><span class="n">city_name</span><span class="p">)</span> <span class="p">{</span> +<a name="line-323"></a> <span class="n">cmpname</span> <span class="o">=</span> <span class="n">mateweather_location_get_city_name</span> <span class="p">(</span><span class="n">cmploc</span><span class="p">);</span> +<a name="line-324"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">cmpname</span> <span class="o">||</span> <span class="n">strcmp</span> <span class="p">(</span><span class="n">cmpname</span><span class="p">,</span> <span class="n">city_name</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-325"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">cmpname</span><span class="p">);</span> +<a name="line-326"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-327"></a> <span class="p">}</span> +<a name="line-328"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">cmpname</span><span class="p">);</span> +<a name="line-329"></a> <span class="p">}</span> +<a name="line-330"></a> +<a name="line-331"></a> <span class="n">set_location_internal</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">);</span> +<a name="line-332"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-333"></a> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">gtk_tree_model_iter_next</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">));</span> +<a name="line-334"></a> +<a name="line-335"></a> <span class="n">set_location_internal</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-336"></a> +<a name="line-337"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-338"></a><span class="p">}</span> +<a name="line-339"></a> +<a name="line-340"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-341"></a><span class="nf">fill_location_entry_model</span> <span class="p">(</span><span class="n">GtkTreeStore</span> <span class="o">*</span><span class="n">store</span><span class="p">,</span> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">,</span> +<a name="line-342"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">parent_display_name</span><span class="p">,</span> +<a name="line-343"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">parent_compare_name</span><span class="p">)</span> +<a name="line-344"></a><span class="p">{</span> +<a name="line-345"></a> <span class="n">MateWeatherLocation</span> <span class="o">**</span><span class="n">children</span><span class="p">;</span> +<a name="line-346"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">display_name</span><span class="p">,</span> <span class="o">*</span><span class="n">compare_name</span><span class="p">;</span> +<a name="line-347"></a> <span class="n">GtkTreeIter</span> <span class="n">iter</span><span class="p">;</span> +<a name="line-348"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-349"></a> +<a name="line-350"></a> <span class="n">children</span> <span class="o">=</span> <span class="n">mateweather_location_get_children</span> <span class="p">(</span><span class="n">loc</span><span class="p">);</span> +<a name="line-351"></a> +<a name="line-352"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">mateweather_location_get_level</span> <span class="p">(</span><span class="n">loc</span><span class="p">))</span> <span class="p">{</span> +<a name="line-353"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_WORLD</span><span class="p">:</span> +<a name="line-354"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_REGION</span><span class="p">:</span> +<a name="line-355"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_ADM2</span><span class="p">:</span> +<a name="line-356"></a> <span class="cm">/* Ignore these levels of hierarchy; just recurse, passing on</span> +<a name="line-357"></a><span class="cm"> * the names from the parent node.</span> +<a name="line-358"></a><span class="cm"> */</span> +<a name="line-359"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-360"></a> <span class="n">fill_location_entry_model</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> +<a name="line-361"></a> <span class="n">parent_display_name</span><span class="p">,</span> +<a name="line-362"></a> <span class="n">parent_compare_name</span><span class="p">);</span> +<a name="line-363"></a> <span class="p">}</span> +<a name="line-364"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-365"></a> +<a name="line-366"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_COUNTRY</span><span class="p">:</span> +<a name="line-367"></a> <span class="cm">/* Recurse, initializing the names to the country name */</span> +<a name="line-368"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-369"></a> <span class="n">fill_location_entry_model</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> +<a name="line-370"></a> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-371"></a> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">));</span> +<a name="line-372"></a> <span class="p">}</span> +<a name="line-373"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-374"></a> +<a name="line-375"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_ADM1</span><span class="p">:</span> +<a name="line-376"></a> <span class="cm">/* Recurse, adding the ADM1 name to the country name */</span> +<a name="line-377"></a> <span class="n">display_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> <span class="n">parent_display_name</span><span class="p">);</span> +<a name="line-378"></a> <span class="n">compare_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> <span class="n">parent_compare_name</span><span class="p">);</span> +<a name="line-379"></a> +<a name="line-380"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-381"></a> <span class="n">fill_location_entry_model</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> +<a name="line-382"></a> <span class="n">display_name</span><span class="p">,</span> <span class="n">compare_name</span><span class="p">);</span> +<a name="line-383"></a> <span class="p">}</span> +<a name="line-384"></a> +<a name="line-385"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">display_name</span><span class="p">);</span> +<a name="line-386"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">compare_name</span><span class="p">);</span> +<a name="line-387"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-388"></a> +<a name="line-389"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_CITY</span><span class="p">:</span> +<a name="line-390"></a> <span class="k">if</span> <span class="p">(</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&&</span> <span class="n">children</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="p">{</span> +<a name="line-391"></a> <span class="cm">/* If there are multiple (<location>) children, add a line</span> +<a name="line-392"></a><span class="cm"> * for each of them.</span> +<a name="line-393"></a><span class="cm"> */</span> +<a name="line-394"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-395"></a> <span class="n">display_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s (%s), %s"</span><span class="p">,</span> +<a name="line-396"></a> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-397"></a> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> +<a name="line-398"></a> <span class="n">parent_display_name</span><span class="p">);</span> +<a name="line-399"></a> <span class="n">compare_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s (%s), %s"</span><span class="p">,</span> +<a name="line-400"></a> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-401"></a> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span> +<a name="line-402"></a> <span class="n">parent_compare_name</span><span class="p">);</span> +<a name="line-403"></a> +<a name="line-404"></a> <span class="n">gtk_tree_store_append</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-405"></a> <span class="n">gtk_tree_store_set</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> +<a name="line-406"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="n">children</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> +<a name="line-407"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span><span class="p">,</span> <span class="n">display_name</span><span class="p">,</span> +<a name="line-408"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME</span><span class="p">,</span> <span class="n">compare_name</span><span class="p">,</span> +<a name="line-409"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-410"></a> +<a name="line-411"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">display_name</span><span class="p">);</span> +<a name="line-412"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">compare_name</span><span class="p">);</span> +<a name="line-413"></a> <span class="p">}</span> +<a name="line-414"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="p">{</span> +<a name="line-415"></a> <span class="cm">/* Else there's only one location. This is a mix of the</span> +<a name="line-416"></a><span class="cm"> * city-with-multiple-location case above and the</span> +<a name="line-417"></a><span class="cm"> * location-with-no-city case below.</span> +<a name="line-418"></a><span class="cm"> */</span> +<a name="line-419"></a> <span class="n">display_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> +<a name="line-420"></a> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-421"></a> <span class="n">parent_display_name</span><span class="p">);</span> +<a name="line-422"></a> <span class="n">compare_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> +<a name="line-423"></a> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-424"></a> <span class="n">parent_compare_name</span><span class="p">);</span> +<a name="line-425"></a> +<a name="line-426"></a> <span class="n">gtk_tree_store_append</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-427"></a> <span class="n">gtk_tree_store_set</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> +<a name="line-428"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> +<a name="line-429"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span><span class="p">,</span> <span class="n">display_name</span><span class="p">,</span> +<a name="line-430"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME</span><span class="p">,</span> <span class="n">compare_name</span><span class="p">,</span> +<a name="line-431"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-432"></a> +<a name="line-433"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">display_name</span><span class="p">);</span> +<a name="line-434"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">compare_name</span><span class="p">);</span> +<a name="line-435"></a> <span class="p">}</span> +<a name="line-436"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-437"></a> +<a name="line-438"></a> <span class="k">case</span> <span class="nl">MATEWEATHER_LOCATION_WEATHER_STATION</span><span class="p">:</span> +<a name="line-439"></a> <span class="cm">/* <location> with no parent <city>, or <city> with a single</span> +<a name="line-440"></a><span class="cm"> * child <location>.</span> +<a name="line-441"></a><span class="cm"> */</span> +<a name="line-442"></a> <span class="n">display_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> +<a name="line-443"></a> <span class="n">mateweather_location_get_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-444"></a> <span class="n">parent_display_name</span><span class="p">);</span> +<a name="line-445"></a> <span class="n">compare_name</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s, %s"</span><span class="p">,</span> +<a name="line-446"></a> <span class="n">mateweather_location_get_sort_name</span> <span class="p">(</span><span class="n">loc</span><span class="p">),</span> +<a name="line-447"></a> <span class="n">parent_compare_name</span><span class="p">);</span> +<a name="line-448"></a> +<a name="line-449"></a> <span class="n">gtk_tree_store_append</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-450"></a> <span class="n">gtk_tree_store_set</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="o">&</span><span class="n">iter</span><span class="p">,</span> +<a name="line-451"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="n">loc</span><span class="p">,</span> +<a name="line-452"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME</span><span class="p">,</span> <span class="n">display_name</span><span class="p">,</span> +<a name="line-453"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME</span><span class="p">,</span> <span class="n">compare_name</span><span class="p">,</span> +<a name="line-454"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-455"></a> +<a name="line-456"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">display_name</span><span class="p">);</span> +<a name="line-457"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">compare_name</span><span class="p">);</span> +<a name="line-458"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-459"></a> <span class="p">}</span> +<a name="line-460"></a> +<a name="line-461"></a> <span class="n">mateweather_location_free_children</span> <span class="p">(</span><span class="n">loc</span><span class="p">,</span> <span class="n">children</span><span class="p">);</span> +<a name="line-462"></a><span class="p">}</span> +<a name="line-463"></a> +<a name="line-464"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-465"></a><span class="nf">mateweather_location_entry_build_model</span> <span class="p">(</span><span class="n">MateWeatherLocationEntry</span> <span class="o">*</span><span class="n">entry</span><span class="p">,</span> +<a name="line-466"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">top</span><span class="p">)</span> +<a name="line-467"></a><span class="p">{</span> +<a name="line-468"></a> <span class="n">GtkTreeStore</span> <span class="o">*</span><span class="n">store</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-469"></a> +<a name="line-470"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">MATEWEATHER_IS_LOCATION_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">));</span> +<a name="line-471"></a> <span class="n">entry</span><span class="o">-></span><span class="n">top</span> <span class="o">=</span> <span class="n">mateweather_location_ref</span> <span class="p">(</span><span class="n">top</span><span class="p">);</span> +<a name="line-472"></a> +<a name="line-473"></a> <span class="n">store</span> <span class="o">=</span> <span class="n">gtk_tree_store_new</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">G_TYPE_STRING</span><span class="p">,</span> <span class="n">G_TYPE_POINTER</span><span class="p">,</span> <span class="n">G_TYPE_STRING</span><span class="p">,</span> <span class="n">G_TYPE_STRING</span><span class="p">);</span> +<a name="line-474"></a> <span class="n">fill_location_entry_model</span> <span class="p">(</span><span class="n">store</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-475"></a> <span class="n">gtk_entry_completion_set_model</span> <span class="p">(</span><span class="n">gtk_entry_get_completion</span> <span class="p">(</span><span class="n">GTK_ENTRY</span> <span class="p">(</span><span class="n">entry</span><span class="p">)),</span> +<a name="line-476"></a> <span class="n">GTK_TREE_MODEL</span> <span class="p">(</span><span class="n">store</span><span class="p">));</span> +<a name="line-477"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">store</span><span class="p">);</span> +<a name="line-478"></a><span class="p">}</span> +<a name="line-479"></a> +<a name="line-480"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span> +<a name="line-481"></a><span class="nf">find_word</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">full_name</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">word</span><span class="p">,</span> <span class="kt">int</span> <span class="n">word_len</span><span class="p">,</span> +<a name="line-482"></a> <span class="n">gboolean</span> <span class="n">whole_word</span><span class="p">,</span> <span class="n">gboolean</span> <span class="n">is_first_word</span><span class="p">)</span> +<a name="line-483"></a><span class="p">{</span> +<a name="line-484"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">p</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">full_name</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-485"></a> +<a name="line-486"></a> <span class="k">while</span> <span class="p">((</span><span class="n">p</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">p</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="o">*</span><span class="n">word</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-487"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strncmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">word</span><span class="p">,</span> <span class="n">word_len</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-488"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-489"></a> +<a name="line-490"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">></span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">full_name</span><span class="p">)</span> <span class="p">{</span> +<a name="line-491"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">prev</span> <span class="o">=</span> <span class="n">g_utf8_prev_char</span> <span class="p">(</span><span class="n">p</span><span class="p">);</span> +<a name="line-492"></a> +<a name="line-493"></a> <span class="cm">/* Make sure p points to the start of a word */</span> +<a name="line-494"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_unichar_isalpha</span> <span class="p">(</span><span class="n">g_utf8_get_char</span> <span class="p">(</span><span class="n">prev</span><span class="p">)))</span> +<a name="line-495"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-496"></a> +<a name="line-497"></a> <span class="cm">/* If we're matching the first word of the key, it has to</span> +<a name="line-498"></a><span class="cm"> * match the first word of the location, city, state, or</span> +<a name="line-499"></a><span class="cm"> * country. Eg, it either matches the start of the string</span> +<a name="line-500"></a><span class="cm"> * (which we already know it doesn't at this point) or</span> +<a name="line-501"></a><span class="cm"> * it is preceded by the string ", " (which isn't actually</span> +<a name="line-502"></a><span class="cm"> * a perfect test. FIXME)</span> +<a name="line-503"></a><span class="cm"> */</span> +<a name="line-504"></a> <span class="k">if</span> <span class="p">(</span><span class="n">is_first_word</span><span class="p">)</span> <span class="p">{</span> +<a name="line-505"></a> <span class="k">if</span> <span class="p">(</span><span class="n">prev</span> <span class="o">==</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span><span class="n">full_name</span> <span class="o">||</span> <span class="n">strncmp</span> <span class="p">(</span><span class="n">prev</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="s">", "</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-506"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-507"></a> <span class="p">}</span> +<a name="line-508"></a> <span class="p">}</span> +<a name="line-509"></a> +<a name="line-510"></a> <span class="k">if</span> <span class="p">(</span><span class="n">whole_word</span> <span class="o">&&</span> <span class="n">g_unichar_isalpha</span> <span class="p">(</span><span class="n">g_utf8_get_char</span> <span class="p">(</span><span class="n">p</span> <span class="o">+</span> <span class="n">word_len</span><span class="p">)))</span> +<a name="line-511"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-512"></a> +<a name="line-513"></a> <span class="k">return</span> <span class="n">p</span><span class="p">;</span> +<a name="line-514"></a> <span class="p">}</span> +<a name="line-515"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-516"></a><span class="p">}</span> +<a name="line-517"></a> +<a name="line-518"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-519"></a><span class="nf">matcher</span> <span class="p">(</span><span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">key</span><span class="p">,</span> +<a name="line-520"></a> <span class="n">GtkTreeIter</span> <span class="o">*</span><span class="n">iter</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">user_data</span><span class="p">)</span> +<a name="line-521"></a><span class="p">{</span> +<a name="line-522"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">name_mem</span><span class="p">;</span> +<a name="line-523"></a> <span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span> +<a name="line-524"></a> <span class="n">gboolean</span> <span class="n">is_first_word</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">,</span> <span class="n">match</span><span class="p">;</span> +<a name="line-525"></a> <span class="kt">int</span> <span class="n">len</span><span class="p">;</span> +<a name="line-526"></a> +<a name="line-527"></a> <span class="n">gtk_tree_model_get</span> <span class="p">(</span><span class="n">gtk_entry_completion_get_model</span> <span class="p">(</span><span class="n">completion</span><span class="p">),</span> <span class="n">iter</span><span class="p">,</span> +<a name="line-528"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME</span><span class="p">,</span> <span class="o">&</span><span class="n">name_mem</span><span class="p">,</span> +<a name="line-529"></a> <span class="n">MATEWEATHER_LOCATION_ENTRY_COL_LOCATION</span><span class="p">,</span> <span class="o">&</span><span class="n">loc</span><span class="p">,</span> +<a name="line-530"></a> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-531"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">name_mem</span><span class="p">;</span> +<a name="line-532"></a> +<a name="line-533"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">loc</span><span class="p">)</span> <span class="p">{</span> +<a name="line-534"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">name_mem</span><span class="p">);</span> +<a name="line-535"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-536"></a> <span class="p">}</span> +<a name="line-537"></a> +<a name="line-538"></a> <span class="cm">/* All but the last word in KEY must match a full word from NAME,</span> +<a name="line-539"></a><span class="cm"> * in order (but possibly skipping some words from NAME).</span> +<a name="line-540"></a><span class="cm"> */</span> +<a name="line-541"></a> <span class="n">len</span> <span class="o">=</span> <span class="n">strcspn</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span> +<a name="line-542"></a> <span class="k">while</span> <span class="p">(</span><span class="n">key</span><span class="p">[</span><span class="n">len</span><span class="p">])</span> <span class="p">{</span> +<a name="line-543"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">find_word</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">len</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">,</span> <span class="n">is_first_word</span><span class="p">);</span> +<a name="line-544"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span> +<a name="line-545"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">name_mem</span><span class="p">);</span> +<a name="line-546"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-547"></a> <span class="p">}</span> +<a name="line-548"></a> +<a name="line-549"></a> <span class="n">key</span> <span class="o">+=</span> <span class="n">len</span><span class="p">;</span> +<a name="line-550"></a> <span class="k">while</span> <span class="p">(</span><span class="o">*</span><span class="n">key</span> <span class="o">&&</span> <span class="o">!</span><span class="n">g_unichar_isalpha</span> <span class="p">(</span><span class="n">g_utf8_get_char</span> <span class="p">(</span><span class="n">key</span><span class="p">)))</span> +<a name="line-551"></a> <span class="n">key</span> <span class="o">=</span> <span class="n">g_utf8_next_char</span> <span class="p">(</span><span class="n">key</span><span class="p">);</span> +<a name="line-552"></a> <span class="k">while</span> <span class="p">(</span><span class="o">*</span><span class="n">name</span> <span class="o">&&</span> <span class="o">!</span><span class="n">g_unichar_isalpha</span> <span class="p">(</span><span class="n">g_utf8_get_char</span> <span class="p">(</span><span class="n">name</span><span class="p">)))</span> +<a name="line-553"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">g_utf8_next_char</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-554"></a> +<a name="line-555"></a> <span class="n">len</span> <span class="o">=</span> <span class="n">strcspn</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span> +<a name="line-556"></a> <span class="n">is_first_word</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-557"></a> <span class="p">}</span> +<a name="line-558"></a> +<a name="line-559"></a> <span class="cm">/* The last word in KEY must match a prefix of a following word in NAME */</span> +<a name="line-560"></a> <span class="n">match</span> <span class="o">=</span> <span class="n">find_word</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">FALSE</span><span class="p">,</span> <span class="n">is_first_word</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-561"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">name_mem</span><span class="p">);</span> +<a name="line-562"></a> <span class="k">return</span> <span class="n">match</span><span class="p">;</span> +<a name="line-563"></a><span class="p">}</span> +<a name="line-564"></a> +<a name="line-565"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-566"></a><span class="nf">match_selected</span> <span class="p">(</span><span class="n">GtkEntryCompletion</span> <span class="o">*</span><span class="n">completion</span><span class="p">,</span> +<a name="line-567"></a> <span class="n">GtkTreeModel</span> <span class="o">*</span><span class="n">model</span><span class="p">,</span> +<a name="line-568"></a> <span class="n">GtkTreeIter</span> <span class="o">*</span><span class="n">iter</span><span class="p">,</span> +<a name="line-569"></a> <span class="n">gpointer</span> <span class="n">entry</span><span class="p">)</span> +<a name="line-570"></a><span class="p">{</span> +<a name="line-571"></a> <span class="n">set_location_internal</span> <span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">iter</span><span class="p">);</span> +<a name="line-572"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-573"></a><span class="p">}</span> +<a name="line-574"></a> +<a name="line-575"></a><span class="cm">/**</span> +<a name="line-576"></a><span class="cm"> * mateweather_location_entry_new:</span> +<a name="line-577"></a><span class="cm"> * @top: the top-level location for the entry.</span> +<a name="line-578"></a><span class="cm"> *</span> +<a name="line-579"></a><span class="cm"> * Creates a new #MateWeatherLocationEntry.</span> +<a name="line-580"></a><span class="cm"> *</span> +<a name="line-581"></a><span class="cm"> * @top will normally be a location returned from</span> +<a name="line-582"></a><span class="cm"> * mateweather_location_new_world(), but you can create an entry that</span> +<a name="line-583"></a><span class="cm"> * only accepts a smaller set of locations if you want.</span> +<a name="line-584"></a><span class="cm"> *</span> +<a name="line-585"></a><span class="cm"> * Return value: the new #MateWeatherLocationEntry</span> +<a name="line-586"></a><span class="cm"> **/</span> +<a name="line-587"></a><span class="n">GtkWidget</span> <span class="o">*</span> +<a name="line-588"></a><span class="nf">mateweather_location_entry_new</span> <span class="p">(</span><span class="n">MateWeatherLocation</span> <span class="o">*</span><span class="n">top</span><span class="p">)</span> +<a name="line-589"></a><span class="p">{</span> +<a name="line-590"></a> <span class="k">return</span> <span class="n">g_object_new</span> <span class="p">(</span><span class="n">MATEWEATHER_TYPE_LOCATION_ENTRY</span><span class="p">,</span> +<a name="line-591"></a> <span class="s">"top"</span><span class="p">,</span> <span class="n">top</span><span class="p">,</span> +<a name="line-592"></a> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-593"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/1.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/1.html new file mode 100644 index 0000000..c23b73d --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/1.html @@ -0,0 +1,994 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/mateweather-timezone.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> mateweather-timezone.c</p> +<a href="1.html#line-71"> variableScope 71</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* mateweather-timezone.c - Timezone handling</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * Copyright 2008, Red Hat, Inc.</span> +<a name="line-5"></a><span class="cm"> *</span> +<a name="line-6"></a><span class="cm"> * This library is free software; you can redistribute it and/or</span> +<a name="line-7"></a><span class="cm"> * modify it under the terms of the GNU Lesser General Public License</span> +<a name="line-8"></a><span class="cm"> * as published by the Free Software Foundation; either version 2.1 of</span> +<a name="line-9"></a><span class="cm"> * the License, or (at your option) any later version.</span> +<a name="line-10"></a><span class="cm"> *</span> +<a name="line-11"></a><span class="cm"> * This library is distributed in the hope that it will be useful, but</span> +<a name="line-12"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-13"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-14"></a><span class="cm"> * Lesser General Public License for more details.</span> +<a name="line-15"></a><span class="cm"> *</span> +<a name="line-16"></a><span class="cm"> * You should have received a copy of the GNU Lesser General Public</span> +<a name="line-17"></a><span class="cm"> * License along with this library; if not, see</span> +<a name="line-18"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-19"></a><span class="cm"> */</span> +<a name="line-20"></a> +<a name="line-21"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-22"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-23"></a><span class="cp">#endif</span> +<a name="line-24"></a> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-26"></a> +<a name="line-27"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">"mateweather-timezone.h"</span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">"parser.h"</span><span class="cp"></span> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-31"></a> +<a name="line-32"></a><span class="cm">/**</span> +<a name="line-33"></a><span class="cm"> * SECTION:mateweather-timezone</span> +<a name="line-34"></a><span class="cm"> * @Title: MateWeatherTimezone</span> +<a name="line-35"></a><span class="cm"> *</span> +<a name="line-36"></a><span class="cm"> * A timezone.</span> +<a name="line-37"></a><span class="cm"> *</span> +<a name="line-38"></a><span class="cm"> * There are no public methods for creating timezones; they can only</span> +<a name="line-39"></a><span class="cm"> * be created by calling mateweather_location_new_world() to parse</span> +<a name="line-40"></a><span class="cm"> * Locations.xml, and then calling various #MateWeatherLocation methods</span> +<a name="line-41"></a><span class="cm"> * to extract relevant timezones from the location hierarchy.</span> +<a name="line-42"></a><span class="cm"> */</span> +<a name="line-43"></a><span class="k">struct</span> <span class="n">_MateWeatherTimezone</span> <span class="p">{</span> +<a name="line-44"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">id</span><span class="p">,</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span> +<a name="line-45"></a> <span class="kt">int</span> <span class="n">offset</span><span class="p">,</span> <span class="n">dst_offset</span><span class="p">;</span> +<a name="line-46"></a> <span class="n">gboolean</span> <span class="n">has_dst</span><span class="p">;</span> +<a name="line-47"></a> +<a name="line-48"></a> <span class="kt">int</span> <span class="n">ref_count</span><span class="p">;</span> +<a name="line-49"></a><span class="p">};</span> +<a name="line-50"></a> +<a name="line-51"></a><span class="cp">#define TZ_MAGIC "TZif"</span> +<a name="line-52"></a><span class="cp">#define TZ_HEADER_SIZE 44</span> +<a name="line-53"></a><span class="cp">#define TZ_TIMECNT_OFFSET 32</span> +<a name="line-54"></a><span class="cp">#define TZ_TRANSITIONS_OFFSET 44</span> +<a name="line-55"></a> +<a name="line-56"></a><span class="cp">#define TZ_TTINFO_SIZE 6</span> +<a name="line-57"></a><span class="cp">#define TZ_TTINFO_GMTOFF_OFFSET 0</span> +<a name="line-58"></a><span class="cp">#define TZ_TTINFO_ISDST_OFFSET 4</span> +<a name="line-59"></a> +<a name="line-60"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-61"></a><span class="nf">parse_tzdata</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">tzname</span><span class="p">,</span> <span class="kt">time_t</span> <span class="n">start</span><span class="p">,</span> <span class="kt">time_t</span> <span class="n">end</span><span class="p">,</span> +<a name="line-62"></a> <span class="kt">int</span> <span class="o">*</span><span class="n">offset</span><span class="p">,</span> <span class="n">gboolean</span> <span class="o">*</span><span class="n">has_dst</span><span class="p">,</span> <span class="kt">int</span> <span class="o">*</span><span class="n">dst_offset</span><span class="p">)</span> +<a name="line-63"></a><span class="p">{</span> +<a name="line-64"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">,</span> <span class="o">*</span><span class="n">contents</span><span class="p">;</span> +<a name="line-65"></a> <span class="n">gsize</span> <span class="n">length</span><span class="p">;</span> +<a name="line-66"></a> <span class="kt">int</span> <span class="n">timecnt</span><span class="p">,</span> <span class="n">transitions_size</span><span class="p">,</span> <span class="n">ttinfo_map_size</span><span class="p">;</span> +<a name="line-67"></a> <span class="kt">int</span> <span class="n">initial_transition</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">second_transition</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-68"></a> <span class="n">gint32</span> <span class="o">*</span><span class="n">transitions</span><span class="p">;</span> +<a name="line-69"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">ttinfo_map</span><span class="p">,</span> <span class="o">*</span><span class="n">ttinfos</span><span class="p">;</span> +<a name="line-70"></a> <span class="n">gint32</span> <span class="n">initial_offset</span><span class="p">,</span> <span class="n">second_offset</span><span class="p">;</span> +<a name="line-71"></a><span class="hll"> <span class="kt">char</span> <span class="n">initial_isdst</span><span class="p">,</span> <span class="n">second_isdst</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'second_isdst' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'second_isdst' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-72"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-73"></a> +<a name="line-74"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_build_filename</span> <span class="p">(</span><span class="n">ZONEINFO_DIR</span><span class="p">,</span> <span class="n">tzname</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-75"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_file_get_contents</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="o">&</span><span class="n">contents</span><span class="p">,</span> <span class="o">&</span><span class="n">length</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">))</span> <span class="p">{</span> +<a name="line-76"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-77"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-78"></a> <span class="p">}</span> +<a name="line-79"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-80"></a> +<a name="line-81"></a> <span class="k">if</span> <span class="p">(</span><span class="n">length</span> <span class="o"><</span> <span class="n">TZ_HEADER_SIZE</span> <span class="o">||</span> +<a name="line-82"></a> <span class="n">strncmp</span> <span class="p">(</span><span class="n">contents</span><span class="p">,</span> <span class="n">TZ_MAGIC</span><span class="p">,</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">TZ_MAGIC</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-83"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">contents</span><span class="p">);</span> +<a name="line-84"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-85"></a> <span class="p">}</span> +<a name="line-86"></a> +<a name="line-87"></a> <span class="n">timecnt</span> <span class="o">=</span> <span class="n">GUINT32_FROM_BE</span> <span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">guint32</span> <span class="o">*</span><span class="p">)(</span><span class="n">contents</span> <span class="o">+</span> <span class="n">TZ_TIMECNT_OFFSET</span><span class="p">));</span> +<a name="line-88"></a> <span class="n">transitions</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)(</span><span class="n">contents</span> <span class="o">+</span> <span class="n">TZ_TRANSITIONS_OFFSET</span><span class="p">);</span> +<a name="line-89"></a> <span class="n">transitions_size</span> <span class="o">=</span> <span class="n">timecnt</span> <span class="o">*</span> <span class="k">sizeof</span> <span class="p">(</span><span class="o">*</span><span class="n">transitions</span><span class="p">);</span> +<a name="line-90"></a> <span class="n">ttinfo_map</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)(</span><span class="n">contents</span> <span class="o">+</span> <span class="n">TZ_TRANSITIONS_OFFSET</span> <span class="o">+</span> <span class="n">transitions_size</span><span class="p">);</span> +<a name="line-91"></a> <span class="n">ttinfo_map_size</span> <span class="o">=</span> <span class="n">timecnt</span><span class="p">;</span> +<a name="line-92"></a> <span class="n">ttinfos</span> <span class="o">=</span> <span class="p">(</span><span class="kt">void</span> <span class="o">*</span><span class="p">)(</span><span class="n">ttinfo_map</span> <span class="o">+</span> <span class="n">ttinfo_map_size</span><span class="p">);</span> +<a name="line-93"></a> +<a name="line-94"></a> <span class="cm">/* @transitions is an array of @timecnt time_t values. We need to</span> +<a name="line-95"></a><span class="cm"> * find the transition into the current offset, which is the last</span> +<a name="line-96"></a><span class="cm"> * transition before @start. If the following transition is before</span> +<a name="line-97"></a><span class="cm"> * @end, then note that one too, since it presumably means we're</span> +<a name="line-98"></a><span class="cm"> * doing DST.</span> +<a name="line-99"></a><span class="cm"> */</span> +<a name="line-100"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">timecnt</span> <span class="o">&&</span> <span class="n">initial_transition</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-101"></a> <span class="k">if</span> <span class="p">(</span><span class="n">GINT32_FROM_BE</span> <span class="p">(</span><span class="n">transitions</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">></span> <span class="n">start</span><span class="p">)</span> <span class="p">{</span> +<a name="line-102"></a> <span class="n">initial_transition</span> <span class="o">=</span> <span class="n">ttinfo_map</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">];</span> +<a name="line-103"></a> <span class="k">if</span> <span class="p">(</span><span class="n">GINT32_FROM_BE</span> <span class="p">(</span><span class="n">transitions</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o"><</span> <span class="n">end</span><span class="p">)</span> +<a name="line-104"></a> <span class="n">second_transition</span> <span class="o">=</span> <span class="n">ttinfo_map</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> +<a name="line-105"></a> <span class="p">}</span> +<a name="line-106"></a> <span class="p">}</span> +<a name="line-107"></a> <span class="k">if</span> <span class="p">(</span><span class="n">initial_transition</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-108"></a> <span class="k">if</span> <span class="p">(</span><span class="n">timecnt</span><span class="p">)</span> +<a name="line-109"></a> <span class="n">initial_transition</span> <span class="o">=</span> <span class="n">ttinfo_map</span><span class="p">[</span><span class="n">timecnt</span> <span class="o">-</span> <span class="mi">1</span><span class="p">];</span> +<a name="line-110"></a> <span class="k">else</span> +<a name="line-111"></a> <span class="n">initial_transition</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-112"></a> <span class="p">}</span> +<a name="line-113"></a> +<a name="line-114"></a> <span class="cm">/* Copy the data out of the corresponding ttinfo structs */</span> +<a name="line-115"></a> <span class="n">initial_offset</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">gint32</span> <span class="o">*</span><span class="p">)(</span><span class="n">ttinfos</span> <span class="o">+</span> +<a name="line-116"></a> <span class="n">initial_transition</span> <span class="o">*</span> <span class="n">TZ_TTINFO_SIZE</span> <span class="o">+</span> +<a name="line-117"></a> <span class="n">TZ_TTINFO_GMTOFF_OFFSET</span><span class="p">);</span> +<a name="line-118"></a> <span class="n">initial_offset</span> <span class="o">=</span> <span class="n">GINT32_FROM_BE</span> <span class="p">(</span><span class="n">initial_offset</span><span class="p">);</span> +<a name="line-119"></a> <span class="n">initial_isdst</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">ttinfos</span> <span class="o">+</span> +<a name="line-120"></a> <span class="n">initial_transition</span> <span class="o">*</span> <span class="n">TZ_TTINFO_SIZE</span> <span class="o">+</span> +<a name="line-121"></a> <span class="n">TZ_TTINFO_ISDST_OFFSET</span><span class="p">);</span> +<a name="line-122"></a> +<a name="line-123"></a> <span class="k">if</span> <span class="p">(</span><span class="n">second_transition</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-124"></a> <span class="n">second_offset</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">gint32</span> <span class="o">*</span><span class="p">)(</span><span class="n">ttinfos</span> <span class="o">+</span> +<a name="line-125"></a> <span class="n">second_transition</span> <span class="o">*</span> <span class="n">TZ_TTINFO_SIZE</span> <span class="o">+</span> +<a name="line-126"></a> <span class="n">TZ_TTINFO_GMTOFF_OFFSET</span><span class="p">);</span> +<a name="line-127"></a> <span class="n">second_offset</span> <span class="o">=</span> <span class="n">GINT32_FROM_BE</span> <span class="p">(</span><span class="n">second_offset</span><span class="p">);</span> +<a name="line-128"></a> <span class="n">second_isdst</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">ttinfos</span> <span class="o">+</span> +<a name="line-129"></a> <span class="n">second_transition</span> <span class="o">*</span> <span class="n">TZ_TTINFO_SIZE</span> <span class="o">+</span> +<a name="line-130"></a> <span class="n">TZ_TTINFO_ISDST_OFFSET</span><span class="p">);</span> +<a name="line-131"></a> +<a name="line-132"></a> <span class="o">*</span><span class="n">has_dst</span> <span class="o">=</span> <span class="p">(</span><span class="n">initial_isdst</span> <span class="o">!=</span> <span class="n">second_isdst</span><span class="p">);</span> +<a name="line-133"></a> <span class="p">}</span> <span class="k">else</span> +<a name="line-134"></a> <span class="o">*</span><span class="n">has_dst</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-135"></a> +<a name="line-136"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!*</span><span class="n">has_dst</span><span class="p">)</span> +<a name="line-137"></a> <span class="o">*</span><span class="n">offset</span> <span class="o">=</span> <span class="n">initial_offset</span> <span class="o">/</span> <span class="mi">60</span><span class="p">;</span> +<a name="line-138"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-139"></a> <span class="k">if</span> <span class="p">(</span><span class="n">initial_isdst</span><span class="p">)</span> <span class="p">{</span> +<a name="line-140"></a> <span class="o">*</span><span class="n">offset</span> <span class="o">=</span> <span class="n">second_offset</span> <span class="o">/</span> <span class="mi">60</span><span class="p">;</span> +<a name="line-141"></a> <span class="o">*</span><span class="n">dst_offset</span> <span class="o">=</span> <span class="n">initial_offset</span> <span class="o">/</span> <span class="mi">60</span><span class="p">;</span> +<a name="line-142"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-143"></a> <span class="o">*</span><span class="n">offset</span> <span class="o">=</span> <span class="n">initial_offset</span> <span class="o">/</span> <span class="mi">60</span><span class="p">;</span> +<a name="line-144"></a> <span class="o">*</span><span class="n">dst_offset</span> <span class="o">=</span> <span class="n">second_offset</span> <span class="o">/</span> <span class="mi">60</span><span class="p">;</span> +<a name="line-145"></a> <span class="p">}</span> +<a name="line-146"></a> <span class="p">}</span> +<a name="line-147"></a> +<a name="line-148"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">contents</span><span class="p">);</span> +<a name="line-149"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-150"></a><span class="p">}</span> +<a name="line-151"></a> +<a name="line-152"></a><span class="k">static</span> <span class="n">MateWeatherTimezone</span> <span class="o">*</span> +<a name="line-153"></a><span class="nf">parse_timezone</span> <span class="p">(</span><span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">)</span> +<a name="line-154"></a><span class="p">{</span> +<a name="line-155"></a> <span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-156"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">id</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">*</span><span class="n">name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-157"></a> <span class="kt">int</span> <span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">dst_offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-158"></a> <span class="n">gboolean</span> <span class="n">has_dst</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-159"></a> +<a name="line-160"></a> <span class="n">id</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderGetAttribute</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">,</span> <span class="p">(</span><span class="n">xmlChar</span> <span class="o">*</span><span class="p">)</span> <span class="s">"id"</span><span class="p">);</span> +<a name="line-161"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">id</span><span class="p">)</span> <span class="p">{</span> +<a name="line-162"></a> <span class="n">xmlTextReaderNext</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-163"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-164"></a> <span class="p">}</span> +<a name="line-165"></a> +<a name="line-166"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">xmlTextReaderIsEmptyElement</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">))</span> <span class="p">{</span> +<a name="line-167"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-168"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">id</span><span class="p">);</span> +<a name="line-169"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-170"></a> <span class="p">}</span> +<a name="line-171"></a> +<a name="line-172"></a> <span class="k">while</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_END_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-173"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-174"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-175"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-176"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-177"></a> <span class="p">}</span> +<a name="line-178"></a> +<a name="line-179"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">((</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderConstName</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">),</span> <span class="s">"name"</span><span class="p">))</span> +<a name="line-180"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">mateweather_parser_get_localized_value</span> <span class="p">(</span><span class="n">parser</span><span class="p">);</span> +<a name="line-181"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-182"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderNext</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-183"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-184"></a> <span class="p">}</span> +<a name="line-185"></a> <span class="p">}</span> +<a name="line-186"></a> <span class="p">}</span> +<a name="line-187"></a> +<a name="line-188"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parse_tzdata</span> <span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">parser</span><span class="o">-></span><span class="n">year_start</span><span class="p">,</span> <span class="n">parser</span><span class="o">-></span><span class="n">year_end</span><span class="p">,</span> +<a name="line-189"></a> <span class="o">&</span><span class="n">offset</span><span class="p">,</span> <span class="o">&</span><span class="n">has_dst</span><span class="p">,</span> <span class="o">&</span><span class="n">dst_offset</span><span class="p">))</span> <span class="p">{</span> +<a name="line-190"></a> <span class="n">zone</span> <span class="o">=</span> <span class="n">g_slice_new0</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span><span class="p">);</span> +<a name="line-191"></a> <span class="n">zone</span><span class="o">-></span><span class="n">ref_count</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-192"></a> <span class="n">zone</span><span class="o">-></span><span class="n">id</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">id</span><span class="p">);</span> +<a name="line-193"></a> <span class="n">zone</span><span class="o">-></span><span class="n">name</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-194"></a> <span class="n">zone</span><span class="o">-></span><span class="n">offset</span> <span class="o">=</span> <span class="n">offset</span><span class="p">;</span> +<a name="line-195"></a> <span class="n">zone</span><span class="o">-></span><span class="n">has_dst</span> <span class="o">=</span> <span class="n">has_dst</span><span class="p">;</span> +<a name="line-196"></a> <span class="n">zone</span><span class="o">-></span><span class="n">dst_offset</span> <span class="o">=</span> <span class="n">dst_offset</span><span class="p">;</span> +<a name="line-197"></a> <span class="p">}</span> +<a name="line-198"></a> +<a name="line-199"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">id</span><span class="p">);</span> +<a name="line-200"></a> <span class="k">if</span> <span class="p">(</span><span class="n">name</span><span class="p">)</span> +<a name="line-201"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-202"></a> +<a name="line-203"></a> <span class="k">return</span> <span class="n">zone</span><span class="p">;</span> +<a name="line-204"></a><span class="p">}</span> +<a name="line-205"></a> +<a name="line-206"></a><span class="n">MateWeatherTimezone</span> <span class="o">**</span> +<a name="line-207"></a><span class="nf">mateweather_timezones_parse_xml</span> <span class="p">(</span><span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">)</span> +<a name="line-208"></a><span class="p">{</span> +<a name="line-209"></a> <span class="n">GPtrArray</span> <span class="o">*</span><span class="n">zones</span><span class="p">;</span> +<a name="line-210"></a> <span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">;</span> +<a name="line-211"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">tagname</span><span class="p">;</span> +<a name="line-212"></a> <span class="kt">int</span> <span class="n">tagtype</span><span class="p">,</span> <span class="n">i</span><span class="p">;</span> +<a name="line-213"></a> +<a name="line-214"></a> <span class="n">zones</span> <span class="o">=</span> <span class="n">g_ptr_array_new</span> <span class="p">();</span> +<a name="line-215"></a> +<a name="line-216"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-217"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-218"></a> <span class="k">while</span> <span class="p">((</span><span class="n">tagtype</span> <span class="o">=</span> <span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">))</span> <span class="o">!=</span> +<a name="line-219"></a> <span class="n">XML_READER_TYPE_END_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="n">tagtype</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-221"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-222"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-223"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-224"></a> <span class="p">}</span> +<a name="line-225"></a> +<a name="line-226"></a> <span class="n">tagname</span> <span class="o">=</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderConstName</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-227"></a> +<a name="line-228"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">tagname</span><span class="p">,</span> <span class="s">"timezone"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-229"></a> <span class="n">zone</span> <span class="o">=</span> <span class="n">parse_timezone</span> <span class="p">(</span><span class="n">parser</span><span class="p">);</span> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">zone</span><span class="p">)</span> +<a name="line-231"></a> <span class="n">g_ptr_array_add</span> <span class="p">(</span><span class="n">zones</span><span class="p">,</span> <span class="n">zone</span><span class="p">);</span> +<a name="line-232"></a> <span class="p">}</span> +<a name="line-233"></a> +<a name="line-234"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderNext</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-235"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-236"></a> <span class="p">}</span> +<a name="line-237"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-238"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-239"></a> +<a name="line-240"></a> <span class="n">g_ptr_array_add</span> <span class="p">(</span><span class="n">zones</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-241"></a> <span class="k">return</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">**</span><span class="p">)</span><span class="n">g_ptr_array_free</span> <span class="p">(</span><span class="n">zones</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-242"></a> +<a name="line-243"></a><span class="nl">error_out</span><span class="p">:</span> +<a name="line-244"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">zones</span><span class="o">-></span><span class="n">len</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> +<a name="line-245"></a> <span class="n">mateweather_timezone_unref</span> <span class="p">(</span><span class="n">zones</span><span class="o">-></span><span class="n">pdata</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-246"></a> <span class="n">g_ptr_array_free</span> <span class="p">(</span><span class="n">zones</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-247"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-248"></a><span class="p">}</span> +<a name="line-249"></a> +<a name="line-250"></a><span class="cm">/**</span> +<a name="line-251"></a><span class="cm"> * mateweather_timezone_ref:</span> +<a name="line-252"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-253"></a><span class="cm"> *</span> +<a name="line-254"></a><span class="cm"> * Adds 1 to @zone's reference count.</span> +<a name="line-255"></a><span class="cm"> *</span> +<a name="line-256"></a><span class="cm"> * Return value: @zone</span> +<a name="line-257"></a><span class="cm"> **/</span> +<a name="line-258"></a><span class="n">MateWeatherTimezone</span> <span class="o">*</span> +<a name="line-259"></a><span class="nf">mateweather_timezone_ref</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-260"></a><span class="p">{</span> +<a name="line-261"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-262"></a> +<a name="line-263"></a> <span class="n">zone</span><span class="o">-></span><span class="n">ref_count</span><span class="o">++</span><span class="p">;</span> +<a name="line-264"></a> <span class="k">return</span> <span class="n">zone</span><span class="p">;</span> +<a name="line-265"></a><span class="p">}</span> +<a name="line-266"></a> +<a name="line-267"></a><span class="cm">/**</span> +<a name="line-268"></a><span class="cm"> * mateweather_timezone_unref:</span> +<a name="line-269"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-270"></a><span class="cm"> *</span> +<a name="line-271"></a><span class="cm"> * Subtracts 1 from @zone's reference count and frees it if it reaches 0.</span> +<a name="line-272"></a><span class="cm"> **/</span> +<a name="line-273"></a><span class="kt">void</span> +<a name="line-274"></a><span class="nf">mateweather_timezone_unref</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-275"></a><span class="p">{</span> +<a name="line-276"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-277"></a> +<a name="line-278"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!--</span><span class="n">zone</span><span class="o">-></span><span class="n">ref_count</span><span class="p">)</span> <span class="p">{</span> +<a name="line-279"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">zone</span><span class="o">-></span><span class="n">id</span><span class="p">);</span> +<a name="line-280"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">zone</span><span class="o">-></span><span class="n">name</span><span class="p">);</span> +<a name="line-281"></a> <span class="n">g_slice_free</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span><span class="p">,</span> <span class="n">zone</span><span class="p">);</span> +<a name="line-282"></a> <span class="p">}</span> +<a name="line-283"></a><span class="p">}</span> +<a name="line-284"></a> +<a name="line-285"></a><span class="n">GType</span> +<a name="line-286"></a><span class="nf">mateweather_timezone_get_type</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<a name="line-287"></a><span class="p">{</span> +<a name="line-288"></a> <span class="k">static</span> <span class="k">volatile</span> <span class="n">gsize</span> <span class="n">type_volatile</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-289"></a> +<a name="line-290"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_once_init_enter</span> <span class="p">(</span><span class="o">&</span><span class="n">type_volatile</span><span class="p">))</span> <span class="p">{</span> +<a name="line-291"></a> <span class="n">GType</span> <span class="n">type</span> <span class="o">=</span> <span class="n">g_boxed_type_register_static</span> <span class="p">(</span> +<a name="line-292"></a> <span class="n">g_intern_static_string</span> <span class="p">(</span><span class="s">"MateWeatherTimezone"</span><span class="p">),</span> +<a name="line-293"></a> <span class="p">(</span><span class="n">GBoxedCopyFunc</span><span class="p">)</span> <span class="n">mateweather_timezone_ref</span><span class="p">,</span> +<a name="line-294"></a> <span class="p">(</span><span class="n">GBoxedFreeFunc</span><span class="p">)</span> <span class="n">mateweather_timezone_unref</span><span class="p">);</span> +<a name="line-295"></a> <span class="n">g_once_init_leave</span> <span class="p">(</span><span class="o">&</span><span class="n">type_volatile</span><span class="p">,</span> <span class="n">type</span><span class="p">);</span> +<a name="line-296"></a> <span class="p">}</span> +<a name="line-297"></a> <span class="k">return</span> <span class="n">type_volatile</span><span class="p">;</span> +<a name="line-298"></a><span class="p">}</span> +<a name="line-299"></a> +<a name="line-300"></a><span class="cm">/**</span> +<a name="line-301"></a><span class="cm"> * mateweather_timezone_get_utc:</span> +<a name="line-302"></a><span class="cm"> *</span> +<a name="line-303"></a><span class="cm"> * Gets the UTC timezone.</span> +<a name="line-304"></a><span class="cm"> *</span> +<a name="line-305"></a><span class="cm"> * Return value: a #MateWeatherTimezone for UTC, or %NULL on error.</span> +<a name="line-306"></a><span class="cm"> **/</span> +<a name="line-307"></a><span class="n">MateWeatherTimezone</span> <span class="o">*</span> +<a name="line-308"></a><span class="nf">mateweather_timezone_get_utc</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<a name="line-309"></a><span class="p">{</span> +<a name="line-310"></a> <span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-311"></a> +<a name="line-312"></a> <span class="n">zone</span> <span class="o">=</span> <span class="n">g_slice_new0</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span><span class="p">);</span> +<a name="line-313"></a> <span class="n">zone</span><span class="o">-></span><span class="n">ref_count</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-314"></a> <span class="n">zone</span><span class="o">-></span><span class="n">id</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">"GMT"</span><span class="p">);</span> +<a name="line-315"></a> <span class="n">zone</span><span class="o">-></span><span class="n">name</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"Greenwich Mean Time"</span><span class="p">));</span> +<a name="line-316"></a> <span class="n">zone</span><span class="o">-></span><span class="n">offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-317"></a> <span class="n">zone</span><span class="o">-></span><span class="n">has_dst</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-318"></a> <span class="n">zone</span><span class="o">-></span><span class="n">dst_offset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-319"></a> +<a name="line-320"></a> <span class="k">return</span> <span class="n">zone</span><span class="p">;</span> +<a name="line-321"></a><span class="p">}</span> +<a name="line-322"></a> +<a name="line-323"></a><span class="cm">/**</span> +<a name="line-324"></a><span class="cm"> * mateweather_timezone_get_name:</span> +<a name="line-325"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-326"></a><span class="cm"> *</span> +<a name="line-327"></a><span class="cm"> * Gets @zone's name; a translated, user-presentable string.</span> +<a name="line-328"></a><span class="cm"> *</span> +<a name="line-329"></a><span class="cm"> * Note that the returned name might not be unique among timezones,</span> +<a name="line-330"></a><span class="cm"> * and may not make sense to the user unless it is presented along</span> +<a name="line-331"></a><span class="cm"> * with the timezone's country's name (or in some context where the</span> +<a name="line-332"></a><span class="cm"> * country is obvious).</span> +<a name="line-333"></a><span class="cm"> *</span> +<a name="line-334"></a><span class="cm"> * Return value: @zone's name</span> +<a name="line-335"></a><span class="cm"> **/</span> +<a name="line-336"></a><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span> +<a name="line-337"></a><span class="nf">mateweather_timezone_get_name</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-338"></a><span class="p">{</span> +<a name="line-339"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-340"></a> <span class="k">return</span> <span class="n">zone</span><span class="o">-></span><span class="n">name</span><span class="p">;</span> +<a name="line-341"></a><span class="p">}</span> +<a name="line-342"></a> +<a name="line-343"></a><span class="cm">/**</span> +<a name="line-344"></a><span class="cm"> * mateweather_timezone_get_tzid:</span> +<a name="line-345"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-346"></a><span class="cm"> *</span> +<a name="line-347"></a><span class="cm"> * Gets @zone's tzdata identifier, eg "America/New_York".</span> +<a name="line-348"></a><span class="cm"> *</span> +<a name="line-349"></a><span class="cm"> * Return value: @zone's tzid</span> +<a name="line-350"></a><span class="cm"> **/</span> +<a name="line-351"></a><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span> +<a name="line-352"></a><span class="nf">mateweather_timezone_get_tzid</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-353"></a><span class="p">{</span> +<a name="line-354"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-355"></a> <span class="k">return</span> <span class="n">zone</span><span class="o">-></span><span class="n">id</span><span class="p">;</span> +<a name="line-356"></a><span class="p">}</span> +<a name="line-357"></a> +<a name="line-358"></a><span class="cm">/**</span> +<a name="line-359"></a><span class="cm"> * mateweather_timezone_get_offset:</span> +<a name="line-360"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-361"></a><span class="cm"> *</span> +<a name="line-362"></a><span class="cm"> * Gets @zone's standard offset from UTC, in minutes. Eg, a value of</span> +<a name="line-363"></a><span class="cm"> * %120 would indicate "GMT+2".</span> +<a name="line-364"></a><span class="cm"> *</span> +<a name="line-365"></a><span class="cm"> * Return value: @zone's standard offset, in minutes</span> +<a name="line-366"></a><span class="cm"> **/</span> +<a name="line-367"></a><span class="kt">int</span> +<a name="line-368"></a><span class="nf">mateweather_timezone_get_offset</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-369"></a><span class="p">{</span> +<a name="line-370"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-371"></a> <span class="k">return</span> <span class="n">zone</span><span class="o">-></span><span class="n">offset</span><span class="p">;</span> +<a name="line-372"></a><span class="p">}</span> +<a name="line-373"></a> +<a name="line-374"></a><span class="cm">/**</span> +<a name="line-375"></a><span class="cm"> * mateweather_timezone_has_dst:</span> +<a name="line-376"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-377"></a><span class="cm"> *</span> +<a name="line-378"></a><span class="cm"> * Checks if @zone observes daylight/summer time for part of the year.</span> +<a name="line-379"></a><span class="cm"> *</span> +<a name="line-380"></a><span class="cm"> * Return value: %TRUE if @zone observes daylight/summer time.</span> +<a name="line-381"></a><span class="cm"> **/</span> +<a name="line-382"></a><span class="n">gboolean</span> +<a name="line-383"></a><span class="nf">mateweather_timezone_has_dst</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-384"></a><span class="p">{</span> +<a name="line-385"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-386"></a> <span class="k">return</span> <span class="n">zone</span><span class="o">-></span><span class="n">has_dst</span><span class="p">;</span> +<a name="line-387"></a><span class="p">}</span> +<a name="line-388"></a> +<a name="line-389"></a><span class="cm">/**</span> +<a name="line-390"></a><span class="cm"> * mateweather_timezone_get_dst_offset:</span> +<a name="line-391"></a><span class="cm"> * @zone: a #MateWeatherTimezone</span> +<a name="line-392"></a><span class="cm"> *</span> +<a name="line-393"></a><span class="cm"> * Gets @zone's daylight/summer time offset from UTC, in minutes. Eg,</span> +<a name="line-394"></a><span class="cm"> * a value of %120 would indicate "GMT+2". This is only meaningful if</span> +<a name="line-395"></a><span class="cm"> * mateweather_timezone_has_dst() returns %TRUE.</span> +<a name="line-396"></a><span class="cm"> *</span> +<a name="line-397"></a><span class="cm"> * Return value: @zone's daylight/summer time offset, in minutes</span> +<a name="line-398"></a><span class="cm"> **/</span> +<a name="line-399"></a><span class="kt">int</span> +<a name="line-400"></a><span class="nf">mateweather_timezone_get_dst_offset</span> <span class="p">(</span><span class="n">MateWeatherTimezone</span> <span class="o">*</span><span class="n">zone</span><span class="p">)</span> +<a name="line-401"></a><span class="p">{</span> +<a name="line-402"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-403"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">zone</span><span class="o">-></span><span class="n">has_dst</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> +<a name="line-404"></a> <span class="k">return</span> <span class="n">zone</span><span class="o">-></span><span class="n">dst_offset</span><span class="p">;</span> +<a name="line-405"></a><span class="p">}</span> +<a name="line-406"></a> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/2.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/2.html new file mode 100644 index 0000000..4a7803f --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/2.html @@ -0,0 +1,708 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/parser.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> parser.c</p> +<a href="2.html#line-94"> variableScope 94</a><a href="2.html#line-117"> arrayIndexThenCheck 117</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* parser.c - Locations.xml parser</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * Copyright 2008, Red Hat, Inc.</span> +<a name="line-5"></a><span class="cm"> *</span> +<a name="line-6"></a><span class="cm"> * This library is free software; you can redistribute it and/or</span> +<a name="line-7"></a><span class="cm"> * modify it under the terms of the GNU Lesser General Public License</span> +<a name="line-8"></a><span class="cm"> * as published by the Free Software Foundation; either version 2.1 of</span> +<a name="line-9"></a><span class="cm"> * the License, or (at your option) any later version.</span> +<a name="line-10"></a><span class="cm"> *</span> +<a name="line-11"></a><span class="cm"> * This library is distributed in the hope that it will be useful, but</span> +<a name="line-12"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-13"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-14"></a><span class="cm"> * Lesser General Public License for more details.</span> +<a name="line-15"></a><span class="cm"> *</span> +<a name="line-16"></a><span class="cm"> * You should have received a copy of the GNU Lesser General Public</span> +<a name="line-17"></a><span class="cm"> * License along with this library; if not, see</span> +<a name="line-18"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-19"></a><span class="cm"> */</span> +<a name="line-20"></a> +<a name="line-21"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-22"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-23"></a><span class="cp">#endif</span> +<a name="line-24"></a> +<a name="line-25"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">"parser.h"</span><span class="cp"></span> +<a name="line-29"></a> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><libxml/xmlreader.h></span><span class="cp"></span> +<a name="line-33"></a> +<a name="line-34"></a><span class="cm">/**</span> +<a name="line-35"></a><span class="cm"> * mateweather_parser_get_value:</span> +<a name="line-36"></a><span class="cm"> * @parser: a #MateWeatherParser</span> +<a name="line-37"></a><span class="cm"> *</span> +<a name="line-38"></a><span class="cm"> * Gets the text of the element whose start tag @parser is pointing to.</span> +<a name="line-39"></a><span class="cm"> * Leaves @parser pointing at the next node after the element's end tag.</span> +<a name="line-40"></a><span class="cm"> *</span> +<a name="line-41"></a><span class="cm"> * Return value: the text of the current node, as a libxml-allocated</span> +<a name="line-42"></a><span class="cm"> * string, or %NULL if the node is empty.</span> +<a name="line-43"></a><span class="cm"> **/</span> +<a name="line-44"></a><span class="kt">char</span> <span class="o">*</span> +<a name="line-45"></a><span class="nf">mateweather_parser_get_value</span> <span class="p">(</span><span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">)</span> +<a name="line-46"></a><span class="p">{</span> +<a name="line-47"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">value</span><span class="p">;</span> +<a name="line-48"></a> +<a name="line-49"></a> <span class="cm">/* check for null node */</span> +<a name="line-50"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderIsEmptyElement</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">))</span> +<a name="line-51"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-52"></a> +<a name="line-53"></a> <span class="cm">/* the next "node" is the text node containing the value we want to get */</span> +<a name="line-54"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-55"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-56"></a> +<a name="line-57"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderValue</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-58"></a> +<a name="line-59"></a> <span class="cm">/* move on to the end of this node */</span> +<a name="line-60"></a> <span class="k">while</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_END_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-61"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-62"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">value</span><span class="p">);</span> +<a name="line-63"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-64"></a> <span class="p">}</span> +<a name="line-65"></a> <span class="p">}</span> +<a name="line-66"></a> +<a name="line-67"></a> <span class="cm">/* consume the end element too */</span> +<a name="line-68"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-69"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">value</span><span class="p">);</span> +<a name="line-70"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-71"></a> <span class="p">}</span> +<a name="line-72"></a> +<a name="line-73"></a> <span class="k">return</span> <span class="n">value</span><span class="p">;</span> +<a name="line-74"></a><span class="p">}</span> +<a name="line-75"></a> +<a name="line-76"></a><span class="cm">/**</span> +<a name="line-77"></a><span class="cm"> * mateweather_parser_get_localized_value:</span> +<a name="line-78"></a><span class="cm"> * @parser: a #MateWeatherParser</span> +<a name="line-79"></a><span class="cm"> *</span> +<a name="line-80"></a><span class="cm"> * Looks at the name of the element @parser is currently pointing to, and</span> +<a name="line-81"></a><span class="cm"> * returns the content of either that node, or a following node with</span> +<a name="line-82"></a><span class="cm"> * the same name but an "xml:lang" attribute naming one of the locale</span> +<a name="line-83"></a><span class="cm"> * languages. Leaves @parser pointing to the next node after the last</span> +<a name="line-84"></a><span class="cm"> * consecutive element with the same name as the original element.</span> +<a name="line-85"></a><span class="cm"> *</span> +<a name="line-86"></a><span class="cm"> * Return value: the localized (or unlocalized) text, as a</span> +<a name="line-87"></a><span class="cm"> * libxml-allocated string, or %NULL if the node is empty.</span> +<a name="line-88"></a><span class="cm"> **/</span> +<a name="line-89"></a><span class="kt">char</span> <span class="o">*</span> +<a name="line-90"></a><span class="nf">mateweather_parser_get_localized_value</span> <span class="p">(</span><span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">)</span> +<a name="line-91"></a><span class="p">{</span> +<a name="line-92"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">this_language</span><span class="p">;</span> +<a name="line-93"></a> <span class="kt">int</span> <span class="n">best_match</span> <span class="o">=</span> <span class="n">INT_MAX</span><span class="p">;</span> +<a name="line-94"></a><span class="hll"> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">lang</span><span class="p">,</span> <span class="o">*</span><span class="n">tagname</span><span class="p">,</span> <span class="o">*</span><span class="n">next_tagname</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'next_tagname' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'next_tagname' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-95"></a> <span class="n">gboolean</span> <span class="n">keep_going</span><span class="p">;</span> +<a name="line-96"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-97"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span> +<a name="line-98"></a> +<a name="line-99"></a> <span class="n">tagname</span> <span class="o">=</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderConstName</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-100"></a> +<a name="line-101"></a> <span class="k">do</span> <span class="p">{</span> +<a name="line-102"></a> <span class="cm">/* First let's get the language */</span> +<a name="line-103"></a> <span class="n">lang</span> <span class="o">=</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderConstXmlLang</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-104"></a> +<a name="line-105"></a> <span class="k">if</span> <span class="p">(</span><span class="n">lang</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-106"></a> <span class="n">this_language</span> <span class="o">=</span> <span class="s">"C"</span><span class="p">;</span> +<a name="line-107"></a> <span class="k">else</span> +<a name="line-108"></a> <span class="n">this_language</span> <span class="o">=</span> <span class="n">lang</span><span class="p">;</span> +<a name="line-109"></a> +<a name="line-110"></a> <span class="cm">/* the next "node" is text node containing the actual name */</span> +<a name="line-111"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-112"></a> <span class="k">if</span> <span class="p">(</span><span class="n">name</span><span class="p">)</span> +<a name="line-113"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-114"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-115"></a> <span class="p">}</span> +<a name="line-116"></a> +<a name="line-117"></a><span class="hll"> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">parser</span><span class="o">-></span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&&</span> <span class="n">i</span> <span class="o"><</span> <span class="n">best_match</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span><div class="verbose expandable"><span class="error2"><--- Array index 'i' is used before limits check. <span class="marker">[+]</span></span><div class="content">Defensive programming: The variable 'i' is used as an array index before it is checked that is within limits. This can mean that the array might be accessed out of bounds. Reorder conditions such as '(a[i] && i < 10)' to '(i < 10 && a[i])'. That way the array will not be accessed if the index is out of limits.</div></div> +</span><a name="line-118"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">this_language</span><span class="p">))</span> <span class="p">{</span> +<a name="line-119"></a> <span class="cm">/* if we've already encounted a less accurate</span> +<a name="line-120"></a><span class="cm"> translation, then free it */</span> +<a name="line-121"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-122"></a> +<a name="line-123"></a> <span class="n">name</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderValue</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-124"></a> <span class="n">best_match</span> <span class="o">=</span> <span class="n">i</span><span class="p">;</span> +<a name="line-125"></a> +<a name="line-126"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-127"></a> <span class="p">}</span> +<a name="line-128"></a> <span class="p">}</span> +<a name="line-129"></a> +<a name="line-130"></a> <span class="cm">/* Skip to close tag */</span> +<a name="line-131"></a> <span class="k">while</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_END_ELEMENT</span><span class="p">)</span> <span class="p">{</span> +<a name="line-132"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-133"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-134"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-135"></a> <span class="p">}</span> +<a name="line-136"></a> <span class="p">}</span> +<a name="line-137"></a> +<a name="line-138"></a> <span class="cm">/* Skip junk */</span> +<a name="line-139"></a> <span class="k">do</span> <span class="p">{</span> +<a name="line-140"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-141"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-142"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-143"></a> <span class="p">}</span> +<a name="line-144"></a> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_ELEMENT</span> <span class="o">&&</span> +<a name="line-145"></a> <span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_END_ELEMENT</span><span class="p">);</span> +<a name="line-146"></a> +<a name="line-147"></a> <span class="cm">/* if the next tag has the same name then keep going */</span> +<a name="line-148"></a> <span class="n">next_tagname</span> <span class="o">=</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderConstName</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-149"></a> <span class="n">keep_going</span> <span class="o">=</span> <span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">next_tagname</span><span class="p">,</span> <span class="n">tagname</span><span class="p">);</span> +<a name="line-150"></a> +<a name="line-151"></a> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">keep_going</span><span class="p">);</span> +<a name="line-152"></a> +<a name="line-153"></a> <span class="k">return</span> <span class="n">name</span><span class="p">;</span> +<a name="line-154"></a><span class="p">}</span> +<a name="line-155"></a> +<a name="line-156"></a><span class="n">MateWeatherParser</span> <span class="o">*</span> +<a name="line-157"></a><span class="nf">mateweather_parser_new</span> <span class="p">(</span><span class="n">gboolean</span> <span class="n">use_regions</span><span class="p">)</span> +<a name="line-158"></a><span class="p">{</span> +<a name="line-159"></a> <span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">;</span> +<a name="line-160"></a> <span class="kt">int</span> <span class="n">zlib_support</span><span class="p">;</span> +<a name="line-161"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">,</span> <span class="n">keep_going</span><span class="p">;</span> +<a name="line-162"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">filename</span><span class="p">;</span> +<a name="line-163"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">tagname</span><span class="p">,</span> <span class="o">*</span><span class="n">format</span><span class="p">;</span> +<a name="line-164"></a> <span class="kt">time_t</span> <span class="n">now</span><span class="p">;</span> +<a name="line-165"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-166"></a> +<a name="line-167"></a> <span class="n">parser</span> <span class="o">=</span> <span class="n">g_slice_new0</span> <span class="p">(</span><span class="n">MateWeatherParser</span><span class="p">);</span> +<a name="line-168"></a> <span class="n">parser</span><span class="o">-></span><span class="n">use_regions</span> <span class="o">=</span> <span class="n">use_regions</span><span class="p">;</span> +<a name="line-169"></a> <span class="n">parser</span><span class="o">-></span><span class="n">locales</span> <span class="o">=</span> <span class="n">g_get_language_names</span> <span class="p">();</span> +<a name="line-170"></a> +<a name="line-171"></a> <span class="n">zlib_support</span> <span class="o">=</span> <span class="n">xmlHasFeature</span> <span class="p">(</span><span class="n">XML_WITH_ZLIB</span><span class="p">);</span> +<a name="line-172"></a> +<a name="line-173"></a> <span class="cm">/* First try to load a locale-specific XML. It's much faster. */</span> +<a name="line-174"></a> <span class="n">filename</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-175"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">parser</span><span class="o">-></span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-176"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s/Locations.%s.xml"</span><span class="p">,</span> +<a name="line-177"></a> <span class="n">MATEWEATHER_XML_LOCATION_DIR</span><span class="p">,</span> +<a name="line-178"></a> <span class="n">parser</span><span class="o">-></span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-179"></a> +<a name="line-180"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_file_test</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">G_FILE_TEST_IS_REGULAR</span><span class="p">))</span> +<a name="line-181"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-182"></a> +<a name="line-183"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-184"></a> <span class="n">filename</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-185"></a> +<a name="line-186"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">zlib_support</span><span class="p">)</span> +<a name="line-187"></a> <span class="k">continue</span><span class="p">;</span> +<a name="line-188"></a> +<a name="line-189"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s/Locations.%s.xml.gz"</span><span class="p">,</span> +<a name="line-190"></a> <span class="n">MATEWEATHER_XML_LOCATION_DIR</span><span class="p">,</span> +<a name="line-191"></a> <span class="n">parser</span><span class="o">-></span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> +<a name="line-192"></a> +<a name="line-193"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_file_test</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">G_FILE_TEST_IS_REGULAR</span><span class="p">))</span> +<a name="line-194"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-195"></a> +<a name="line-196"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-197"></a> <span class="n">filename</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-198"></a> <span class="p">}</span> +<a name="line-199"></a> +<a name="line-200"></a> <span class="cm">/* Fall back on the file containing either all translations, or only</span> +<a name="line-201"></a><span class="cm"> * the english names (depending on the configure flags).</span> +<a name="line-202"></a><span class="cm"> */</span> +<a name="line-203"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">filename</span><span class="p">)</span> +<a name="line-204"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_build_filename</span> <span class="p">(</span><span class="n">MATEWEATHER_XML_LOCATION_DIR</span><span class="p">,</span> <span class="s">"Locations.xml"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-205"></a> +<a name="line-206"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">g_file_test</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">G_FILE_TEST_IS_REGULAR</span><span class="p">)</span> <span class="o">&&</span> <span class="n">zlib_support</span><span class="p">)</span> <span class="p">{</span> +<a name="line-207"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-208"></a> <span class="n">filename</span> <span class="o">=</span> <span class="n">g_build_filename</span> <span class="p">(</span><span class="n">MATEWEATHER_XML_LOCATION_DIR</span><span class="p">,</span> <span class="s">"Locations.xml.gz"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-209"></a> <span class="p">}</span> +<a name="line-210"></a> +<a name="line-211"></a> <span class="cm">/* Open the xml file containing the different locations */</span> +<a name="line-212"></a> <span class="n">parser</span><span class="o">-></span><span class="n">xml</span> <span class="o">=</span> <span class="n">xmlNewTextReaderFilename</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-213"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">filename</span><span class="p">);</span> +<a name="line-214"></a> +<a name="line-215"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-216"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-217"></a> +<a name="line-218"></a> <span class="cm">/* fast forward to the first element */</span> +<a name="line-219"></a> <span class="k">do</span> <span class="p">{</span> +<a name="line-220"></a> <span class="cm">/* if we encounter a problem here, exit right away */</span> +<a name="line-221"></a> <span class="k">if</span> <span class="p">(</span><span class="n">xmlTextReaderRead</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">)</span> +<a name="line-222"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-223"></a> <span class="p">}</span> <span class="k">while</span> <span class="p">(</span><span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> <span class="o">!=</span> <span class="n">XML_READER_TYPE_ELEMENT</span><span class="p">);</span> +<a name="line-224"></a> +<a name="line-225"></a> <span class="cm">/* check the name and format */</span> +<a name="line-226"></a> <span class="n">tagname</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderName</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-227"></a> <span class="n">keep_going</span> <span class="o">=</span> <span class="n">tagname</span> <span class="o">&&</span> <span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">tagname</span><span class="p">,</span> <span class="s">"mateweather"</span><span class="p">);</span> +<a name="line-228"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">tagname</span><span class="p">);</span> +<a name="line-229"></a> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">keep_going</span><span class="p">)</span> +<a name="line-231"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-232"></a> +<a name="line-233"></a> <span class="n">format</span> <span class="o">=</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="p">)</span> <span class="n">xmlTextReaderGetAttribute</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">,</span> <span class="p">(</span><span class="n">xmlChar</span> <span class="o">*</span><span class="p">)</span> <span class="s">"format"</span><span class="p">);</span> +<a name="line-234"></a> <span class="n">keep_going</span> <span class="o">=</span> <span class="n">format</span> <span class="o">&&</span> <span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">format</span><span class="p">,</span> <span class="s">"1.0"</span><span class="p">);</span> +<a name="line-235"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">format</span><span class="p">);</span> +<a name="line-236"></a> +<a name="line-237"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">keep_going</span><span class="p">)</span> +<a name="line-238"></a> <span class="k">goto</span> <span class="n">error_out</span><span class="p">;</span> +<a name="line-239"></a> +<a name="line-240"></a> <span class="cm">/* Get timestamps for the start and end of this year */</span> +<a name="line-241"></a> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> +<a name="line-242"></a> <span class="n">tm</span> <span class="o">=</span> <span class="o">*</span><span class="n">gmtime</span> <span class="p">(</span><span class="o">&</span><span class="n">now</span><span class="p">);</span> +<a name="line-243"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mon</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-244"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-245"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_hour</span> <span class="o">=</span> <span class="n">tm</span><span class="p">.</span><span class="n">tm_min</span> <span class="o">=</span> <span class="n">tm</span><span class="p">.</span><span class="n">tm_sec</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-246"></a> <span class="n">parser</span><span class="o">-></span><span class="n">year_start</span> <span class="o">=</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-247"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_year</span><span class="o">++</span><span class="p">;</span> +<a name="line-248"></a> <span class="n">parser</span><span class="o">-></span><span class="n">year_end</span> <span class="o">=</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-249"></a> +<a name="line-250"></a> <span class="k">return</span> <span class="n">parser</span><span class="p">;</span> +<a name="line-251"></a> +<a name="line-252"></a><span class="nl">error_out</span><span class="p">:</span> +<a name="line-253"></a> <span class="n">mateweather_parser_free</span> <span class="p">(</span><span class="n">parser</span><span class="p">);</span> +<a name="line-254"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-255"></a><span class="p">}</span> +<a name="line-256"></a> +<a name="line-257"></a><span class="kt">void</span> +<a name="line-258"></a><span class="nf">mateweather_parser_free</span> <span class="p">(</span><span class="n">MateWeatherParser</span> <span class="o">*</span><span class="n">parser</span><span class="p">)</span> +<a name="line-259"></a><span class="p">{</span> +<a name="line-260"></a> <span class="k">if</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">)</span> +<a name="line-261"></a> <span class="n">xmlFreeTextReader</span> <span class="p">(</span><span class="n">parser</span><span class="o">-></span><span class="n">xml</span><span class="p">);</span> +<a name="line-262"></a> <span class="n">g_slice_free</span> <span class="p">(</span><span class="n">MateWeatherParser</span><span class="p">,</span> <span class="n">parser</span><span class="p">);</span> +<a name="line-263"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/3.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/3.html new file mode 100644 index 0000000..0270c0b --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/3.html @@ -0,0 +1,330 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/test_metar.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> test_metar.c</p> +<a href="3.html#line-29"> variableScope 29</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/*</span> +<a name="line-3"></a><span class="cm"> * Simple program to reproduce METAR parsing results from command line</span> +<a name="line-4"></a><span class="cm"> */</span> +<a name="line-5"></a> +<a name="line-6"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-7"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-8"></a><span class="cp">#include</span> <span class="cpf"><stdio.h></span><span class="cp"></span> +<a name="line-9"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-10"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-11"></a> +<a name="line-12"></a><span class="cp">#ifndef BUFLEN</span> +<a name="line-13"></a><span class="cp">#define BUFLEN 4096</span> +<a name="line-14"></a><span class="cp">#endif </span><span class="cm">/* BUFLEN */</span><span class="cp"></span> +<a name="line-15"></a> +<a name="line-16"></a><span class="kt">int</span> +<a name="line-17"></a><span class="nf">main</span> <span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> +<a name="line-18"></a><span class="p">{</span> +<a name="line-19"></a> <span class="kt">FILE</span><span class="o">*</span> <span class="n">stream</span> <span class="o">=</span> <span class="n">stdin</span><span class="p">;</span> +<a name="line-20"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">filename</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-21"></a> <span class="n">GOptionEntry</span> <span class="n">entries</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-22"></a> <span class="p">{</span> <span class="s">"file"</span><span class="p">,</span> <span class="sc">'f'</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">G_OPTION_ARG_FILENAME</span><span class="p">,</span> <span class="o">&</span><span class="n">filename</span><span class="p">,</span> +<a name="line-23"></a> <span class="s">"file constaining metar observations"</span><span class="p">,</span> <span class="nb">NULL</span> <span class="p">},</span> +<a name="line-24"></a> <span class="p">{</span> <span class="nb">NULL</span> <span class="p">}</span> +<a name="line-25"></a> <span class="p">};</span> +<a name="line-26"></a> <span class="n">GOptionContext</span><span class="o">*</span> <span class="n">context</span><span class="p">;</span> +<a name="line-27"></a> <span class="n">GError</span><span class="o">*</span> <span class="n">error</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-28"></a> <span class="kt">char</span> <span class="n">buf</span><span class="p">[</span><span class="n">BUFLEN</span><span class="p">];</span> +<a name="line-29"></a><span class="hll"> <span class="kt">int</span> <span class="n">len</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'len' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'len' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-30"></a> <span class="n">WeatherInfo</span> <span class="n">info</span><span class="p">;</span> +<a name="line-31"></a> +<a name="line-32"></a> <span class="n">context</span> <span class="o">=</span> <span class="n">g_option_context_new</span> <span class="p">(</span><span class="s">"- test libmateweather metar parser"</span><span class="p">);</span> +<a name="line-33"></a> <span class="n">g_option_context_add_main_entries</span> <span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-34"></a> <span class="n">g_option_context_parse</span> <span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="o">&</span><span class="n">argc</span><span class="p">,</span> <span class="o">&</span><span class="n">argv</span><span class="p">,</span> <span class="o">&</span><span class="n">error</span><span class="p">);</span> +<a name="line-35"></a> +<a name="line-36"></a> <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span> +<a name="line-37"></a> <span class="n">perror</span> <span class="p">(</span><span class="n">error</span><span class="o">-></span><span class="n">message</span><span class="p">);</span> +<a name="line-38"></a> <span class="k">return</span> <span class="n">error</span><span class="o">-></span><span class="n">code</span><span class="p">;</span> +<a name="line-39"></a> <span class="p">}</span> +<a name="line-40"></a> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="p">{</span> +<a name="line-41"></a> <span class="n">stream</span> <span class="o">=</span> <span class="n">fopen</span> <span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s">"r"</span><span class="p">);</span> +<a name="line-42"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">stream</span><span class="p">)</span> <span class="p">{</span> +<a name="line-43"></a> <span class="n">perror</span> <span class="p">(</span><span class="s">"fopen"</span><span class="p">);</span> +<a name="line-44"></a> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-45"></a> <span class="p">}</span> +<a name="line-46"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-47"></a> <span class="n">fprintf</span> <span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"Enter a METAR string...</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> +<a name="line-48"></a> <span class="p">}</span> +<a name="line-49"></a> +<a name="line-50"></a> <span class="k">while</span> <span class="p">(</span><span class="n">fgets</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">stream</span><span class="p">))</span> <span class="p">{</span> +<a name="line-51"></a> <span class="n">len</span> <span class="o">=</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">buf</span><span class="p">);</span> +<a name="line-52"></a> <span class="k">if</span> <span class="p">(</span><span class="n">buf</span><span class="p">[</span><span class="n">len</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'\n'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-53"></a> <span class="n">buf</span><span class="p">[</span><span class="o">--</span><span class="n">len</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-54"></a> <span class="p">}</span> +<a name="line-55"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">buf</span><span class="p">);</span> +<a name="line-56"></a> +<a name="line-57"></a> <span class="n">memset</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">info</span><span class="p">));</span> +<a name="line-58"></a> <span class="n">info</span><span class="p">.</span><span class="n">valid</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-59"></a> <span class="n">metar_parse</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="o">&</span><span class="n">info</span><span class="p">);</span> +<a name="line-60"></a> <span class="n">weather_info_to_metric</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">);</span> +<a name="line-61"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">"Returned info:</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> +<a name="line-62"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" update: %s"</span><span class="p">,</span> <span class="n">ctime</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">.</span><span class="n">update</span><span class="p">));</span> +<a name="line-63"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" sky: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_sky</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-64"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" cond: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_conditions</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-65"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" temp: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_temp</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-66"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" dewp: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_dew</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-67"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" wind: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_wind</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-68"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" pressure: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_pressure</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-69"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" vis: %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">weather_info_get_visibility</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">));</span> +<a name="line-70"></a> +<a name="line-71"></a> <span class="c1">// TODO: retrieve location's lat/lon to display sunrise/set times</span> +<a name="line-72"></a> <span class="p">}</span> +<a name="line-73"></a> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-74"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/4.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/4.html new file mode 100644 index 0000000..a9f2c59 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/4.html @@ -0,0 +1,350 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/test_sun_moon.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> test_sun_moon.c</p> +<a href="4.html#line-73"> asctimeCalled 73</a><a href="4.html#line-83"> asctimeCalled 83</a><a href="4.html#line-84"> asctimeCalled 84</a><a href="4.html#line-85"> asctimeCalled 85</a><a href="4.html#line-86"> asctimeCalled 86</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a> +<a name="line-3"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-4"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-5"></a><span class="cp">#include</span> <span class="cpf"><time.h></span><span class="cp"></span> +<a name="line-6"></a> +<a name="line-7"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-8"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-9"></a> +<a name="line-10"></a><span class="kt">int</span> +<a name="line-11"></a><span class="nf">main</span> <span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> +<a name="line-12"></a><span class="p">{</span> +<a name="line-13"></a> <span class="n">WeatherInfo</span> <span class="n">info</span><span class="p">;</span> +<a name="line-14"></a> <span class="n">GOptionContext</span><span class="o">*</span> <span class="n">context</span><span class="p">;</span> +<a name="line-15"></a> <span class="n">GError</span><span class="o">*</span> <span class="n">error</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-16"></a> <span class="n">gdouble</span> <span class="n">latitude</span><span class="p">,</span> <span class="n">longitude</span><span class="p">;</span> +<a name="line-17"></a> <span class="n">WeatherLocation</span> <span class="n">location</span><span class="p">;</span> +<a name="line-18"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">gtime</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-19"></a> <span class="n">GDate</span> <span class="n">gdate</span><span class="p">;</span> +<a name="line-20"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-21"></a> <span class="n">gboolean</span> <span class="n">bmoon</span><span class="p">;</span> +<a name="line-22"></a> <span class="kt">time_t</span> <span class="n">phases</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> +<a name="line-23"></a> <span class="k">const</span> <span class="n">GOptionEntry</span> <span class="n">entries</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-24"></a> <span class="p">{</span> <span class="s">"latitude"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">G_OPTION_ARG_DOUBLE</span><span class="p">,</span> <span class="o">&</span><span class="n">latitude</span><span class="p">,</span> +<a name="line-25"></a> <span class="s">"observer's latitude in degrees north"</span><span class="p">,</span> <span class="nb">NULL</span> <span class="p">},</span> +<a name="line-26"></a> <span class="p">{</span> <span class="s">"longitude"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">G_OPTION_ARG_DOUBLE</span><span class="p">,</span> <span class="o">&</span><span class="n">longitude</span><span class="p">,</span> +<a name="line-27"></a> <span class="s">"observer's longitude in degrees east"</span><span class="p">,</span> <span class="nb">NULL</span> <span class="p">},</span> +<a name="line-28"></a> <span class="p">{</span> <span class="s">"time"</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">G_OPTION_ARG_STRING</span><span class="p">,</span> <span class="o">&</span><span class="n">gtime</span><span class="p">,</span> +<a name="line-29"></a> <span class="s">"time in seconds from Unix epoch"</span><span class="p">,</span> <span class="nb">NULL</span> <span class="p">},</span> +<a name="line-30"></a> <span class="p">{</span> <span class="nb">NULL</span> <span class="p">}</span> +<a name="line-31"></a> <span class="p">};</span> +<a name="line-32"></a> +<a name="line-33"></a> <span class="n">memset</span><span class="p">(</span><span class="o">&</span><span class="n">location</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">WeatherLocation</span><span class="p">));</span> +<a name="line-34"></a> <span class="n">memset</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">WeatherInfo</span><span class="p">));</span> +<a name="line-35"></a> +<a name="line-36"></a> <span class="n">context</span> <span class="o">=</span> <span class="n">g_option_context_new</span> <span class="p">(</span><span class="s">"- test libmateweather sun/moon calculations"</span><span class="p">);</span> +<a name="line-37"></a> <span class="n">g_option_context_add_main_entries</span> <span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-38"></a> <span class="n">g_option_context_parse</span> <span class="p">(</span><span class="n">context</span><span class="p">,</span> <span class="o">&</span><span class="n">argc</span><span class="p">,</span> <span class="o">&</span><span class="n">argv</span><span class="p">,</span> <span class="o">&</span><span class="n">error</span><span class="p">);</span> +<a name="line-39"></a> +<a name="line-40"></a> <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span> +<a name="line-41"></a> <span class="n">perror</span> <span class="p">(</span><span class="n">error</span><span class="o">-></span><span class="n">message</span><span class="p">);</span> +<a name="line-42"></a> <span class="k">return</span> <span class="n">error</span><span class="o">-></span><span class="n">code</span><span class="p">;</span> +<a name="line-43"></a> <span class="p">}</span> +<a name="line-44"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">latitude</span> <span class="o"><</span> <span class="o">-</span><span class="mf">90.</span> <span class="o">||</span> <span class="n">latitude</span> <span class="o">></span> <span class="mf">90.</span><span class="p">)</span> <span class="p">{</span> +<a name="line-45"></a> <span class="n">perror</span> <span class="p">(</span><span class="s">"invalid latitude: should be [-90 .. 90]"</span><span class="p">);</span> +<a name="line-46"></a> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-47"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">longitude</span> <span class="o"><</span> <span class="o">-</span><span class="mf">180.</span> <span class="o">||</span> <span class="n">longitude</span> <span class="o">></span> <span class="mf">180.</span><span class="p">)</span> <span class="p">{</span> +<a name="line-48"></a> <span class="n">perror</span> <span class="p">(</span><span class="s">"invalid longitude: should be [-180 .. 180]"</span><span class="p">);</span> +<a name="line-49"></a> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-50"></a> <span class="p">}</span> +<a name="line-51"></a> +<a name="line-52"></a> <span class="n">location</span><span class="p">.</span><span class="n">latitude</span> <span class="o">=</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="n">latitude</span><span class="p">);</span> +<a name="line-53"></a> <span class="n">location</span><span class="p">.</span><span class="n">longitude</span> <span class="o">=</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="n">longitude</span><span class="p">);</span> +<a name="line-54"></a> <span class="n">location</span><span class="p">.</span><span class="n">latlon_valid</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-55"></a> <span class="n">info</span><span class="p">.</span><span class="n">location</span> <span class="o">=</span> <span class="o">&</span><span class="n">location</span><span class="p">;</span> +<a name="line-56"></a> <span class="n">info</span><span class="p">.</span><span class="n">valid</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-57"></a> +<a name="line-58"></a> <span class="k">if</span> <span class="p">(</span><span class="n">gtime</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-59"></a> <span class="c1">// printf(" gtime=%s\n", gtime);</span> +<a name="line-60"></a> <span class="n">g_date_set_parse</span><span class="p">(</span><span class="o">&</span><span class="n">gdate</span><span class="p">,</span> <span class="n">gtime</span><span class="p">);</span> +<a name="line-61"></a> <span class="n">g_date_to_struct_tm</span><span class="p">(</span><span class="o">&</span><span class="n">gdate</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-62"></a> <span class="n">info</span><span class="p">.</span><span class="n">update</span> <span class="o">=</span> <span class="n">mktime</span><span class="p">(</span><span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-63"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-64"></a> <span class="n">info</span><span class="p">.</span><span class="n">update</span> <span class="o">=</span> <span class="n">time</span><span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> +<a name="line-65"></a> <span class="p">}</span> +<a name="line-66"></a> +<a name="line-67"></a> <span class="n">calc_sun_time</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="n">info</span><span class="p">.</span><span class="n">update</span><span class="p">);</span> +<a name="line-68"></a> <span class="n">bmoon</span> <span class="o">=</span> <span class="n">calc_moon</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">);</span> +<a name="line-69"></a> +<a name="line-70"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">" Latitude %7.3f %c Longitude %7.3f %c for %s All times UTC</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> +<a name="line-71"></a> <span class="n">fabs</span><span class="p">(</span><span class="n">latitude</span><span class="p">),</span> <span class="p">(</span><span class="n">latitude</span> <span class="o">>=</span> <span class="mf">0.</span> <span class="o">?</span> <span class="sc">'N'</span> <span class="o">:</span> <span class="sc">'S'</span><span class="p">),</span> +<a name="line-72"></a> <span class="n">fabs</span><span class="p">(</span><span class="n">longitude</span><span class="p">),</span> <span class="p">(</span><span class="n">longitude</span> <span class="o">>=</span> <span class="mf">0.</span> <span class="o">?</span> <span class="sc">'E'</span> <span class="o">:</span> <span class="sc">'W'</span><span class="p">),</span> +<a name="line-73"></a><span class="hll"> <span class="n">asctime</span><span class="p">(</span><span class="n">gmtime</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">.</span><span class="n">update</span><span class="p">)));</span><span class="error2"><--- Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</span> +</span><a name="line-74"></a> <span class="n">printf</span><span class="p">(</span><span class="s">"sunrise: %s"</span><span class="p">,</span> +<a name="line-75"></a> <span class="p">(</span><span class="n">info</span><span class="p">.</span><span class="n">sunriseValid</span> <span class="o">?</span> <span class="n">ctime</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">.</span><span class="n">sunrise</span><span class="p">)</span> <span class="o">:</span> <span class="s">"(invalid)</span><span class="se">\n</span><span class="s">"</span><span class="p">));</span> +<a name="line-76"></a> <span class="n">printf</span><span class="p">(</span><span class="s">"sunset: %s"</span><span class="p">,</span> +<a name="line-77"></a> <span class="p">(</span><span class="n">info</span><span class="p">.</span><span class="n">sunsetValid</span> <span class="o">?</span> <span class="n">ctime</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">.</span><span class="n">sunset</span><span class="p">)</span> <span class="o">:</span> <span class="s">"(invalid)</span><span class="se">\n</span><span class="s">"</span><span class="p">));</span> +<a name="line-78"></a> <span class="k">if</span> <span class="p">(</span><span class="n">bmoon</span><span class="p">)</span> <span class="p">{</span> +<a name="line-79"></a> <span class="n">printf</span><span class="p">(</span><span class="s">"moonphase: %g</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">info</span><span class="p">.</span><span class="n">moonphase</span><span class="p">);</span> +<a name="line-80"></a> <span class="n">printf</span><span class="p">(</span><span class="s">"moonlat: %g</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">info</span><span class="p">.</span><span class="n">moonlatitude</span><span class="p">);</span> +<a name="line-81"></a> +<a name="line-82"></a> <span class="k">if</span> <span class="p">(</span><span class="n">calc_moon_phases</span><span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="p">,</span> <span class="n">phases</span><span class="p">))</span> <span class="p">{</span> +<a name="line-83"></a><span class="hll"> <span class="n">printf</span><span class="p">(</span><span class="s">" New: %s"</span><span class="p">,</span> <span class="n">asctime</span><span class="p">(</span><span class="n">gmtime</span><span class="p">(</span><span class="o">&</span><span class="n">phases</span><span class="p">[</span><span class="mi">0</span><span class="p">])));</span><span class="error2"><--- Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</span> +</span><a name="line-84"></a><span class="hll"> <span class="n">printf</span><span class="p">(</span><span class="s">" 1stQ: %s"</span><span class="p">,</span> <span class="n">asctime</span><span class="p">(</span><span class="n">gmtime</span><span class="p">(</span><span class="o">&</span><span class="n">phases</span><span class="p">[</span><span class="mi">1</span><span class="p">])));</span><span class="error2"><--- Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</span> +</span><a name="line-85"></a><span class="hll"> <span class="n">printf</span><span class="p">(</span><span class="s">" Full: %s"</span><span class="p">,</span> <span class="n">asctime</span><span class="p">(</span><span class="n">gmtime</span><span class="p">(</span><span class="o">&</span><span class="n">phases</span><span class="p">[</span><span class="mi">2</span><span class="p">])));</span><span class="error2"><--- Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</span> +</span><a name="line-86"></a><span class="hll"> <span class="n">printf</span><span class="p">(</span><span class="s">" 3rdQ: %s"</span><span class="p">,</span> <span class="n">asctime</span><span class="p">(</span><span class="n">gmtime</span><span class="p">(</span><span class="o">&</span><span class="n">phases</span><span class="p">[</span><span class="mi">3</span><span class="p">])));</span><span class="error2"><--- Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</span> +</span><a name="line-87"></a> <span class="p">}</span> +<a name="line-88"></a> <span class="p">}</span> +<a name="line-89"></a> <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-90"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/5.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/5.html new file mode 100644 index 0000000..594bb07 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/5.html @@ -0,0 +1,336 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/weather-bom.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> weather-bom.c</p> +<a href="5.html#line-32"> variableScope 32</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* weather-bom.c - Australian Bureau of Meteorology forecast source</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * This program is free software; you can redistribute it and/or</span> +<a name="line-5"></a><span class="cm"> * modify it under the terms of the GNU General Public License as</span> +<a name="line-6"></a><span class="cm"> * published by the Free Software Foundation; either version 2 of the</span> +<a name="line-7"></a><span class="cm"> * License, or (at your option) any later version.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * This program is distributed in the hope that it will be useful, but</span> +<a name="line-10"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-11"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-12"></a><span class="cm"> * General Public License for more details.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-15"></a><span class="cm"> * along with this program; if not, see</span> +<a name="line-16"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-17"></a><span class="cm"> */</span> +<a name="line-18"></a> +<a name="line-19"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-20"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-21"></a><span class="cp">#endif</span> +<a name="line-22"></a> +<a name="line-23"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-24"></a> +<a name="line-25"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">"weather.h"</span><span class="cp"></span> +<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-28"></a> +<a name="line-29"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-30"></a><span class="nf">bom_finish</span> <span class="p">(</span><span class="n">SoupSession</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">data</span><span class="p">)</span> +<a name="line-31"></a><span class="p">{</span> +<a name="line-32"></a><span class="hll"> <span class="kt">char</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">*</span><span class="n">rp</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'rp' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'rp' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-33"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="p">)</span><span class="n">data</span><span class="p">;</span> +<a name="line-34"></a> +<a name="line-35"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-36"></a> +<a name="line-37"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">SOUP_STATUS_IS_SUCCESSFUL</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">status_code</span><span class="p">))</span> <span class="p">{</span> +<a name="line-38"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">"Failed to get BOM forecast data: %d %s.</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> +<a name="line-39"></a> <span class="n">msg</span><span class="o">-></span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-></span><span class="n">reason_phrase</span><span class="p">);</span> +<a name="line-40"></a> <span class="n">request_done</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-41"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-42"></a> <span class="p">}</span> +<a name="line-43"></a> +<a name="line-44"></a> <span class="n">p</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">response_body</span><span class="o">-></span><span class="n">data</span><span class="p">,</span> <span class="s">"Forecast for the rest"</span><span class="p">);</span> +<a name="line-45"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-46"></a> <span class="n">rp</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">"The next routine forecast will be issued"</span><span class="p">);</span> +<a name="line-47"></a> <span class="k">if</span> <span class="p">(</span><span class="n">rp</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-48"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">p</span><span class="p">);</span> +<a name="line-49"></a> <span class="k">else</span> +<a name="line-50"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="n">g_strndup</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">rp</span> <span class="o">-</span> <span class="n">p</span><span class="p">);</span> +<a name="line-51"></a> <span class="p">}</span> +<a name="line-52"></a> +<a name="line-53"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-54"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">response_body</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a name="line-55"></a> +<a name="line-56"></a> <span class="n">g_print</span> <span class="p">(</span><span class="s">"%s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">);</span> +<a name="line-57"></a> <span class="n">request_done</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-58"></a><span class="p">}</span> +<a name="line-59"></a> +<a name="line-60"></a><span class="kt">void</span> +<a name="line-61"></a><span class="nf">bom_start_open</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-62"></a><span class="p">{</span> +<a name="line-63"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span> +<a name="line-64"></a> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">;</span> +<a name="line-65"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span> +<a name="line-66"></a> +<a name="line-67"></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">;</span> +<a name="line-68"></a> +<a name="line-69"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"http://www.bom.gov.au/fwo/%s.txt"</span><span class="p">,</span> +<a name="line-70"></a> <span class="n">loc</span><span class="o">-></span><span class="n">zone</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-71"></a> +<a name="line-72"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_message_new</span> <span class="p">(</span><span class="s">"GET"</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span> +<a name="line-73"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">bom_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span> +<a name="line-74"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span> +<a name="line-75"></a> +<a name="line-76"></a> <span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span> +<a name="line-77"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/6.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/6.html new file mode 100644 index 0000000..a768bf8 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/6.html @@ -0,0 +1,1324 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/weather-metar.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> weather-metar.c</p> +<a href="6.html#line-115"> knownConditionTrueFalse 115</a><a href="6.html#line-115"> knownConditionTrueFalse 115</a><a href="6.html#line-117"> knownConditionTrueFalse 117</a><a href="6.html#line-145"> knownConditionTrueFalse 145</a><a href="6.html#line-454"> unreadVariable 454</a><a href="6.html#line-493"> variableScope 493</a><a href="6.html#line-494"> variableScope 494</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* weather-metar.c - Weather server functions (METAR)</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * This program is free software; you can redistribute it and/or</span> +<a name="line-5"></a><span class="cm"> * modify it under the terms of the GNU General Public License as</span> +<a name="line-6"></a><span class="cm"> * published by the Free Software Foundation; either version 2 of the</span> +<a name="line-7"></a><span class="cm"> * License, or (at your option) any later version.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * This program is distributed in the hope that it will be useful, but</span> +<a name="line-10"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-11"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-12"></a><span class="cm"> * General Public License for more details.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-15"></a><span class="cm"> * along with this program; if not, see</span> +<a name="line-16"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-17"></a><span class="cm"> */</span> +<a name="line-18"></a> +<a name="line-19"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-20"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-21"></a><span class="cp">#endif</span> +<a name="line-22"></a> +<a name="line-23"></a><span class="cp">#include</span> <span class="cpf"><stdlib.h></span><span class="cp"></span> +<a name="line-24"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><sys/types.h></span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf"><regex.h></span><span class="cp"></span> +<a name="line-27"></a> +<a name="line-28"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">"weather.h"</span><span class="cp"></span> +<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-31"></a> +<a name="line-32"></a><span class="k">enum</span> <span class="p">{</span> +<a name="line-33"></a> <span class="n">TIME_RE</span><span class="p">,</span> +<a name="line-34"></a> <span class="n">WIND_RE</span><span class="p">,</span> +<a name="line-35"></a> <span class="n">VIS_RE</span><span class="p">,</span> +<a name="line-36"></a> <span class="n">COND_RE</span><span class="p">,</span> +<a name="line-37"></a> <span class="n">CLOUD_RE</span><span class="p">,</span> +<a name="line-38"></a> <span class="n">TEMP_RE</span><span class="p">,</span> +<a name="line-39"></a> <span class="n">PRES_RE</span><span class="p">,</span> +<a name="line-40"></a> +<a name="line-41"></a> <span class="n">RE_NUM</span> +<a name="line-42"></a><span class="p">};</span> +<a name="line-43"></a> +<a name="line-44"></a><span class="cm">/* Return time of weather report as secs since epoch UTC */</span> +<a name="line-45"></a><span class="k">static</span> <span class="kt">time_t</span> +<a name="line-46"></a><span class="nf">make_time</span> <span class="p">(</span><span class="n">gint</span> <span class="n">utcDate</span><span class="p">,</span> <span class="n">gint</span> <span class="n">utcHour</span><span class="p">,</span> <span class="n">gint</span> <span class="n">utcMin</span><span class="p">)</span> +<a name="line-47"></a><span class="p">{</span> +<a name="line-48"></a> <span class="k">const</span> <span class="kt">time_t</span> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> +<a name="line-49"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-50"></a> +<a name="line-51"></a> <span class="n">localtime_r</span> <span class="p">(</span><span class="o">&</span><span class="n">now</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-52"></a> +<a name="line-53"></a> <span class="cm">/* If last reading took place just before midnight UTC on the</span> +<a name="line-54"></a><span class="cm"> * first, adjust the date downward to allow for the month</span> +<a name="line-55"></a><span class="cm"> * change-over. This ASSUMES that the reading won't be more than</span> +<a name="line-56"></a><span class="cm"> * 24 hrs old! */</span> +<a name="line-57"></a> <span class="k">if</span> <span class="p">((</span><span class="n">utcDate</span> <span class="o">></span> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span> <span class="o">==</span> <span class="mi">1</span><span class="p">))</span> <span class="p">{</span> +<a name="line-58"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="cm">/* mktime knows this is the last day of the previous</span> +<a name="line-59"></a><span class="cm"> * month. */</span> +<a name="line-60"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-61"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span> <span class="o">=</span> <span class="n">utcDate</span><span class="p">;</span> +<a name="line-62"></a> <span class="p">}</span> +<a name="line-63"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_hour</span> <span class="o">=</span> <span class="n">utcHour</span><span class="p">;</span> +<a name="line-64"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_min</span> <span class="o">=</span> <span class="n">utcMin</span><span class="p">;</span> +<a name="line-65"></a> <span class="n">tm</span><span class="p">.</span><span class="n">tm_sec</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-66"></a> +<a name="line-67"></a> <span class="cm">/* mktime() assumes value is local, not UTC. Use tm_gmtoff to compensate */</span> +<a name="line-68"></a><span class="cp">#ifdef HAVE_TM_TM_GMOFF</span> +<a name="line-69"></a> <span class="k">return</span> <span class="n">tm</span><span class="p">.</span><span class="n">tm_gmtoff</span> <span class="o">+</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-70"></a><span class="cp">#elif defined HAVE_TIMEZONE</span> +<a name="line-71"></a> <span class="k">return</span> <span class="n">timezone</span> <span class="o">+</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-72"></a><span class="cp">#endif</span> +<a name="line-73"></a><span class="p">}</span> +<a name="line-74"></a> +<a name="line-75"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-76"></a><span class="nf">metar_tok_time</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-77"></a><span class="p">{</span> +<a name="line-78"></a> <span class="n">gint</span> <span class="n">day</span><span class="p">,</span> <span class="n">hr</span><span class="p">,</span> <span class="n">min</span><span class="p">;</span> +<a name="line-79"></a> +<a name="line-80"></a> <span class="n">sscanf</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="s">"%2u%2u%2u"</span><span class="p">,</span> <span class="o">&</span><span class="n">day</span><span class="p">,</span> <span class="o">&</span><span class="n">hr</span><span class="p">,</span> <span class="o">&</span><span class="n">min</span><span class="p">);</span> +<a name="line-81"></a> <span class="n">info</span><span class="o">-></span><span class="n">update</span> <span class="o">=</span> <span class="n">make_time</span> <span class="p">(</span><span class="n">day</span><span class="p">,</span> <span class="n">hr</span><span class="p">,</span> <span class="n">min</span><span class="p">);</span> +<a name="line-82"></a><span class="p">}</span> +<a name="line-83"></a> +<a name="line-84"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-85"></a><span class="nf">metar_tok_wind</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-86"></a><span class="p">{</span> +<a name="line-87"></a> <span class="n">gchar</span> <span class="n">sdir</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">sspd</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">sgust</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> +<a name="line-88"></a> <span class="n">gint</span> <span class="n">dir</span><span class="p">,</span> <span class="n">spd</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-89"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">gustp</span><span class="p">;</span> +<a name="line-90"></a> <span class="kt">size_t</span> <span class="n">glen</span><span class="p">;</span> +<a name="line-91"></a> +<a name="line-92"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sdir</span><span class="p">,</span> <span class="n">tokp</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-93"></a> <span class="n">sdir</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-94"></a> <span class="n">dir</span> <span class="o">=</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sdir</span><span class="p">,</span> <span class="s">"VRB"</span><span class="p">))</span> <span class="o">?</span> <span class="o">-</span><span class="mi">1</span> <span class="o">:</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sdir</span><span class="p">);</span> +<a name="line-95"></a> +<a name="line-96"></a> <span class="n">memset</span> <span class="p">(</span><span class="n">sspd</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">sspd</span><span class="p">));</span> +<a name="line-97"></a> <span class="n">glen</span> <span class="o">=</span> <span class="n">strspn</span> <span class="p">(</span><span class="n">tokp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">,</span> <span class="n">CONST_DIGITS</span><span class="p">);</span> +<a name="line-98"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sspd</span><span class="p">,</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">,</span> <span class="n">glen</span><span class="p">);</span> +<a name="line-99"></a> <span class="n">spd</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sspd</span><span class="p">);</span> +<a name="line-100"></a> <span class="n">tokp</span> <span class="o">+=</span> <span class="n">glen</span> <span class="o">+</span> <span class="mi">3</span><span class="p">;</span> +<a name="line-101"></a> +<a name="line-102"></a> <span class="n">gustp</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="sc">'G'</span><span class="p">);</span> +<a name="line-103"></a> <span class="k">if</span> <span class="p">(</span><span class="n">gustp</span><span class="p">)</span> <span class="p">{</span> +<a name="line-104"></a> <span class="n">memset</span> <span class="p">(</span><span class="n">sgust</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">sgust</span><span class="p">));</span> +<a name="line-105"></a> <span class="n">glen</span> <span class="o">=</span> <span class="n">strspn</span> <span class="p">(</span><span class="n">gustp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">CONST_DIGITS</span><span class="p">);</span> +<a name="line-106"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sgust</span><span class="p">,</span> <span class="n">gustp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">glen</span><span class="p">);</span> +<a name="line-107"></a> <span class="n">tokp</span> <span class="o">=</span> <span class="n">gustp</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">glen</span><span class="p">;</span> +<a name="line-108"></a> <span class="p">}</span> +<a name="line-109"></a> +<a name="line-110"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="s">"MPS"</span><span class="p">))</span> +<a name="line-111"></a> <span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o">=</span> <span class="n">WINDSPEED_MS_TO_KNOTS</span> <span class="p">((</span><span class="n">WeatherWindSpeed</span><span class="p">)</span><span class="n">spd</span><span class="p">);</span> +<a name="line-112"></a> <span class="k">else</span> +<a name="line-113"></a> <span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherWindSpeed</span><span class="p">)</span><span class="n">spd</span><span class="p">;</span> +<a name="line-114"></a> +<a name="line-115"></a><span class="hll"> <span class="k">if</span> <span class="p">((</span><span class="mi">349</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">11</span><span class="p">))</span><span class="error2"><--- Assuming that condition 'dir<=11' is not redundant</span><span class="error2"><--- Assuming that condition '349<=dir' is not redundant</span> +</span><a name="line-116"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_N</span><span class="p">;</span> +<a name="line-117"></a><span class="hll"> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">12</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">33</span><span class="p">))</span><span class="error2"><--- Condition '12<=dir' is always true</span> +</span><a name="line-118"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_NNE</span><span class="p">;</span> +<a name="line-119"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">34</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">56</span><span class="p">))</span> +<a name="line-120"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_NE</span><span class="p">;</span> +<a name="line-121"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">57</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">78</span><span class="p">))</span> +<a name="line-122"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_ENE</span><span class="p">;</span> +<a name="line-123"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">79</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">101</span><span class="p">))</span> +<a name="line-124"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_E</span><span class="p">;</span> +<a name="line-125"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">102</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">123</span><span class="p">))</span> +<a name="line-126"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_ESE</span><span class="p">;</span> +<a name="line-127"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">124</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">146</span><span class="p">))</span> +<a name="line-128"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_SE</span><span class="p">;</span> +<a name="line-129"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">147</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">168</span><span class="p">))</span> +<a name="line-130"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_SSE</span><span class="p">;</span> +<a name="line-131"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">169</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">191</span><span class="p">))</span> +<a name="line-132"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_S</span><span class="p">;</span> +<a name="line-133"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">192</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">213</span><span class="p">))</span> +<a name="line-134"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_SSW</span><span class="p">;</span> +<a name="line-135"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">214</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">236</span><span class="p">))</span> +<a name="line-136"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_SW</span><span class="p">;</span> +<a name="line-137"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">237</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">258</span><span class="p">))</span> +<a name="line-138"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_WSW</span><span class="p">;</span> +<a name="line-139"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">259</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">281</span><span class="p">))</span> +<a name="line-140"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_W</span><span class="p">;</span> +<a name="line-141"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">282</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">303</span><span class="p">))</span> +<a name="line-142"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_WNW</span><span class="p">;</span> +<a name="line-143"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">304</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">326</span><span class="p">))</span> +<a name="line-144"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_NW</span><span class="p">;</span> +<a name="line-145"></a><span class="hll"> <span class="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">327</span> <span class="o"><=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dir</span> <span class="o"><=</span> <span class="mi">348</span><span class="p">))</span><span class="error2"><--- Condition 'dir<=348' is always true</span> +</span><a name="line-146"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="n">WIND_NNW</span><span class="p">;</span> +<a name="line-147"></a><span class="p">}</span> +<a name="line-148"></a> +<a name="line-149"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-150"></a><span class="nf">metar_tok_vis</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-151"></a><span class="p">{</span> +<a name="line-152"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pfrac</span><span class="p">,</span> <span class="o">*</span><span class="n">pend</span><span class="p">,</span> <span class="o">*</span><span class="n">psp</span><span class="p">;</span> +<a name="line-153"></a> <span class="n">gchar</span> <span class="n">sval</span><span class="p">[</span><span class="mi">6</span><span class="p">];</span> +<a name="line-154"></a> <span class="n">gint</span> <span class="n">num</span><span class="p">,</span> <span class="n">den</span><span class="p">,</span> <span class="n">val</span><span class="p">;</span> +<a name="line-155"></a> +<a name="line-156"></a> <span class="n">memset</span> <span class="p">(</span><span class="n">sval</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">sval</span><span class="p">));</span> +<a name="line-157"></a> +<a name="line-158"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span><span class="s">"CAVOK"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-159"></a> <span class="c1">// "Ceiling And Visibility OK": visibility >= 10 KM</span> +<a name="line-160"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span><span class="o">=</span><span class="mf">10000.</span> <span class="o">/</span> <span class="n">VISIBILITY_SM_TO_M</span> <span class="p">(</span><span class="mf">1.</span><span class="p">);</span> +<a name="line-161"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_CLEAR</span><span class="p">;</span> +<a name="line-162"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="mi">0</span> <span class="o">!=</span> <span class="p">(</span><span class="n">pend</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="s">"SM"</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-163"></a> <span class="c1">// US observation: field ends with "SM"</span> +<a name="line-164"></a> <span class="n">pfrac</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="sc">'/'</span><span class="p">);</span> +<a name="line-165"></a> <span class="k">if</span> <span class="p">(</span><span class="n">pfrac</span><span class="p">)</span> <span class="p">{</span> +<a name="line-166"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'M'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-167"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">=</span> <span class="mf">0.001</span><span class="p">;</span> +<a name="line-168"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-169"></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">pfrac</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">-</span> <span class="sc">'0'</span><span class="p">);</span> +<a name="line-170"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sval</span><span class="p">,</span> <span class="n">pfrac</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">pend</span> <span class="o">-</span> <span class="n">pfrac</span> <span class="o">-</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-171"></a> <span class="n">den</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sval</span><span class="p">);</span> +<a name="line-172"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">=</span> +<a name="line-173"></a> <span class="p">((</span><span class="n">WeatherVisibility</span><span class="p">)</span><span class="n">num</span> <span class="o">/</span> <span class="p">((</span><span class="n">WeatherVisibility</span><span class="p">)</span><span class="n">den</span><span class="p">));</span> +<a name="line-174"></a> +<a name="line-175"></a> <span class="n">psp</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="sc">' '</span><span class="p">);</span> +<a name="line-176"></a> <span class="k">if</span> <span class="p">(</span><span class="n">psp</span><span class="p">)</span> <span class="p">{</span> +<a name="line-177"></a> <span class="o">*</span><span class="n">psp</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-178"></a> <span class="n">val</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">tokp</span><span class="p">);</span> +<a name="line-179"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">+=</span> <span class="p">(</span><span class="n">WeatherVisibility</span><span class="p">)</span><span class="n">val</span><span class="p">;</span> +<a name="line-180"></a> <span class="p">}</span> +<a name="line-181"></a> <span class="p">}</span> +<a name="line-182"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-183"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sval</span><span class="p">,</span> <span class="n">tokp</span><span class="p">,</span> <span class="n">pend</span> <span class="o">-</span> <span class="n">tokp</span><span class="p">);</span> +<a name="line-184"></a> <span class="n">val</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sval</span><span class="p">);</span> +<a name="line-185"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherVisibility</span><span class="p">)</span><span class="n">val</span><span class="p">;</span> +<a name="line-186"></a> <span class="p">}</span> +<a name="line-187"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-188"></a> <span class="c1">// International observation: NNNN(DD NNNNDD)?</span> +<a name="line-189"></a> <span class="c1">// For now: use only the minimum visibility and ignore its direction</span> +<a name="line-190"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sval</span><span class="p">,</span> <span class="n">tokp</span><span class="p">,</span> <span class="n">strspn</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="n">CONST_DIGITS</span><span class="p">));</span> +<a name="line-191"></a> <span class="n">val</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sval</span><span class="p">);</span> +<a name="line-192"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherVisibility</span><span class="p">)</span><span class="n">val</span> <span class="o">/</span> <span class="n">VISIBILITY_SM_TO_M</span> <span class="p">(</span><span class="mf">1.</span><span class="p">);</span> +<a name="line-193"></a> <span class="p">}</span> +<a name="line-194"></a><span class="p">}</span> +<a name="line-195"></a> +<a name="line-196"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-197"></a><span class="nf">metar_tok_cloud</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-198"></a><span class="p">{</span> +<a name="line-199"></a> <span class="n">gchar</span> <span class="n">stype</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> <span class="n">salt</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> +<a name="line-200"></a> +<a name="line-201"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="n">tokp</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-202"></a> <span class="n">stype</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-203"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strlen</span> <span class="p">(</span><span class="n">tokp</span><span class="p">)</span> <span class="o">==</span> <span class="mi">6</span><span class="p">)</span> <span class="p">{</span> +<a name="line-204"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">salt</span><span class="p">,</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">);</span> +<a name="line-205"></a> <span class="n">salt</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-206"></a> <span class="p">}</span> +<a name="line-207"></a> +<a name="line-208"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"CLR"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-209"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_CLEAR</span><span class="p">;</span> +<a name="line-210"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"SKC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-211"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_CLEAR</span><span class="p">;</span> +<a name="line-212"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"NSC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-213"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_CLEAR</span><span class="p">;</span> +<a name="line-214"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"BKN"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-215"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_BROKEN</span><span class="p">;</span> +<a name="line-216"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"SCT"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-217"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_SCATTERED</span><span class="p">;</span> +<a name="line-218"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"FEW"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-219"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_FEW</span><span class="p">;</span> +<a name="line-220"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">stype</span><span class="p">,</span> <span class="s">"OVC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-221"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="n">SKY_OVERCAST</span><span class="p">;</span> +<a name="line-222"></a> <span class="p">}</span> +<a name="line-223"></a><span class="p">}</span> +<a name="line-224"></a> +<a name="line-225"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-226"></a><span class="nf">metar_tok_pres</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-227"></a><span class="p">{</span> +<a name="line-228"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'A'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-229"></a> <span class="n">gchar</span> <span class="n">sintg</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">sfract</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span> +<a name="line-230"></a> <span class="n">gint</span> <span class="n">intg</span><span class="p">,</span> <span class="n">fract</span><span class="p">;</span> +<a name="line-231"></a> +<a name="line-232"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sintg</span><span class="p">,</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a name="line-233"></a> <span class="n">sintg</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-234"></a> <span class="n">intg</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sintg</span><span class="p">);</span> +<a name="line-235"></a> +<a name="line-236"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sfract</span><span class="p">,</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> +<a name="line-237"></a> <span class="n">sfract</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-238"></a> <span class="n">fract</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">sfract</span><span class="p">);</span> +<a name="line-239"></a> +<a name="line-240"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherPressure</span><span class="p">)</span><span class="n">intg</span> <span class="o">+</span> <span class="p">(((</span><span class="n">WeatherPressure</span><span class="p">)</span><span class="n">fract</span><span class="p">)</span><span class="o">/</span><span class="mf">100.0</span><span class="p">);</span> +<a name="line-241"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="cm">/* *tokp == 'Q' */</span> +<a name="line-242"></a> <span class="n">gchar</span> <span class="n">spres</span><span class="p">[</span><span class="mi">5</span><span class="p">];</span> +<a name="line-243"></a> <span class="n">gint</span> <span class="n">pres</span><span class="p">;</span> +<a name="line-244"></a> +<a name="line-245"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">spres</span><span class="p">,</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">);</span> +<a name="line-246"></a> <span class="n">spres</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-247"></a> <span class="n">pres</span> <span class="o">=</span> <span class="n">atoi</span> <span class="p">(</span><span class="n">spres</span><span class="p">);</span> +<a name="line-248"></a> +<a name="line-249"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure</span> <span class="o">=</span> <span class="n">PRESSURE_MBAR_TO_INCH</span> <span class="p">((</span><span class="n">WeatherPressure</span><span class="p">)</span><span class="n">pres</span><span class="p">);</span> +<a name="line-250"></a> <span class="p">}</span> +<a name="line-251"></a><span class="p">}</span> +<a name="line-252"></a> +<a name="line-253"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-254"></a><span class="nf">metar_tok_temp</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-255"></a><span class="p">{</span> +<a name="line-256"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">ptemp</span><span class="p">,</span> <span class="o">*</span><span class="n">pdew</span><span class="p">,</span> <span class="o">*</span><span class="n">psep</span><span class="p">;</span> +<a name="line-257"></a> +<a name="line-258"></a> <span class="n">psep</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="sc">'/'</span><span class="p">);</span> +<a name="line-259"></a> <span class="o">*</span><span class="n">psep</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-260"></a> <span class="n">ptemp</span> <span class="o">=</span> <span class="n">tokp</span><span class="p">;</span> +<a name="line-261"></a> <span class="n">pdew</span> <span class="o">=</span> <span class="n">psep</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-262"></a> +<a name="line-263"></a> <span class="n">info</span><span class="o">-></span><span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="o">*</span><span class="n">ptemp</span> <span class="o">==</span> <span class="sc">'M'</span><span class="p">)</span> <span class="o">?</span> <span class="n">TEMP_C_TO_F</span> <span class="p">(</span><span class="o">-</span><span class="n">atoi</span> <span class="p">(</span><span class="n">ptemp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> +<a name="line-264"></a> <span class="o">:</span> <span class="n">TEMP_C_TO_F</span> <span class="p">(</span><span class="n">atoi</span> <span class="p">(</span><span class="n">ptemp</span><span class="p">));</span> +<a name="line-265"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">pdew</span><span class="p">)</span> <span class="p">{</span> +<a name="line-266"></a> <span class="n">info</span><span class="o">-></span><span class="n">dew</span> <span class="o">=</span> <span class="p">(</span><span class="o">*</span><span class="n">pdew</span> <span class="o">==</span> <span class="sc">'M'</span><span class="p">)</span> <span class="o">?</span> <span class="n">TEMP_C_TO_F</span> <span class="p">(</span><span class="o">-</span><span class="n">atoi</span> <span class="p">(</span><span class="n">pdew</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> +<a name="line-267"></a> <span class="o">:</span> <span class="n">TEMP_C_TO_F</span> <span class="p">(</span><span class="n">atoi</span> <span class="p">(</span><span class="n">pdew</span><span class="p">));</span> +<a name="line-268"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-269"></a> <span class="n">info</span><span class="o">-></span><span class="n">dew</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.0</span><span class="p">;</span> +<a name="line-270"></a> <span class="p">}</span> +<a name="line-271"></a><span class="p">}</span> +<a name="line-272"></a> +<a name="line-273"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-274"></a><span class="nf">metar_tok_cond</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-275"></a><span class="p">{</span> +<a name="line-276"></a> <span class="n">gchar</span> <span class="n">squal</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> <span class="n">sphen</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span> +<a name="line-277"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">pphen</span><span class="p">;</span> +<a name="line-278"></a> +<a name="line-279"></a> <span class="k">if</span> <span class="p">((</span><span class="n">strlen</span> <span class="p">(</span><span class="n">tokp</span><span class="p">)</span> <span class="o">></span> <span class="mi">3</span><span class="p">)</span> <span class="o">&&</span> <span class="p">((</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'+'</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">)))</span> +<a name="line-280"></a> <span class="o">++</span><span class="n">tokp</span><span class="p">;</span> <span class="cm">/* FIX */</span> +<a name="line-281"></a> +<a name="line-282"></a> <span class="k">if</span> <span class="p">((</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'+'</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">))</span> +<a name="line-283"></a> <span class="n">pphen</span> <span class="o">=</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span> +<a name="line-284"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strlen</span> <span class="p">(</span><span class="n">tokp</span><span class="p">)</span> <span class="o"><</span> <span class="mi">4</span><span class="p">)</span> +<a name="line-285"></a> <span class="n">pphen</span> <span class="o">=</span> <span class="n">tokp</span><span class="p">;</span> +<a name="line-286"></a> <span class="k">else</span> +<a name="line-287"></a> <span class="n">pphen</span> <span class="o">=</span> <span class="n">tokp</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span> +<a name="line-288"></a> +<a name="line-289"></a> <span class="n">memset</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">squal</span><span class="p">));</span> +<a name="line-290"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="n">tokp</span><span class="p">,</span> <span class="n">pphen</span> <span class="o">-</span> <span class="n">tokp</span><span class="p">);</span> +<a name="line-291"></a> <span class="n">squal</span><span class="p">[</span><span class="n">pphen</span> <span class="o">-</span> <span class="n">tokp</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-292"></a> +<a name="line-293"></a> <span class="n">memset</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">sphen</span><span class="p">));</span> +<a name="line-294"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="n">pphen</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">sphen</span><span class="p">));</span> +<a name="line-295"></a> <span class="n">sphen</span><span class="p">[</span><span class="k">sizeof</span> <span class="p">(</span><span class="n">sphen</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-296"></a> +<a name="line-297"></a> <span class="cm">/* Defaults */</span> +<a name="line-298"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_NONE</span><span class="p">;</span> +<a name="line-299"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_NONE</span><span class="p">;</span> +<a name="line-300"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-301"></a> +<a name="line-302"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">""</span><span class="p">))</span> <span class="p">{</span> +<a name="line-303"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_MODERATE</span><span class="p">;</span> +<a name="line-304"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"-"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-305"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_LIGHT</span><span class="p">;</span> +<a name="line-306"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"+"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-307"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_HEAVY</span><span class="p">;</span> +<a name="line-308"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"VC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-309"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_VICINITY</span><span class="p">;</span> +<a name="line-310"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"MI"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-311"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_SHALLOW</span><span class="p">;</span> +<a name="line-312"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"BC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-313"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_PATCHES</span><span class="p">;</span> +<a name="line-314"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"PR"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-315"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_PARTIAL</span><span class="p">;</span> +<a name="line-316"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"TS"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-317"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_THUNDERSTORM</span><span class="p">;</span> +<a name="line-318"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"BL"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-319"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_BLOWING</span><span class="p">;</span> +<a name="line-320"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"SH"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-321"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_SHOWERS</span><span class="p">;</span> +<a name="line-322"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"DR"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-323"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_DRIFTING</span><span class="p">;</span> +<a name="line-324"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">squal</span><span class="p">,</span> <span class="s">"FZ"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-325"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_FREEZING</span><span class="p">;</span> +<a name="line-326"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-327"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-328"></a> <span class="p">}</span> +<a name="line-329"></a> +<a name="line-330"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"DZ"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-331"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_DRIZZLE</span><span class="p">;</span> +<a name="line-332"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"RA"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-333"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_RAIN</span><span class="p">;</span> +<a name="line-334"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"SN"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-335"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SNOW</span><span class="p">;</span> +<a name="line-336"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"SG"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-337"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SNOW_GRAINS</span><span class="p">;</span> +<a name="line-338"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"IC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-339"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_ICE_CRYSTALS</span><span class="p">;</span> +<a name="line-340"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"PE"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-341"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_ICE_PELLETS</span><span class="p">;</span> +<a name="line-342"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"GR"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-343"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_HAIL</span><span class="p">;</span> +<a name="line-344"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"GS"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-345"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SMALL_HAIL</span><span class="p">;</span> +<a name="line-346"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"UP"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-347"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_UNKNOWN_PRECIPITATION</span><span class="p">;</span> +<a name="line-348"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"BR"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-349"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_MIST</span><span class="p">;</span> +<a name="line-350"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"FG"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-351"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_FOG</span><span class="p">;</span> +<a name="line-352"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"FU"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-353"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SMOKE</span><span class="p">;</span> +<a name="line-354"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"VA"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-355"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_VOLCANIC_ASH</span><span class="p">;</span> +<a name="line-356"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"SA"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-357"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SAND</span><span class="p">;</span> +<a name="line-358"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"HZ"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-359"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_HAZE</span><span class="p">;</span> +<a name="line-360"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"PY"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-361"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SPRAY</span><span class="p">;</span> +<a name="line-362"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"DU"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-363"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_DUST</span><span class="p">;</span> +<a name="line-364"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"SQ"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-365"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SQUALL</span><span class="p">;</span> +<a name="line-366"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"SS"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-367"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_SANDSTORM</span><span class="p">;</span> +<a name="line-368"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"DS"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-369"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_DUSTSTORM</span><span class="p">;</span> +<a name="line-370"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"PO"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-371"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_DUST_WHIRLS</span><span class="p">;</span> +<a name="line-372"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"+FC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-373"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_TORNADO</span><span class="p">;</span> +<a name="line-374"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">sphen</span><span class="p">,</span> <span class="s">"FC"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-375"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_FUNNEL_CLOUD</span><span class="p">;</span> +<a name="line-376"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-377"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-378"></a> <span class="p">}</span> +<a name="line-379"></a> +<a name="line-380"></a> <span class="k">if</span> <span class="p">((</span><span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">!=</span> <span class="n">QUALIFIER_NONE</span><span class="p">)</span> <span class="o">||</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">!=</span> <span class="n">PHENOMENON_NONE</span><span class="p">))</span> +<a name="line-381"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-382"></a><span class="p">}</span> +<a name="line-383"></a> +<a name="line-384"></a><span class="cp">#define TIME_RE_STR "([0-9]{6})Z"</span> +<a name="line-385"></a><span class="cp">#define WIND_RE_STR "(([0-9]{3})|VRB)([0-9]?[0-9]{2})(G[0-9]?[0-9]{2})?(KT|MPS)"</span> +<a name="line-386"></a><span class="cp">#define VIS_RE_STR "((([0-9]?[0-9])|(M?([12] )?([1357]/1?[0-9])))SM)|" \</span> +<a name="line-387"></a><span class="cp"> "([0-9]{4}(N|NE|E|SE|S|SW|W|NW( [0-9]{4}(N|NE|E|SE|S|SW|W|NW))?)?)|" \</span> +<a name="line-388"></a><span class="cp"> "CAVOK"</span> +<a name="line-389"></a><span class="cp">#define COND_RE_STR "(-|\\+)?(VC|MI|BC|PR|TS|BL|SH|DR|FZ)?(DZ|RA|SN|SG|IC|PE|GR|GS|UP|BR|FG|FU|VA|SA|HZ|PY|DU|SQ|SS|DS|PO|\\+?FC)"</span> +<a name="line-390"></a><span class="cp">#define CLOUD_RE_STR "((CLR|BKN|SCT|FEW|OVC|SKC|NSC)([0-9]{3}|</span><span class="c1">///)?(CB|TCU|///)?)"</span> +<a name="line-391"></a><span class="cp">#define TEMP_RE_STR "(M?[0-9][0-9])/(M?(</span><span class="c1">//|[0-9][0-9])?)"</span> +<a name="line-392"></a><span class="cp">#define PRES_RE_STR "(A|Q)([0-9]{4})"</span> +<a name="line-393"></a> +<a name="line-394"></a><span class="cm">/* POSIX regular expressions do not allow us to express "match whole words</span> +<a name="line-395"></a><span class="cm"> * only" in a simple way, so we have to wrap them all into</span> +<a name="line-396"></a><span class="cm"> * (^| )(...regex...)( |$)</span> +<a name="line-397"></a><span class="cm"> */</span> +<a name="line-398"></a><span class="cp">#define RE_PREFIX "(^| )("</span> +<a name="line-399"></a><span class="cp">#define RE_SUFFIX ")( |$)"</span> +<a name="line-400"></a> +<a name="line-401"></a><span class="k">static</span> <span class="n">regex_t</span> <span class="n">metar_re</span><span class="p">[</span><span class="n">RE_NUM</span><span class="p">];</span> +<a name="line-402"></a><span class="k">static</span> <span class="nf">void</span> <span class="p">(</span><span class="o">*</span><span class="n">metar_f</span><span class="p">[</span><span class="n">RE_NUM</span><span class="p">])</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">);</span> +<a name="line-403"></a> +<a name="line-404"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-405"></a><span class="nf">metar_init_re</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<a name="line-406"></a><span class="p">{</span> +<a name="line-407"></a> <span class="k">static</span> <span class="n">gboolean</span> <span class="n">initialized</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-408"></a> <span class="k">if</span> <span class="p">(</span><span class="n">initialized</span><span class="p">)</span> +<a name="line-409"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-410"></a> <span class="n">initialized</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-411"></a> +<a name="line-412"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">TIME_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">TIME_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-413"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">WIND_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">WIND_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-414"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">VIS_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">VIS_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-415"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">COND_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">COND_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-416"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">CLOUD_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">CLOUD_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-417"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">TEMP_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">TEMP_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-418"></a> <span class="n">regcomp</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">PRES_RE</span><span class="p">],</span> <span class="n">RE_PREFIX</span> <span class="n">PRES_RE_STR</span> <span class="n">RE_SUFFIX</span><span class="p">,</span> <span class="n">REG_EXTENDED</span><span class="p">);</span> +<a name="line-419"></a> +<a name="line-420"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">TIME_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_time</span><span class="p">;</span> +<a name="line-421"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">WIND_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_wind</span><span class="p">;</span> +<a name="line-422"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">VIS_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_vis</span><span class="p">;</span> +<a name="line-423"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">COND_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_cond</span><span class="p">;</span> +<a name="line-424"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">CLOUD_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_cloud</span><span class="p">;</span> +<a name="line-425"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">TEMP_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_temp</span><span class="p">;</span> +<a name="line-426"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">PRES_RE</span><span class="p">]</span> <span class="o">=</span> <span class="n">metar_tok_pres</span><span class="p">;</span> +<a name="line-427"></a><span class="p">}</span> +<a name="line-428"></a> +<a name="line-429"></a><span class="n">gboolean</span> +<a name="line-430"></a><span class="nf">metar_parse</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">metar</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-431"></a><span class="p">{</span> +<a name="line-432"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> +<a name="line-433"></a> <span class="c1">//gchar *rmk;</span> +<a name="line-434"></a> <span class="n">gint</span> <span class="n">i</span><span class="p">,</span> <span class="n">i2</span><span class="p">;</span> +<a name="line-435"></a> <span class="n">regmatch_t</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rm2</span><span class="p">;</span> +<a name="line-436"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">tokp</span><span class="p">;</span> +<a name="line-437"></a> +<a name="line-438"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-439"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">metar</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-440"></a> +<a name="line-441"></a> <span class="n">metar_init_re</span> <span class="p">();</span> +<a name="line-442"></a> +<a name="line-443"></a> <span class="cm">/*</span> +<a name="line-444"></a><span class="cm"> * Force parsing to end at "RMK" field. This prevents a subtle</span> +<a name="line-445"></a><span class="cm"> * problem when info within the remark happens to match an earlier state</span> +<a name="line-446"></a><span class="cm"> * and, as a result, throws off all the remaining expression</span> +<a name="line-447"></a><span class="cm"> */</span> +<a name="line-448"></a> <span class="k">if</span> <span class="p">(</span><span class="mi">0</span> <span class="o">!=</span> <span class="p">(</span><span class="n">p</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">metar</span><span class="p">,</span> <span class="s">" RMK "</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-449"></a> <span class="o">*</span><span class="n">p</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-450"></a> <span class="c1">//rmk = p + 5; // uncomment this if RMK data becomes useful</span> +<a name="line-451"></a> <span class="p">}</span> +<a name="line-452"></a> +<a name="line-453"></a> <span class="n">p</span> <span class="o">=</span> <span class="n">metar</span><span class="p">;</span> +<a name="line-454"></a><span class="hll"> <span class="n">i</span> <span class="o">=</span> <span class="n">TIME_RE</span><span class="p">;</span><span class="error2"><--- Variable 'i' is assigned a value that is never used.</span> +</span><a name="line-455"></a> <span class="k">while</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">)</span> <span class="p">{</span> +<a name="line-456"></a> +<a name="line-457"></a> <span class="n">i2</span> <span class="o">=</span> <span class="n">RE_NUM</span><span class="p">;</span> +<a name="line-458"></a> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span> <span class="o">=</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">p</span><span class="p">);</span> +<a name="line-459"></a> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_eo</span> <span class="o">=</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span><span class="p">;</span> +<a name="line-460"></a> +<a name="line-461"></a> <span class="k">for</span> <span class="p">(</span><span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">RE_NUM</span> <span class="o">&&</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span> <span class="o">></span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> +<a name="line-462"></a> <span class="k">if</span> <span class="p">(</span><span class="mi">0</span> <span class="o">==</span> <span class="n">regexec</span> <span class="p">(</span><span class="o">&</span><span class="n">metar_re</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">p</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">&</span><span class="n">rm</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-463"></a> <span class="o">&&</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_so</span> <span class="o"><</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span><span class="p">)</span> +<a name="line-464"></a> <span class="p">{</span> +<a name="line-465"></a> <span class="n">i2</span> <span class="o">=</span> <span class="n">i</span><span class="p">;</span> +<a name="line-466"></a> <span class="cm">/* Skip leading and trailing space characters, if present.</span> +<a name="line-467"></a><span class="cm"> (the regular expressions include those characters to</span> +<a name="line-468"></a><span class="cm"> only get matches limited to whole words). */</span> +<a name="line-469"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="n">rm</span><span class="p">.</span><span class="n">rm_so</span><span class="p">]</span> <span class="o">==</span> <span class="sc">' '</span><span class="p">)</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_so</span><span class="o">++</span><span class="p">;</span> +<a name="line-470"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="n">rm</span><span class="p">.</span><span class="n">rm_eo</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sc">' '</span><span class="p">)</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_eo</span><span class="o">--</span><span class="p">;</span> +<a name="line-471"></a> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span> <span class="o">=</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_so</span><span class="p">;</span> +<a name="line-472"></a> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_eo</span> <span class="o">=</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_eo</span><span class="p">;</span> +<a name="line-473"></a> <span class="p">}</span> +<a name="line-474"></a> <span class="p">}</span> +<a name="line-475"></a> +<a name="line-476"></a> <span class="k">if</span> <span class="p">(</span><span class="n">i2</span> <span class="o">!=</span> <span class="n">RE_NUM</span><span class="p">)</span> <span class="p">{</span> +<a name="line-477"></a> <span class="n">tokp</span> <span class="o">=</span> <span class="n">g_strndup</span> <span class="p">(</span><span class="n">p</span> <span class="o">+</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span><span class="p">,</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_eo</span> <span class="o">-</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span><span class="p">);</span> +<a name="line-478"></a> <span class="n">metar_f</span><span class="p">[</span><span class="n">i2</span><span class="p">]</span> <span class="p">(</span><span class="n">tokp</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span> +<a name="line-479"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">tokp</span><span class="p">);</span> +<a name="line-480"></a> <span class="p">}</span> +<a name="line-481"></a> +<a name="line-482"></a> <span class="n">p</span> <span class="o">+=</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_eo</span><span class="p">;</span> +<a name="line-483"></a> <span class="n">p</span> <span class="o">+=</span> <span class="n">strspn</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span> +<a name="line-484"></a> <span class="p">}</span> +<a name="line-485"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-486"></a><span class="p">}</span> +<a name="line-487"></a> +<a name="line-488"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-489"></a><span class="nf">metar_finish</span> <span class="p">(</span><span class="n">SoupSession</span> <span class="o">*</span><span class="n">session</span><span class="p">,</span> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">data</span><span class="p">)</span> +<a name="line-490"></a><span class="p">{</span> +<a name="line-491"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span> <span class="o">=</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="p">)</span><span class="n">data</span><span class="p">;</span> +<a name="line-492"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span> +<a name="line-493"></a><span class="hll"> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="o">*</span><span class="n">endtag</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'endtag' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'endtag' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-494"></a><span class="hll"> <span class="n">gchar</span> <span class="o">*</span><span class="n">searchkey</span><span class="p">,</span> <span class="o">*</span><span class="n">metar</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'metar' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'metar' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-495"></a> <span class="n">gboolean</span> <span class="n">success</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-496"></a> +<a name="line-497"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-498"></a> +<a name="line-499"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">SOUP_STATUS_IS_SUCCESSFUL</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">status_code</span><span class="p">))</span> <span class="p">{</span> +<a name="line-500"></a> <span class="k">if</span> <span class="p">(</span><span class="n">SOUP_STATUS_IS_TRANSPORT_ERROR</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">status_code</span><span class="p">))</span> +<a name="line-501"></a> <span class="n">info</span><span class="o">-></span><span class="n">network_error</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-502"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-503"></a> <span class="cm">/* Translators: %d is an error code, and %s the error string */</span> +<a name="line-504"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"Failed to get METAR data: %d %s.</span><span class="se">\n</span><span class="s">"</span><span class="p">),</span> +<a name="line-505"></a> <span class="n">msg</span><span class="o">-></span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-></span><span class="n">reason_phrase</span><span class="p">);</span> +<a name="line-506"></a> <span class="p">}</span> +<a name="line-507"></a> <span class="n">request_done</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-508"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-509"></a> <span class="p">}</span> +<a name="line-510"></a> +<a name="line-511"></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">;</span> +<a name="line-512"></a> +<a name="line-513"></a> <span class="n">searchkey</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"<raw_text>%s"</span><span class="p">,</span> <span class="n">loc</span><span class="o">-></span><span class="n">code</span><span class="p">);</span> +<a name="line-514"></a> <span class="n">p</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">response_body</span><span class="o">-></span><span class="n">data</span><span class="p">,</span> <span class="n">searchkey</span><span class="p">);</span> +<a name="line-515"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">searchkey</span><span class="p">);</span> +<a name="line-516"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="p">{</span> +<a name="line-517"></a> <span class="n">p</span> <span class="o">+=</span> <span class="n">WEATHER_LOCATION_CODE_LEN</span> <span class="o">+</span> <span class="mi">11</span><span class="p">;</span> +<a name="line-518"></a> <span class="n">endtag</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">"</raw_text>"</span><span class="p">);</span> +<a name="line-519"></a> <span class="k">if</span> <span class="p">(</span><span class="n">endtag</span><span class="p">)</span> +<a name="line-520"></a> <span class="n">metar</span> <span class="o">=</span> <span class="n">g_strndup</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">endtag</span> <span class="o">-</span> <span class="n">p</span><span class="p">);</span> +<a name="line-521"></a> <span class="k">else</span> +<a name="line-522"></a> <span class="n">metar</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">p</span><span class="p">);</span> +<a name="line-523"></a> <span class="n">success</span> <span class="o">=</span> <span class="n">metar_parse</span> <span class="p">(</span><span class="n">metar</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span> +<a name="line-524"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">metar</span><span class="p">);</span> +<a name="line-525"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strstr</span> <span class="p">(</span><span class="n">msg</span><span class="o">-></span><span class="n">response_body</span><span class="o">-></span><span class="n">data</span><span class="p">,</span> <span class="s">"aviationweather.gov"</span><span class="p">))</span> <span class="p">{</span> +<a name="line-526"></a> <span class="cm">/* The response doesn't even seem to have come from NOAA...</span> +<a name="line-527"></a><span class="cm"> * most likely it is a wifi hotspot login page. Call that a</span> +<a name="line-528"></a><span class="cm"> * network error.</span> +<a name="line-529"></a><span class="cm"> */</span> +<a name="line-530"></a> <span class="n">info</span><span class="o">-></span><span class="n">network_error</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-531"></a> <span class="p">}</span> +<a name="line-532"></a> +<a name="line-533"></a> <span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">=</span> <span class="n">success</span><span class="p">;</span> +<a name="line-534"></a> <span class="n">request_done</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-535"></a><span class="p">}</span> +<a name="line-536"></a> +<a name="line-537"></a><span class="cm">/* Read current conditions and fill in info structure */</span> +<a name="line-538"></a><span class="kt">void</span> +<a name="line-539"></a><span class="nf">metar_start_open</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-540"></a><span class="p">{</span> +<a name="line-541"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span> +<a name="line-542"></a> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">;</span> +<a name="line-543"></a> +<a name="line-544"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-545"></a> <span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">network_error</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-546"></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">;</span> +<a name="line-547"></a> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-548"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"WeatherInfo missing location"</span><span class="p">));</span> +<a name="line-549"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-550"></a> <span class="p">}</span> +<a name="line-551"></a> +<a name="line-552"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_form_request_new</span> <span class="p">(</span> +<a name="line-553"></a> <span class="s">"GET"</span><span class="p">,</span> <span class="s">"https://www.aviationweather.gov/adds/dataserver_current/httpparam"</span><span class="p">,</span> +<a name="line-554"></a> <span class="s">"dataSource"</span><span class="p">,</span> <span class="s">"metars"</span><span class="p">,</span> +<a name="line-555"></a> <span class="s">"requestType"</span><span class="p">,</span> <span class="s">"retrieve"</span><span class="p">,</span> +<a name="line-556"></a> <span class="s">"format"</span><span class="p">,</span> <span class="s">"xml"</span><span class="p">,</span> +<a name="line-557"></a> <span class="s">"hoursBeforeNow"</span><span class="p">,</span> <span class="s">"3"</span><span class="p">,</span> +<a name="line-558"></a> <span class="s">"mostRecent"</span><span class="p">,</span> <span class="s">"true"</span><span class="p">,</span> +<a name="line-559"></a> <span class="s">"fields"</span><span class="p">,</span> <span class="s">"raw_text"</span><span class="p">,</span> +<a name="line-560"></a> <span class="s">"stationString"</span><span class="p">,</span> <span class="n">loc</span><span class="o">-></span><span class="n">code</span><span class="p">,</span> +<a name="line-561"></a> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-562"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">metar_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span> +<a name="line-563"></a> +<a name="line-564"></a> <span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span> +<a name="line-565"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/7.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/7.html new file mode 100644 index 0000000..56c57fd --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/7.html @@ -0,0 +1,876 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/weather-sun.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> weather-sun.c</p> +<a href="7.html#line-164"> redundantInitialization 164</a><a href="7.html#line-165"> redundantInitialization 165</a><a href="7.html#line-178"> redundantInitialization 178</a><a href="7.html#line-179"> redundantInitialization 179</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* weather-sun.c - Astronomy calculations for mateweather</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * This program is free software; you can redistribute it and/or</span> +<a name="line-5"></a><span class="cm"> * modify it under the terms of the GNU General Public License as</span> +<a name="line-6"></a><span class="cm"> * published by the Free Software Foundation; either version 2 of the</span> +<a name="line-7"></a><span class="cm"> * License, or (at your option) any later version.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * This program is distributed in the hope that it will be useful, but</span> +<a name="line-10"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-11"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-12"></a><span class="cm"> * General Public License for more details.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-15"></a><span class="cm"> * along with this program; if not, see</span> +<a name="line-16"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-17"></a><span class="cm"> */</span> +<a name="line-18"></a> +<a name="line-19"></a><span class="cm">/*</span> +<a name="line-20"></a><span class="cm"> * Formulas from:</span> +<a name="line-21"></a><span class="cm"> * "Practical Astronomy With Your Calculator" (3e), Peter Duffett-Smith</span> +<a name="line-22"></a><span class="cm"> * Cambridge University Press 1988</span> +<a name="line-23"></a><span class="cm"> * Unless otherwise noted, comments referencing "steps" are related to</span> +<a name="line-24"></a><span class="cm"> * the algorithm presented in section 49 of above</span> +<a name="line-25"></a><span class="cm"> */</span> +<a name="line-26"></a> +<a name="line-27"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#endif</span> +<a name="line-30"></a> +<a name="line-31"></a><span class="cp">#include</span> <span class="cpf"><math.h></span><span class="cp"></span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><time.h></span><span class="cp"></span> +<a name="line-33"></a><span class="cp">#include</span> <span class="cpf"><glib.h></span><span class="cp"></span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-37"></a> +<a name="line-38"></a><span class="cp">#define ECCENTRICITY(d) (0.01671123 - (d)/36525.*0.00004392)</span> +<a name="line-39"></a> +<a name="line-40"></a><span class="cm">/*</span> +<a name="line-41"></a><span class="cm"> * Ecliptic longitude of the sun at specified time (UT)</span> +<a name="line-42"></a><span class="cm"> * The algoithm is described in section 47 of Duffett-Smith</span> +<a name="line-43"></a><span class="cm"> * Return value is in radians</span> +<a name="line-44"></a><span class="cm"> */</span> +<a name="line-45"></a><span class="n">gdouble</span> +<a name="line-46"></a><span class="nf">sunEclipLongitude</span><span class="p">(</span><span class="kt">time_t</span> <span class="n">t</span><span class="p">)</span> +<a name="line-47"></a><span class="p">{</span> +<a name="line-48"></a> <span class="n">gdouble</span> <span class="n">ndays</span><span class="p">,</span> <span class="n">meanAnom</span><span class="p">,</span> <span class="n">eccenAnom</span><span class="p">,</span> <span class="n">delta</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">longitude</span><span class="p">;</span> +<a name="line-49"></a> +<a name="line-50"></a> <span class="cm">/*</span> +<a name="line-51"></a><span class="cm"> * Start with an estimate based on a fixed daily rate</span> +<a name="line-52"></a><span class="cm"> */</span> +<a name="line-53"></a> <span class="n">ndays</span> <span class="o">=</span> <span class="n">EPOCH_TO_J2000</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="o">/</span> <span class="mf">86400.</span><span class="p">;</span> +<a name="line-54"></a> <span class="n">meanAnom</span> <span class="o">=</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="n">MEAN_ECLIPTIC_LONGITUDE</span><span class="p">(</span><span class="n">ndays</span><span class="p">)</span> +<a name="line-55"></a> <span class="o">-</span> <span class="n">PERIGEE_LONGITUDE</span><span class="p">(</span><span class="n">ndays</span><span class="p">));</span> +<a name="line-56"></a> +<a name="line-57"></a> <span class="cm">/*</span> +<a name="line-58"></a><span class="cm"> * Approximate solution of Kepler's equation:</span> +<a name="line-59"></a><span class="cm"> * Find E which satisfies E - e sin(E) = M (mean anomaly)</span> +<a name="line-60"></a><span class="cm"> */</span> +<a name="line-61"></a> <span class="n">eccenAnom</span> <span class="o">=</span> <span class="n">meanAnom</span><span class="p">;</span> +<a name="line-62"></a> <span class="n">e</span> <span class="o">=</span> <span class="n">ECCENTRICITY</span><span class="p">(</span><span class="n">ndays</span><span class="p">);</span> +<a name="line-63"></a> +<a name="line-64"></a> <span class="k">while</span> <span class="p">(</span><span class="mf">1e-12</span> <span class="o"><</span> <span class="n">fabs</span><span class="p">(</span> <span class="n">delta</span> <span class="o">=</span> <span class="n">eccenAnom</span> <span class="o">-</span> <span class="n">e</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">eccenAnom</span><span class="p">)</span> <span class="o">-</span> <span class="n">meanAnom</span><span class="p">))</span> +<a name="line-65"></a> <span class="p">{</span> +<a name="line-66"></a> <span class="n">eccenAnom</span> <span class="o">-=</span> <span class="n">delta</span> <span class="o">/</span> <span class="p">(</span><span class="mf">1.</span><span class="o">-</span> <span class="n">e</span> <span class="o">*</span> <span class="n">cos</span><span class="p">(</span><span class="n">eccenAnom</span><span class="p">));</span> +<a name="line-67"></a> <span class="p">}</span> +<a name="line-68"></a> +<a name="line-69"></a> <span class="cm">/*</span> +<a name="line-70"></a><span class="cm"> * Earth's longitude on the ecliptic</span> +<a name="line-71"></a><span class="cm"> */</span> +<a name="line-72"></a> <span class="n">longitude</span> <span class="o">=</span> <span class="n">fmod</span><span class="p">(</span> <span class="n">DEGREES_TO_RADIANS</span> <span class="p">(</span><span class="n">PERIGEE_LONGITUDE</span><span class="p">(</span><span class="n">ndays</span><span class="p">))</span> +<a name="line-73"></a> <span class="o">+</span> <span class="mf">2.</span> <span class="o">*</span> <span class="n">atan</span> <span class="p">(</span><span class="n">sqrt</span> <span class="p">((</span><span class="mf">1.</span><span class="o">+</span><span class="n">e</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mf">1.</span><span class="o">-</span><span class="n">e</span><span class="p">))</span> +<a name="line-74"></a> <span class="o">*</span> <span class="n">tan</span> <span class="p">(</span><span class="n">eccenAnom</span> <span class="o">/</span> <span class="mf">2.</span><span class="p">)),</span> +<a name="line-75"></a> <span class="mf">2.</span> <span class="o">*</span> <span class="n">M_PI</span><span class="p">);</span> +<a name="line-76"></a> <span class="k">if</span> <span class="p">(</span><span class="n">longitude</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> <span class="p">{</span> +<a name="line-77"></a> <span class="n">longitude</span> <span class="o">+=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">M_PI</span><span class="p">;</span> +<a name="line-78"></a> <span class="p">}</span> +<a name="line-79"></a> <span class="k">return</span> <span class="n">longitude</span><span class="p">;</span> +<a name="line-80"></a><span class="p">}</span> +<a name="line-81"></a> +<a name="line-82"></a><span class="k">static</span> <span class="n">gdouble</span> +<a name="line-83"></a><span class="nf">ecliptic_obliquity</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">time</span><span class="p">)</span> +<a name="line-84"></a><span class="p">{</span> +<a name="line-85"></a> <span class="n">gdouble</span> <span class="n">jc</span> <span class="o">=</span> <span class="n">EPOCH_TO_J2000</span> <span class="p">(</span><span class="n">time</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="mf">36525.</span> <span class="o">*</span> <span class="mf">86400.</span><span class="p">);</span> +<a name="line-86"></a> <span class="n">gdouble</span> <span class="n">eclip_secs</span> <span class="o">=</span> <span class="p">(</span><span class="mf">84381.448</span> +<a name="line-87"></a> <span class="o">-</span> <span class="p">(</span><span class="mf">46.84024</span> <span class="o">*</span> <span class="n">jc</span><span class="p">)</span> +<a name="line-88"></a> <span class="o">-</span> <span class="p">(</span><span class="mf">59.e-5</span> <span class="o">*</span> <span class="n">jc</span> <span class="o">*</span> <span class="n">jc</span><span class="p">)</span> +<a name="line-89"></a> <span class="o">+</span> <span class="p">(</span><span class="mf">1.813e-3</span> <span class="o">*</span> <span class="n">jc</span> <span class="o">*</span> <span class="n">jc</span> <span class="o">*</span> <span class="n">jc</span><span class="p">));</span> +<a name="line-90"></a> <span class="k">return</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="n">eclip_secs</span> <span class="o">/</span> <span class="mf">3600.</span><span class="p">);</span> +<a name="line-91"></a><span class="p">}</span> +<a name="line-92"></a> +<a name="line-93"></a><span class="cm">/*</span> +<a name="line-94"></a><span class="cm"> * Convert ecliptic longitude and latitude (radians) to equitorial</span> +<a name="line-95"></a><span class="cm"> * coordinates, expressed as right ascension (hours) and</span> +<a name="line-96"></a><span class="cm"> * declination (radians)</span> +<a name="line-97"></a><span class="cm"> */</span> +<a name="line-98"></a><span class="kt">void</span> +<a name="line-99"></a><span class="nf">ecl2equ</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">time</span><span class="p">,</span> +<a name="line-100"></a> <span class="n">gdouble</span> <span class="n">eclipLon</span><span class="p">,</span> <span class="n">gdouble</span> <span class="n">eclipLat</span><span class="p">,</span> +<a name="line-101"></a> <span class="n">gdouble</span> <span class="o">*</span><span class="n">ra</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">decl</span><span class="p">)</span> +<a name="line-102"></a><span class="p">{</span> +<a name="line-103"></a> <span class="n">gdouble</span> <span class="n">mEclipObliq</span> <span class="o">=</span> <span class="n">ecliptic_obliquity</span><span class="p">(</span><span class="n">time</span><span class="p">);</span> +<a name="line-104"></a> +<a name="line-105"></a> <span class="k">if</span> <span class="p">(</span><span class="n">ra</span><span class="p">)</span> <span class="p">{</span> +<a name="line-106"></a> <span class="o">*</span><span class="n">ra</span> <span class="o">=</span> <span class="n">RADIANS_TO_HOURS</span> <span class="p">(</span><span class="n">atan2</span> <span class="p">((</span><span class="n">sin</span> <span class="p">(</span><span class="n">eclipLon</span><span class="p">)</span> <span class="o">*</span> <span class="n">cos</span> <span class="p">(</span><span class="n">mEclipObliq</span><span class="p">)</span> +<a name="line-107"></a> <span class="o">-</span> <span class="n">tan</span> <span class="p">(</span><span class="n">eclipLat</span><span class="p">)</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">mEclipObliq</span><span class="p">)),</span> +<a name="line-108"></a> <span class="n">cos</span> <span class="p">(</span><span class="n">eclipLon</span><span class="p">)));</span> +<a name="line-109"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">ra</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> +<a name="line-110"></a> <span class="o">*</span><span class="n">ra</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-111"></a> <span class="p">}</span> +<a name="line-112"></a> <span class="k">if</span> <span class="p">(</span><span class="n">decl</span><span class="p">)</span> <span class="p">{</span> +<a name="line-113"></a> <span class="o">*</span><span class="n">decl</span> <span class="o">=</span> <span class="n">asin</span> <span class="p">((</span> <span class="n">sin</span> <span class="p">(</span><span class="n">eclipLat</span><span class="p">)</span> <span class="o">*</span> <span class="n">cos</span> <span class="p">(</span><span class="n">mEclipObliq</span><span class="p">))</span> +<a name="line-114"></a> <span class="o">+</span> <span class="n">cos</span> <span class="p">(</span><span class="n">eclipLat</span><span class="p">)</span> <span class="o">*</span> <span class="n">sin</span> <span class="p">(</span><span class="n">mEclipObliq</span><span class="p">)</span> <span class="o">*</span> <span class="n">sin</span><span class="p">(</span><span class="n">eclipLon</span><span class="p">));</span> +<a name="line-115"></a> <span class="p">}</span> +<a name="line-116"></a><span class="p">}</span> +<a name="line-117"></a> +<a name="line-118"></a><span class="cm">/*</span> +<a name="line-119"></a><span class="cm"> * Calculate rising and setting times for an object</span> +<a name="line-120"></a><span class="cm"> * based on it equitorial coordinates (section 33 & 15)</span> +<a name="line-121"></a><span class="cm"> * Returned "rise" and "set" values are sideral times in hours</span> +<a name="line-122"></a><span class="cm"> */</span> +<a name="line-123"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-124"></a><span class="nf">gstObsv</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">ra</span><span class="p">,</span> <span class="n">gdouble</span> <span class="n">decl</span><span class="p">,</span> +<a name="line-125"></a> <span class="n">gdouble</span> <span class="n">obsLat</span><span class="p">,</span> <span class="n">gdouble</span> <span class="n">obsLon</span><span class="p">,</span> +<a name="line-126"></a> <span class="n">gdouble</span> <span class="o">*</span><span class="n">rise</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">set</span><span class="p">)</span> +<a name="line-127"></a><span class="p">{</span> +<a name="line-128"></a> <span class="kt">double</span> <span class="n">a</span> <span class="o">=</span> <span class="n">acos</span> <span class="p">(</span><span class="o">-</span><span class="n">tan</span> <span class="p">(</span><span class="n">obsLat</span><span class="p">)</span> <span class="o">*</span> <span class="n">tan</span> <span class="p">(</span><span class="n">decl</span><span class="p">));</span> +<a name="line-129"></a> <span class="kt">double</span> <span class="n">b</span><span class="p">;</span> +<a name="line-130"></a> +<a name="line-131"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isnan</span> <span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-132"></a> <span class="o">*</span><span class="n">set</span> <span class="o">=</span> <span class="o">*</span><span class="n">rise</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span> +<a name="line-133"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-134"></a> <span class="p">}</span> +<a name="line-135"></a> <span class="n">a</span> <span class="o">=</span> <span class="n">RADIANS_TO_HOURS</span> <span class="p">(</span><span class="n">a</span><span class="p">);</span> +<a name="line-136"></a> <span class="n">b</span> <span class="o">=</span> <span class="mf">24.</span> <span class="o">-</span> <span class="n">a</span> <span class="o">+</span> <span class="n">ra</span><span class="p">;</span> +<a name="line-137"></a> <span class="n">a</span> <span class="o">+=</span> <span class="n">ra</span><span class="p">;</span> +<a name="line-138"></a> <span class="n">a</span> <span class="o">-=</span> <span class="n">RADIANS_TO_HOURS</span> <span class="p">(</span><span class="n">obsLon</span><span class="p">);</span> +<a name="line-139"></a> <span class="n">b</span> <span class="o">-=</span> <span class="n">RADIANS_TO_HOURS</span> <span class="p">(</span><span class="n">obsLon</span><span class="p">);</span> +<a name="line-140"></a> <span class="k">if</span> <span class="p">((</span><span class="n">a</span> <span class="o">=</span> <span class="n">fmod</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mf">24.</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-141"></a> <span class="n">a</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-142"></a> <span class="k">if</span> <span class="p">((</span><span class="n">b</span> <span class="o">=</span> <span class="n">fmod</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="mf">24.</span><span class="p">))</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-143"></a> <span class="n">b</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-144"></a> +<a name="line-145"></a> <span class="o">*</span><span class="n">set</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span> +<a name="line-146"></a> <span class="o">*</span><span class="n">rise</span> <span class="o">=</span> <span class="n">b</span><span class="p">;</span> +<a name="line-147"></a><span class="p">}</span> +<a name="line-148"></a> +<a name="line-149"></a> +<a name="line-150"></a><span class="k">static</span> <span class="n">gdouble</span> +<a name="line-151"></a><span class="nf">t0</span> <span class="p">(</span><span class="kt">time_t</span> <span class="n">date</span><span class="p">)</span> +<a name="line-152"></a><span class="p">{</span> +<a name="line-153"></a> <span class="n">gdouble</span> <span class="n">t</span> <span class="o">=</span> <span class="p">((</span><span class="n">gdouble</span><span class="p">)(</span><span class="n">EPOCH_TO_J2000</span> <span class="p">(</span><span class="n">date</span><span class="p">)</span> <span class="o">/</span> <span class="mi">86400</span><span class="p">))</span> <span class="o">/</span> <span class="mf">36525.0</span><span class="p">;</span> +<a name="line-154"></a> <span class="n">gdouble</span> <span class="n">t0</span> <span class="o">=</span> <span class="n">fmod</span> <span class="p">(</span><span class="mf">6.697374558</span> <span class="o">+</span> <span class="mf">2400.051366</span> <span class="o">*</span> <span class="n">t</span> <span class="o">+</span> <span class="mf">2.5862e-5</span> <span class="o">*</span> <span class="n">t</span> <span class="o">*</span> <span class="n">t</span><span class="p">,</span> <span class="mf">24.</span><span class="p">);</span> +<a name="line-155"></a> <span class="k">if</span> <span class="p">(</span><span class="n">t0</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> +<a name="line-156"></a> <span class="n">t0</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-157"></a> <span class="k">return</span> <span class="n">t0</span><span class="p">;</span> +<a name="line-158"></a><span class="p">}</span> +<a name="line-159"></a> +<a name="line-160"></a> +<a name="line-161"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-162"></a><span class="nf">calc_sun2</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="n">t</span><span class="p">)</span> +<a name="line-163"></a><span class="p">{</span> +<a name="line-164"></a><span class="hll"> <span class="n">gdouble</span> <span class="n">obsLat</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">latitude</span><span class="p">;</span><span class="error2"><--- obsLat is initialized</span> +</span><a name="line-165"></a><span class="hll"> <span class="n">gdouble</span> <span class="n">obsLon</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">longitude</span><span class="p">;</span><span class="error2"><--- obsLon is initialized</span> +</span><a name="line-166"></a> <span class="kt">time_t</span> <span class="n">gm_midn</span><span class="p">;</span> +<a name="line-167"></a> <span class="kt">time_t</span> <span class="n">lcl_midn</span><span class="p">;</span> +<a name="line-168"></a> <span class="n">gdouble</span> <span class="n">gm_hoff</span><span class="p">,</span> <span class="n">lambda</span><span class="p">;</span> +<a name="line-169"></a> <span class="n">gdouble</span> <span class="n">ra1</span><span class="p">,</span> <span class="n">ra2</span><span class="p">;</span> +<a name="line-170"></a> <span class="n">gdouble</span> <span class="n">decl1</span><span class="p">,</span> <span class="n">decl2</span><span class="p">;</span> +<a name="line-171"></a> <span class="n">gdouble</span> <span class="n">decl_midn</span><span class="p">,</span> <span class="n">decl_noon</span><span class="p">;</span> +<a name="line-172"></a> <span class="n">gdouble</span> <span class="n">rise1</span><span class="p">,</span> <span class="n">rise2</span><span class="p">;</span> +<a name="line-173"></a> <span class="n">gdouble</span> <span class="n">set1</span><span class="p">,</span> <span class="n">set2</span><span class="p">;</span> +<a name="line-174"></a> <span class="n">gdouble</span> <span class="n">tt</span><span class="p">,</span> <span class="n">t00</span><span class="p">;</span> +<a name="line-175"></a> <span class="n">gdouble</span> <span class="n">x</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">dt</span><span class="p">;</span> +<a name="line-176"></a> +<a name="line-177"></a> <span class="cm">/* Approximate preceding local midnight at observer's longitude */</span> +<a name="line-178"></a><span class="hll"> <span class="n">obsLat</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">latitude</span><span class="p">;</span><span class="error2"><--- obsLat is overwritten</span> +</span><a name="line-179"></a><span class="hll"> <span class="n">obsLon</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">longitude</span><span class="p">;</span><span class="error2"><--- obsLon is overwritten</span> +</span><a name="line-180"></a> <span class="n">gm_midn</span> <span class="o">=</span> <span class="n">t</span> <span class="o">-</span> <span class="p">(</span><span class="n">t</span> <span class="o">%</span> <span class="mi">86400</span><span class="p">);</span> +<a name="line-181"></a> <span class="n">gm_hoff</span> <span class="o">=</span> <span class="n">floor</span> <span class="p">((</span><span class="n">RADIANS_TO_DEGREES</span> <span class="p">(</span><span class="n">obsLon</span><span class="p">)</span> <span class="o">+</span> <span class="mf">7.5</span><span class="p">)</span> <span class="o">/</span> <span class="mf">15.</span><span class="p">);</span> +<a name="line-182"></a> <span class="n">lcl_midn</span> <span class="o">=</span> <span class="n">gm_midn</span> <span class="o">-</span> <span class="mf">3600.</span> <span class="o">*</span> <span class="n">gm_hoff</span><span class="p">;</span> +<a name="line-183"></a> <span class="k">if</span> <span class="p">(</span><span class="n">t</span> <span class="o">-</span> <span class="n">lcl_midn</span> <span class="o">>=</span> <span class="mi">86400</span><span class="p">)</span> +<a name="line-184"></a> <span class="n">lcl_midn</span> <span class="o">+=</span> <span class="mi">86400</span><span class="p">;</span> +<a name="line-185"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">lcl_midn</span> <span class="o">></span> <span class="n">t</span><span class="p">)</span> +<a name="line-186"></a> <span class="n">lcl_midn</span> <span class="o">-=</span> <span class="mi">86400</span><span class="p">;</span> +<a name="line-187"></a> +<a name="line-188"></a> <span class="n">lambda</span> <span class="o">=</span> <span class="n">sunEclipLongitude</span> <span class="p">(</span><span class="n">lcl_midn</span><span class="p">);</span> +<a name="line-189"></a> +<a name="line-190"></a> <span class="cm">/*</span> +<a name="line-191"></a><span class="cm"> * Calculate equitorial coordinates of sun at previous</span> +<a name="line-192"></a><span class="cm"> * and next local midnights</span> +<a name="line-193"></a><span class="cm"> */</span> +<a name="line-194"></a> <span class="n">ecl2equ</span> <span class="p">(</span><span class="n">lcl_midn</span><span class="p">,</span> <span class="n">lambda</span><span class="p">,</span> <span class="mf">0.</span><span class="p">,</span> <span class="o">&</span><span class="n">ra1</span><span class="p">,</span> <span class="o">&</span><span class="n">decl1</span><span class="p">);</span> +<a name="line-195"></a> <span class="n">ecl2equ</span> <span class="p">(</span><span class="n">lcl_midn</span> <span class="o">+</span> <span class="mf">86400.</span><span class="p">,</span> +<a name="line-196"></a> <span class="n">lambda</span> <span class="o">+</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="n">SOL_PROGRESSION</span><span class="p">),</span> <span class="mf">0.</span><span class="p">,</span> +<a name="line-197"></a> <span class="o">&</span><span class="n">ra2</span><span class="p">,</span> <span class="o">&</span><span class="n">decl2</span><span class="p">);</span> +<a name="line-198"></a> +<a name="line-199"></a> <span class="cm">/*</span> +<a name="line-200"></a><span class="cm"> * If the observer is within the Arctic or Antarctic Circles then</span> +<a name="line-201"></a><span class="cm"> * the sun may be above or below the horizon for the full day.</span> +<a name="line-202"></a><span class="cm"> */</span> +<a name="line-203"></a> <span class="n">decl_midn</span> <span class="o">=</span> <span class="n">MIN</span><span class="p">(</span><span class="n">decl1</span><span class="p">,</span><span class="n">decl2</span><span class="p">);</span> +<a name="line-204"></a> <span class="n">decl_noon</span> <span class="o">=</span> <span class="p">(</span><span class="n">decl1</span><span class="o">+</span><span class="n">decl2</span><span class="p">)</span><span class="o">/</span><span class="mf">2.</span><span class="p">;</span> +<a name="line-205"></a> <span class="n">info</span><span class="o">-></span><span class="n">midnightSun</span> <span class="o">=</span> +<a name="line-206"></a> <span class="p">(</span><span class="n">obsLat</span> <span class="o">></span> <span class="p">(</span><span class="n">M_PI</span><span class="o">/</span><span class="mf">2.</span><span class="o">-</span><span class="n">decl_midn</span><span class="p">))</span> <span class="o">||</span> <span class="p">(</span><span class="n">obsLat</span> <span class="o"><</span> <span class="p">(</span><span class="o">-</span><span class="n">M_PI</span><span class="o">/</span><span class="mf">2.</span><span class="o">-</span><span class="n">decl_midn</span><span class="p">));</span> +<a name="line-207"></a> <span class="n">info</span><span class="o">-></span><span class="n">polarNight</span> <span class="o">=</span> +<a name="line-208"></a> <span class="p">(</span><span class="n">obsLat</span> <span class="o">></span> <span class="p">(</span><span class="n">M_PI</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="n">decl_noon</span><span class="p">))</span> <span class="o">||</span> <span class="p">(</span><span class="n">obsLat</span> <span class="o"><</span> <span class="p">(</span><span class="o">-</span><span class="n">M_PI</span><span class="o">/</span><span class="mf">2.</span><span class="o">+</span><span class="n">decl_noon</span><span class="p">));</span> +<a name="line-209"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">midnightSun</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">polarNight</span><span class="p">)</span> <span class="p">{</span> +<a name="line-210"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-211"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-212"></a> <span class="p">}</span> +<a name="line-213"></a> +<a name="line-214"></a> <span class="cm">/*</span> +<a name="line-215"></a><span class="cm"> * Convert to rise and set times based positions for the preceding</span> +<a name="line-216"></a><span class="cm"> * and following local midnights.</span> +<a name="line-217"></a><span class="cm"> */</span> +<a name="line-218"></a> <span class="n">gstObsv</span> <span class="p">(</span><span class="n">ra1</span><span class="p">,</span> <span class="n">decl1</span><span class="p">,</span> <span class="n">obsLat</span><span class="p">,</span> <span class="n">obsLon</span> <span class="o">-</span> <span class="p">(</span><span class="n">gm_hoff</span> <span class="o">*</span> <span class="n">M_PI</span> <span class="o">/</span> <span class="mf">12.</span><span class="p">),</span> <span class="o">&</span><span class="n">rise1</span><span class="p">,</span> <span class="o">&</span><span class="n">set1</span><span class="p">);</span> +<a name="line-219"></a> <span class="n">gstObsv</span> <span class="p">(</span><span class="n">ra2</span><span class="p">,</span> <span class="n">decl2</span><span class="p">,</span> <span class="n">obsLat</span><span class="p">,</span> <span class="n">obsLon</span> <span class="o">-</span> <span class="p">(</span><span class="n">gm_hoff</span> <span class="o">*</span> <span class="n">M_PI</span> <span class="o">/</span> <span class="mf">12.</span><span class="p">),</span> <span class="o">&</span><span class="n">rise2</span><span class="p">,</span> <span class="o">&</span><span class="n">set2</span><span class="p">);</span> +<a name="line-220"></a> +<a name="line-221"></a> <span class="cm">/* TODO: include calculations for regions near the poles. */</span> +<a name="line-222"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isnan</span><span class="p">(</span><span class="n">rise1</span><span class="p">)</span> <span class="o">||</span> <span class="n">isnan</span><span class="p">(</span><span class="n">rise2</span><span class="p">))</span> <span class="p">{</span> +<a name="line-223"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-224"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-225"></a> <span class="p">}</span> +<a name="line-226"></a> +<a name="line-227"></a> <span class="k">if</span> <span class="p">(</span><span class="n">rise2</span> <span class="o"><</span> <span class="n">rise1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-228"></a> <span class="n">rise2</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-229"></a> <span class="p">}</span> +<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">set2</span> <span class="o"><</span> <span class="n">set1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-231"></a> <span class="n">set2</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-232"></a> <span class="p">}</span> +<a name="line-233"></a> +<a name="line-234"></a> <span class="n">tt</span> <span class="o">=</span> <span class="n">t0</span><span class="p">(</span><span class="n">lcl_midn</span><span class="p">);</span> +<a name="line-235"></a> <span class="n">t00</span> <span class="o">=</span> <span class="n">tt</span> <span class="o">-</span> <span class="p">(</span><span class="n">gm_hoff</span> <span class="o">+</span> <span class="n">RADIANS_TO_HOURS</span><span class="p">(</span><span class="n">obsLon</span><span class="p">))</span> <span class="o">*</span> <span class="mf">1.002737909</span><span class="p">;</span> +<a name="line-236"></a> +<a name="line-237"></a> <span class="k">if</span> <span class="p">(</span><span class="n">t00</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> +<a name="line-238"></a> <span class="n">t00</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-239"></a> +<a name="line-240"></a> <span class="k">if</span> <span class="p">(</span><span class="n">rise1</span> <span class="o"><</span> <span class="n">t00</span><span class="p">)</span> <span class="p">{</span> +<a name="line-241"></a> <span class="n">rise1</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-242"></a> <span class="n">rise2</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-243"></a> <span class="p">}</span> +<a name="line-244"></a> <span class="k">if</span> <span class="p">(</span><span class="n">set1</span> <span class="o"><</span> <span class="n">t00</span><span class="p">)</span> <span class="p">{</span> +<a name="line-245"></a> <span class="n">set1</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-246"></a> <span class="n">set2</span> <span class="o">+=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-247"></a> <span class="p">}</span> +<a name="line-248"></a> +<a name="line-249"></a> <span class="cm">/*</span> +<a name="line-250"></a><span class="cm"> * Interpolate between the two to get a rise and set time</span> +<a name="line-251"></a><span class="cm"> * based on the sun's position at local noon (step 8)</span> +<a name="line-252"></a><span class="cm"> */</span> +<a name="line-253"></a> <span class="n">rise1</span> <span class="o">=</span> <span class="p">(</span><span class="mf">24.07</span> <span class="o">*</span> <span class="n">rise1</span> <span class="o">-</span> <span class="n">t00</span> <span class="o">*</span> <span class="p">(</span><span class="n">rise2</span> <span class="o">-</span> <span class="n">rise1</span><span class="p">))</span> <span class="o">/</span> <span class="p">(</span><span class="mf">24.07</span> <span class="o">+</span> <span class="n">rise1</span> <span class="o">-</span> <span class="n">rise2</span><span class="p">);</span> +<a name="line-254"></a> <span class="n">set1</span> <span class="o">=</span> <span class="p">(</span><span class="mf">24.07</span> <span class="o">*</span> <span class="n">set1</span> <span class="o">-</span> <span class="n">t00</span> <span class="o">*</span> <span class="p">(</span><span class="n">set2</span> <span class="o">-</span> <span class="n">set1</span><span class="p">))</span> <span class="o">/</span> <span class="p">(</span><span class="mf">24.07</span> <span class="o">+</span> <span class="n">set1</span> <span class="o">-</span> <span class="n">set2</span><span class="p">);</span> +<a name="line-255"></a> +<a name="line-256"></a> <span class="cm">/*</span> +<a name="line-257"></a><span class="cm"> * Calculate an adjustment value to account for parallax,</span> +<a name="line-258"></a><span class="cm"> * refraction and the Sun's finite diameter (steps 9,10)</span> +<a name="line-259"></a><span class="cm"> */</span> +<a name="line-260"></a> <span class="n">decl2</span> <span class="o">=</span> <span class="p">(</span><span class="n">decl1</span> <span class="o">+</span> <span class="n">decl2</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.</span><span class="p">;</span> +<a name="line-261"></a> <span class="n">x</span> <span class="o">=</span> <span class="n">DEGREES_TO_RADIANS</span><span class="p">(</span><span class="mf">0.830725</span><span class="p">);</span> +<a name="line-262"></a> <span class="n">u</span> <span class="o">=</span> <span class="n">acos</span> <span class="p">(</span> <span class="n">sin</span><span class="p">(</span><span class="n">obsLat</span><span class="p">)</span> <span class="o">/</span> <span class="n">cos</span><span class="p">(</span><span class="n">decl2</span><span class="p">)</span> <span class="p">);</span> +<a name="line-263"></a> <span class="n">dt</span> <span class="o">=</span> <span class="n">RADIANS_TO_HOURS</span> <span class="p">(</span> <span class="n">asin</span> <span class="p">(</span> <span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">/</span> <span class="n">sin</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">)</span> <span class="o">/</span> <span class="n">cos</span><span class="p">(</span><span class="n">decl2</span><span class="p">)</span> <span class="p">);</span> +<a name="line-264"></a> +<a name="line-265"></a> <span class="cm">/*</span> +<a name="line-266"></a><span class="cm"> * Subtract the correction value from sunrise and add to sunset,</span> +<a name="line-267"></a><span class="cm"> * then (step 11) convert sideral times to UT</span> +<a name="line-268"></a><span class="cm"> */</span> +<a name="line-269"></a> <span class="n">rise1</span> <span class="o">=</span> <span class="p">(</span><span class="n">rise1</span> <span class="o">-</span> <span class="n">dt</span> <span class="o">-</span> <span class="n">tt</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.9972695661</span><span class="p">;</span> +<a name="line-270"></a> <span class="k">if</span> <span class="p">(</span><span class="n">rise1</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> +<a name="line-271"></a> <span class="n">rise1</span> <span class="o">+=</span> <span class="mi">24</span><span class="p">;</span> +<a name="line-272"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">rise1</span> <span class="o">>=</span> <span class="mf">24.</span><span class="p">)</span> +<a name="line-273"></a> <span class="n">rise1</span> <span class="o">-=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-274"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="p">((</span><span class="n">rise1</span> <span class="o">>=</span> <span class="mf">0.</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">rise1</span> <span class="o"><</span> <span class="mf">24.</span><span class="p">));</span> +<a name="line-275"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunrise</span> <span class="o">=</span> <span class="p">(</span><span class="n">rise1</span> <span class="o">*</span> <span class="mf">3600.</span><span class="p">)</span> <span class="o">+</span> <span class="n">lcl_midn</span><span class="p">;</span> +<a name="line-276"></a> +<a name="line-277"></a> <span class="n">set1</span> <span class="o">=</span> <span class="p">(</span><span class="n">set1</span> <span class="o">+</span> <span class="n">dt</span> <span class="o">-</span> <span class="n">tt</span><span class="p">)</span> <span class="o">*</span> <span class="mf">0.9972695661</span><span class="p">;</span> +<a name="line-278"></a> <span class="k">if</span> <span class="p">(</span><span class="n">set1</span> <span class="o"><</span> <span class="mf">0.</span><span class="p">)</span> +<a name="line-279"></a> <span class="n">set1</span> <span class="o">+=</span> <span class="mi">24</span><span class="p">;</span> +<a name="line-280"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">set1</span> <span class="o">>=</span> <span class="mf">24.</span><span class="p">)</span> +<a name="line-281"></a> <span class="n">set1</span> <span class="o">-=</span> <span class="mf">24.</span><span class="p">;</span> +<a name="line-282"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="p">((</span><span class="n">set1</span> <span class="o">>=</span> <span class="mf">0.</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">set1</span> <span class="o"><</span> <span class="mf">24.</span><span class="p">));</span> +<a name="line-283"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunset</span> <span class="o">=</span> <span class="p">(</span><span class="n">set1</span> <span class="o">*</span> <span class="mf">3600.</span><span class="p">)</span> <span class="o">+</span> <span class="n">lcl_midn</span><span class="p">;</span> +<a name="line-284"></a> +<a name="line-285"></a> <span class="k">return</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span><span class="p">);</span> +<a name="line-286"></a><span class="p">}</span> +<a name="line-287"></a> +<a name="line-288"></a> +<a name="line-289"></a><span class="cm">/**</span> +<a name="line-290"></a><span class="cm"> * calc_sun_time:</span> +<a name="line-291"></a><span class="cm"> * @info: #WeatherInfo structure containing the observer's latitude</span> +<a name="line-292"></a><span class="cm"> * and longitude in radians, fills in the sunrise and sunset times.</span> +<a name="line-293"></a><span class="cm"> * @t: time_t</span> +<a name="line-294"></a><span class="cm"> *</span> +<a name="line-295"></a><span class="cm"> * Returns: gboolean indicating if the results are valid.</span> +<a name="line-296"></a><span class="cm"> */</span> +<a name="line-297"></a><span class="n">gboolean</span> +<a name="line-298"></a><span class="nf">calc_sun_time</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="n">t</span><span class="p">)</span> +<a name="line-299"></a><span class="p">{</span> +<a name="line-300"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">latlon_valid</span> <span class="o">&&</span> <span class="n">calc_sun2</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">t</span><span class="p">);</span> +<a name="line-301"></a><span class="p">}</span> +<a name="line-302"></a> +<a name="line-303"></a><span class="cm">/**</span> +<a name="line-304"></a><span class="cm"> * calc_sun:</span> +<a name="line-305"></a><span class="cm"> * @info: #WeatherInfo structure containing the observer's latitude</span> +<a name="line-306"></a><span class="cm"> * and longitude in radians, fills in the sunrise and sunset times.</span> +<a name="line-307"></a><span class="cm"> *</span> +<a name="line-308"></a><span class="cm"> * Returns: gboolean indicating if the results are valid.</span> +<a name="line-309"></a><span class="cm"> */</span> +<a name="line-310"></a><span class="n">gboolean</span> +<a name="line-311"></a><span class="nf">calc_sun</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-312"></a><span class="p">{</span> +<a name="line-313"></a> <span class="k">return</span> <span class="n">calc_sun_time</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">time</span><span class="p">(</span><span class="nb">NULL</span><span class="p">));</span> +<a name="line-314"></a><span class="p">}</span> +<a name="line-315"></a> +<a name="line-316"></a> +<a name="line-317"></a><span class="cm">/**</span> +<a name="line-318"></a><span class="cm"> * weather_info_next_sun_event:</span> +<a name="line-319"></a><span class="cm"> * @info: #WeatherInfo structure</span> +<a name="line-320"></a><span class="cm"> *</span> +<a name="line-321"></a><span class="cm"> * Returns: the interval, in seconds, until the next "sun event":</span> +<a name="line-322"></a><span class="cm"> * - local midnight, when rise and set times are recomputed</span> +<a name="line-323"></a><span class="cm"> * - next sunrise, when icon changes to daytime version</span> +<a name="line-324"></a><span class="cm"> * - next sunset, when icon changes to nighttime version</span> +<a name="line-325"></a><span class="cm"> */</span> +<a name="line-326"></a><span class="n">gint</span> +<a name="line-327"></a><span class="nf">weather_info_next_sun_event</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-328"></a><span class="p">{</span> +<a name="line-329"></a> <span class="kt">time_t</span> <span class="n">now</span> <span class="o">=</span> <span class="n">time</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> +<a name="line-330"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">ltm</span><span class="p">;</span> +<a name="line-331"></a> <span class="kt">time_t</span> <span class="n">nxtEvent</span><span class="p">;</span> +<a name="line-332"></a> +<a name="line-333"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-334"></a> +<a name="line-335"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">calc_sun</span> <span class="p">(</span><span class="n">info</span><span class="p">))</span> +<a name="line-336"></a> <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-337"></a> +<a name="line-338"></a> <span class="cm">/* Determine when the next local midnight occurs */</span> +<a name="line-339"></a> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">localtime_r</span> <span class="p">(</span><span class="o">&</span><span class="n">now</span><span class="p">,</span> <span class="o">&</span><span class="n">ltm</span><span class="p">);</span> +<a name="line-340"></a> <span class="n">ltm</span><span class="p">.</span><span class="n">tm_sec</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-341"></a> <span class="n">ltm</span><span class="p">.</span><span class="n">tm_min</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-342"></a> <span class="n">ltm</span><span class="p">.</span><span class="n">tm_hour</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-343"></a> <span class="n">ltm</span><span class="p">.</span><span class="n">tm_mday</span><span class="o">++</span><span class="p">;</span> +<a name="line-344"></a> <span class="n">nxtEvent</span> <span class="o">=</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&</span><span class="n">ltm</span><span class="p">);</span> +<a name="line-345"></a> +<a name="line-346"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">&&</span> +<a name="line-347"></a> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunset</span> <span class="o">></span> <span class="n">now</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunset</span> <span class="o"><</span> <span class="n">nxtEvent</span><span class="p">))</span> +<a name="line-348"></a> <span class="n">nxtEvent</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunset</span><span class="p">;</span> +<a name="line-349"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">&&</span> +<a name="line-350"></a> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunrise</span> <span class="o">></span> <span class="n">now</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sunrise</span> <span class="o"><</span> <span class="n">nxtEvent</span><span class="p">))</span> +<a name="line-351"></a> <span class="n">nxtEvent</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunrise</span><span class="p">;</span> +<a name="line-352"></a> <span class="k">return</span> <span class="p">(</span><span class="n">gint</span><span class="p">)(</span><span class="n">nxtEvent</span> <span class="o">-</span> <span class="n">now</span><span class="p">);</span> +<a name="line-353"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/8.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/8.html new file mode 100644 index 0000000..c493474 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/8.html @@ -0,0 +1,3562 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> +.highlight .hll { background-color: #ffffcc } +.highlight { background: #ffffff; } +.highlight .c { color: #888888 } /* Comment */ +.highlight .err { color: #FF0000; background-color: #FFAAAA } /* Error */ +.highlight .k { color: #008800; font-weight: bold } /* Keyword */ +.highlight .o { color: #333333 } /* Operator */ +.highlight .ch { color: #888888 } /* Comment.Hashbang */ +.highlight .cm { color: #888888 } /* Comment.Multiline */ +.highlight .cp { color: #557799 } /* Comment.Preproc */ +.highlight .cpf { color: #888888 } /* Comment.PreprocFile */ +.highlight .c1 { color: #888888 } /* Comment.Single */ +.highlight .cs { color: #cc0000; font-weight: bold } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #003388; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #333399; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #6600EE; font-weight: bold } /* Literal.Number */ +.highlight .s { background-color: #fff0f0 } /* Literal.String */ +.highlight .na { color: #0000CC } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #BB0066; font-weight: bold } /* Name.Class */ +.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #880000; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #FF0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0066BB; font-weight: bold } /* Name.Function */ +.highlight .nl { color: #997700; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #007700 } /* Name.Tag */ +.highlight .nv { color: #996633 } /* Name.Variable */ +.highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #6600EE; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #6600EE; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #005588; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #4400EE; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { background-color: #fff0f0 } /* Literal.String.Affix */ +.highlight .sb { background-color: #fff0f0 } /* Literal.String.Backtick */ +.highlight .sc { color: #0044DD } /* Literal.String.Char */ +.highlight .dl { background-color: #fff0f0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #DD4422 } /* Literal.String.Doc */ +.highlight .s2 { background-color: #fff0f0 } /* Literal.String.Double */ +.highlight .se { color: #666666; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */ +.highlight .sh { background-color: #fff0f0 } /* Literal.String.Heredoc */ +.highlight .si { background-color: #eeeeee } /* Literal.String.Interpol */ +.highlight .sx { color: #DD2200; background-color: #fff0f0 } /* Literal.String.Other */ +.highlight .sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */ +.highlight .s1 { background-color: #fff0f0 } /* Literal.String.Single */ +.highlight .ss { color: #AA6600 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0066BB; font-weight: bold } /* Name.Function.Magic */ +.highlight .vc { color: #336699 } /* Name.Variable.Class */ +.highlight .vg { color: #dd7700; font-weight: bold } /* Name.Variable.Global */ +.highlight .vi { color: #3333BB } /* Name.Variable.Instance */ +.highlight .vm { color: #996633 } /* Name.Variable.Magic */ +.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: libmateweather/weather.c</h1> + </div> + <div class="wrapper"> + <div id="menu"> + <p id="filename"><a href="index.html">Defects:</a> weather.c</p> +<a href="8.html#line-326"> variableScope 326</a><a href="8.html#line-498"> uselessAssignmentPtrArg 498</a><a href="8.html#line-498"> unreadVariable 498</a><a href="8.html#line-700"> variableScope 700</a><a href="8.html#line-700"> variableScope 700</a><a href="8.html#line-718"> unsignedLessThanZero 718</a><a href="8.html#line-1073"> unsignedLessThanZero 1073</a><a href="8.html#line-1094"> unsignedLessThanZero 1094</a> + </div> + <div id="content"> +<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + 40 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 60 + 61 + 62 + 63 + 64 + 65 + 66 + 67 + 68 + 69 + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 80 + 81 + 82 + 83 + 84 + 85 + 86 + 87 + 88 + 89 + 90 + 91 + 92 + 93 + 94 + 95 + 96 + 97 + 98 + 99 + 100 + 101 + 102 + 103 + 104 + 105 + 106 + 107 + 108 + 109 + 110 + 111 + 112 + 113 + 114 + 115 + 116 + 117 + 118 + 119 + 120 + 121 + 122 + 123 + 124 + 125 + 126 + 127 + 128 + 129 + 130 + 131 + 132 + 133 + 134 + 135 + 136 + 137 + 138 + 139 + 140 + 141 + 142 + 143 + 144 + 145 + 146 + 147 + 148 + 149 + 150 + 151 + 152 + 153 + 154 + 155 + 156 + 157 + 158 + 159 + 160 + 161 + 162 + 163 + 164 + 165 + 166 + 167 + 168 + 169 + 170 + 171 + 172 + 173 + 174 + 175 + 176 + 177 + 178 + 179 + 180 + 181 + 182 + 183 + 184 + 185 + 186 + 187 + 188 + 189 + 190 + 191 + 192 + 193 + 194 + 195 + 196 + 197 + 198 + 199 + 200 + 201 + 202 + 203 + 204 + 205 + 206 + 207 + 208 + 209 + 210 + 211 + 212 + 213 + 214 + 215 + 216 + 217 + 218 + 219 + 220 + 221 + 222 + 223 + 224 + 225 + 226 + 227 + 228 + 229 + 230 + 231 + 232 + 233 + 234 + 235 + 236 + 237 + 238 + 239 + 240 + 241 + 242 + 243 + 244 + 245 + 246 + 247 + 248 + 249 + 250 + 251 + 252 + 253 + 254 + 255 + 256 + 257 + 258 + 259 + 260 + 261 + 262 + 263 + 264 + 265 + 266 + 267 + 268 + 269 + 270 + 271 + 272 + 273 + 274 + 275 + 276 + 277 + 278 + 279 + 280 + 281 + 282 + 283 + 284 + 285 + 286 + 287 + 288 + 289 + 290 + 291 + 292 + 293 + 294 + 295 + 296 + 297 + 298 + 299 + 300 + 301 + 302 + 303 + 304 + 305 + 306 + 307 + 308 + 309 + 310 + 311 + 312 + 313 + 314 + 315 + 316 + 317 + 318 + 319 + 320 + 321 + 322 + 323 + 324 + 325 + 326 + 327 + 328 + 329 + 330 + 331 + 332 + 333 + 334 + 335 + 336 + 337 + 338 + 339 + 340 + 341 + 342 + 343 + 344 + 345 + 346 + 347 + 348 + 349 + 350 + 351 + 352 + 353 + 354 + 355 + 356 + 357 + 358 + 359 + 360 + 361 + 362 + 363 + 364 + 365 + 366 + 367 + 368 + 369 + 370 + 371 + 372 + 373 + 374 + 375 + 376 + 377 + 378 + 379 + 380 + 381 + 382 + 383 + 384 + 385 + 386 + 387 + 388 + 389 + 390 + 391 + 392 + 393 + 394 + 395 + 396 + 397 + 398 + 399 + 400 + 401 + 402 + 403 + 404 + 405 + 406 + 407 + 408 + 409 + 410 + 411 + 412 + 413 + 414 + 415 + 416 + 417 + 418 + 419 + 420 + 421 + 422 + 423 + 424 + 425 + 426 + 427 + 428 + 429 + 430 + 431 + 432 + 433 + 434 + 435 + 436 + 437 + 438 + 439 + 440 + 441 + 442 + 443 + 444 + 445 + 446 + 447 + 448 + 449 + 450 + 451 + 452 + 453 + 454 + 455 + 456 + 457 + 458 + 459 + 460 + 461 + 462 + 463 + 464 + 465 + 466 + 467 + 468 + 469 + 470 + 471 + 472 + 473 + 474 + 475 + 476 + 477 + 478 + 479 + 480 + 481 + 482 + 483 + 484 + 485 + 486 + 487 + 488 + 489 + 490 + 491 + 492 + 493 + 494 + 495 + 496 + 497 + 498 + 499 + 500 + 501 + 502 + 503 + 504 + 505 + 506 + 507 + 508 + 509 + 510 + 511 + 512 + 513 + 514 + 515 + 516 + 517 + 518 + 519 + 520 + 521 + 522 + 523 + 524 + 525 + 526 + 527 + 528 + 529 + 530 + 531 + 532 + 533 + 534 + 535 + 536 + 537 + 538 + 539 + 540 + 541 + 542 + 543 + 544 + 545 + 546 + 547 + 548 + 549 + 550 + 551 + 552 + 553 + 554 + 555 + 556 + 557 + 558 + 559 + 560 + 561 + 562 + 563 + 564 + 565 + 566 + 567 + 568 + 569 + 570 + 571 + 572 + 573 + 574 + 575 + 576 + 577 + 578 + 579 + 580 + 581 + 582 + 583 + 584 + 585 + 586 + 587 + 588 + 589 + 590 + 591 + 592 + 593 + 594 + 595 + 596 + 597 + 598 + 599 + 600 + 601 + 602 + 603 + 604 + 605 + 606 + 607 + 608 + 609 + 610 + 611 + 612 + 613 + 614 + 615 + 616 + 617 + 618 + 619 + 620 + 621 + 622 + 623 + 624 + 625 + 626 + 627 + 628 + 629 + 630 + 631 + 632 + 633 + 634 + 635 + 636 + 637 + 638 + 639 + 640 + 641 + 642 + 643 + 644 + 645 + 646 + 647 + 648 + 649 + 650 + 651 + 652 + 653 + 654 + 655 + 656 + 657 + 658 + 659 + 660 + 661 + 662 + 663 + 664 + 665 + 666 + 667 + 668 + 669 + 670 + 671 + 672 + 673 + 674 + 675 + 676 + 677 + 678 + 679 + 680 + 681 + 682 + 683 + 684 + 685 + 686 + 687 + 688 + 689 + 690 + 691 + 692 + 693 + 694 + 695 + 696 + 697 + 698 + 699 + 700 + 701 + 702 + 703 + 704 + 705 + 706 + 707 + 708 + 709 + 710 + 711 + 712 + 713 + 714 + 715 + 716 + 717 + 718 + 719 + 720 + 721 + 722 + 723 + 724 + 725 + 726 + 727 + 728 + 729 + 730 + 731 + 732 + 733 + 734 + 735 + 736 + 737 + 738 + 739 + 740 + 741 + 742 + 743 + 744 + 745 + 746 + 747 + 748 + 749 + 750 + 751 + 752 + 753 + 754 + 755 + 756 + 757 + 758 + 759 + 760 + 761 + 762 + 763 + 764 + 765 + 766 + 767 + 768 + 769 + 770 + 771 + 772 + 773 + 774 + 775 + 776 + 777 + 778 + 779 + 780 + 781 + 782 + 783 + 784 + 785 + 786 + 787 + 788 + 789 + 790 + 791 + 792 + 793 + 794 + 795 + 796 + 797 + 798 + 799 + 800 + 801 + 802 + 803 + 804 + 805 + 806 + 807 + 808 + 809 + 810 + 811 + 812 + 813 + 814 + 815 + 816 + 817 + 818 + 819 + 820 + 821 + 822 + 823 + 824 + 825 + 826 + 827 + 828 + 829 + 830 + 831 + 832 + 833 + 834 + 835 + 836 + 837 + 838 + 839 + 840 + 841 + 842 + 843 + 844 + 845 + 846 + 847 + 848 + 849 + 850 + 851 + 852 + 853 + 854 + 855 + 856 + 857 + 858 + 859 + 860 + 861 + 862 + 863 + 864 + 865 + 866 + 867 + 868 + 869 + 870 + 871 + 872 + 873 + 874 + 875 + 876 + 877 + 878 + 879 + 880 + 881 + 882 + 883 + 884 + 885 + 886 + 887 + 888 + 889 + 890 + 891 + 892 + 893 + 894 + 895 + 896 + 897 + 898 + 899 + 900 + 901 + 902 + 903 + 904 + 905 + 906 + 907 + 908 + 909 + 910 + 911 + 912 + 913 + 914 + 915 + 916 + 917 + 918 + 919 + 920 + 921 + 922 + 923 + 924 + 925 + 926 + 927 + 928 + 929 + 930 + 931 + 932 + 933 + 934 + 935 + 936 + 937 + 938 + 939 + 940 + 941 + 942 + 943 + 944 + 945 + 946 + 947 + 948 + 949 + 950 + 951 + 952 + 953 + 954 + 955 + 956 + 957 + 958 + 959 + 960 + 961 + 962 + 963 + 964 + 965 + 966 + 967 + 968 + 969 + 970 + 971 + 972 + 973 + 974 + 975 + 976 + 977 + 978 + 979 + 980 + 981 + 982 + 983 + 984 + 985 + 986 + 987 + 988 + 989 + 990 + 991 + 992 + 993 + 994 + 995 + 996 + 997 + 998 + 999 +1000 +1001 +1002 +1003 +1004 +1005 +1006 +1007 +1008 +1009 +1010 +1011 +1012 +1013 +1014 +1015 +1016 +1017 +1018 +1019 +1020 +1021 +1022 +1023 +1024 +1025 +1026 +1027 +1028 +1029 +1030 +1031 +1032 +1033 +1034 +1035 +1036 +1037 +1038 +1039 +1040 +1041 +1042 +1043 +1044 +1045 +1046 +1047 +1048 +1049 +1050 +1051 +1052 +1053 +1054 +1055 +1056 +1057 +1058 +1059 +1060 +1061 +1062 +1063 +1064 +1065 +1066 +1067 +1068 +1069 +1070 +1071 +1072 +1073 +1074 +1075 +1076 +1077 +1078 +1079 +1080 +1081 +1082 +1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097 +1098 +1099 +1100 +1101 +1102 +1103 +1104 +1105 +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131 +1132 +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142 +1143 +1144 +1145 +1146 +1147 +1148 +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 +1175 +1176 +1177 +1178 +1179 +1180 +1181 +1182 +1183 +1184 +1185 +1186 +1187 +1188 +1189 +1190 +1191 +1192 +1193 +1194 +1195 +1196 +1197 +1198 +1199 +1200 +1201 +1202 +1203 +1204 +1205 +1206 +1207 +1208 +1209 +1210 +1211 +1212 +1213 +1214 +1215 +1216 +1217 +1218 +1219 +1220 +1221 +1222 +1223 +1224 +1225 +1226 +1227 +1228 +1229 +1230 +1231 +1232 +1233 +1234 +1235 +1236 +1237 +1238 +1239 +1240 +1241 +1242 +1243 +1244 +1245 +1246 +1247 +1248 +1249 +1250 +1251 +1252 +1253 +1254 +1255 +1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1295 +1296 +1297 +1298 +1299 +1300 +1301 +1302 +1303 +1304 +1305 +1306 +1307 +1308 +1309 +1310 +1311 +1312 +1313 +1314 +1315 +1316 +1317 +1318 +1319 +1320 +1321 +1322 +1323 +1324 +1325 +1326 +1327 +1328 +1329 +1330 +1331 +1332 +1333 +1334 +1335 +1336 +1337 +1338 +1339 +1340 +1341 +1342 +1343 +1344 +1345 +1346 +1347 +1348 +1349 +1350 +1351 +1352 +1353 +1354 +1355 +1356 +1357 +1358 +1359 +1360 +1361 +1362 +1363 +1364 +1365 +1366 +1367 +1368 +1369 +1370 +1371 +1372 +1373 +1374 +1375 +1376 +1377 +1378 +1379 +1380 +1381 +1382 +1383 +1384 +1385 +1386 +1387 +1388 +1389 +1390 +1391 +1392 +1393 +1394 +1395 +1396 +1397 +1398 +1399 +1400 +1401 +1402 +1403 +1404 +1405 +1406 +1407 +1408 +1409 +1410 +1411 +1412 +1413 +1414 +1415 +1416 +1417 +1418 +1419 +1420 +1421 +1422 +1423 +1424 +1425 +1426 +1427 +1428 +1429 +1430 +1431 +1432 +1433 +1434 +1435 +1436 +1437 +1438 +1439 +1440 +1441 +1442 +1443 +1444 +1445 +1446 +1447 +1448 +1449 +1450 +1451 +1452 +1453 +1454 +1455 +1456 +1457 +1458 +1459 +1460 +1461 +1462 +1463 +1464 +1465 +1466 +1467 +1468 +1469 +1470 +1471 +1472 +1473 +1474 +1475 +1476 +1477 +1478 +1479 +1480 +1481 +1482 +1483 +1484 +1485 +1486 +1487 +1488 +1489 +1490 +1491 +1492 +1493 +1494 +1495 +1496 +1497 +1498 +1499 +1500 +1501 +1502 +1503 +1504 +1505 +1506 +1507 +1508 +1509 +1510 +1511 +1512 +1513 +1514 +1515 +1516 +1517 +1518 +1519 +1520 +1521 +1522 +1523 +1524 +1525 +1526 +1527 +1528 +1529 +1530 +1531 +1532 +1533 +1534 +1535 +1536 +1537 +1538 +1539 +1540 +1541 +1542 +1543 +1544 +1545 +1546 +1547 +1548 +1549 +1550 +1551 +1552 +1553 +1554 +1555 +1556 +1557 +1558 +1559 +1560 +1561 +1562 +1563 +1564 +1565 +1566 +1567 +1568 +1569 +1570 +1571 +1572 +1573 +1574 +1575 +1576 +1577 +1578 +1579 +1580 +1581 +1582 +1583 +1584 +1585 +1586 +1587 +1588 +1589 +1590 +1591 +1592 +1593 +1594 +1595 +1596 +1597 +1598 +1599 +1600 +1601 +1602 +1603 +1604 +1605 +1606 +1607 +1608 +1609 +1610 +1611 +1612 +1613 +1614 +1615 +1616 +1617 +1618 +1619 +1620 +1621 +1622 +1623 +1624 +1625 +1626 +1627 +1628 +1629 +1630 +1631 +1632 +1633 +1634 +1635 +1636 +1637 +1638 +1639 +1640 +1641 +1642 +1643 +1644 +1645 +1646 +1647 +1648 +1649 +1650 +1651 +1652 +1653 +1654 +1655 +1656 +1657 +1658 +1659 +1660 +1661 +1662 +1663 +1664 +1665 +1666 +1667 +1668 +1669 +1670 +1671 +1672 +1673 +1674 +1675 +1676 +1677 +1678</pre></div></td><td class="code"><div class="highlight"><pre><span></span><a name="line-1"></a><span class="cm">/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 4 -*- */</span> +<a name="line-2"></a><span class="cm">/* weather.c - Overall weather server functions</span> +<a name="line-3"></a><span class="cm"> *</span> +<a name="line-4"></a><span class="cm"> * This program is free software; you can redistribute it and/or</span> +<a name="line-5"></a><span class="cm"> * modify it under the terms of the GNU General Public License as</span> +<a name="line-6"></a><span class="cm"> * published by the Free Software Foundation; either version 2 of the</span> +<a name="line-7"></a><span class="cm"> * License, or (at your option) any later version.</span> +<a name="line-8"></a><span class="cm"> *</span> +<a name="line-9"></a><span class="cm"> * This program is distributed in the hope that it will be useful, but</span> +<a name="line-10"></a><span class="cm"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="line-11"></a><span class="cm"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span> +<a name="line-12"></a><span class="cm"> * General Public License for more details.</span> +<a name="line-13"></a><span class="cm"> *</span> +<a name="line-14"></a><span class="cm"> * You should have received a copy of the GNU General Public License</span> +<a name="line-15"></a><span class="cm"> * along with this program; if not, see</span> +<a name="line-16"></a><span class="cm"> * <http://www.gnu.org/licenses/>.</span> +<a name="line-17"></a><span class="cm"> */</span> +<a name="line-18"></a> +<a name="line-19"></a><span class="cp">#ifdef HAVE_CONFIG_H</span> +<a name="line-20"></a><span class="cp">#include</span> <span class="cpf"><config.h></span><span class="cp"></span> +<a name="line-21"></a><span class="cp">#endif</span> +<a name="line-22"></a> +<a name="line-23"></a><span class="cp">#include</span> <span class="cpf"><stdio.h></span><span class="cp"></span> +<a name="line-24"></a><span class="cp">#include</span> <span class="cpf"><stdlib.h></span><span class="cp"></span> +<a name="line-25"></a><span class="cp">#include</span> <span class="cpf"><assert.h></span><span class="cp"></span> +<a name="line-26"></a><span class="cp">#include</span> <span class="cpf"><string.h></span><span class="cp"></span> +<a name="line-27"></a><span class="cp">#include</span> <span class="cpf"><ctype.h></span><span class="cp"></span> +<a name="line-28"></a><span class="cp">#include</span> <span class="cpf"><math.h></span><span class="cp"></span> +<a name="line-29"></a><span class="cp">#include</span> <span class="cpf"><fenv.h></span><span class="cp"></span> +<a name="line-30"></a> +<a name="line-31"></a><span class="cp">#ifdef HAVE_VALUES_H</span> +<a name="line-32"></a><span class="cp">#include</span> <span class="cpf"><values.h></span><span class="cp"></span> +<a name="line-33"></a><span class="cp">#endif</span> +<a name="line-34"></a> +<a name="line-35"></a><span class="cp">#include</span> <span class="cpf"><time.h></span><span class="cp"></span> +<a name="line-36"></a><span class="cp">#include</span> <span class="cpf"><unistd.h></span><span class="cp"></span> +<a name="line-37"></a> +<a name="line-38"></a><span class="cp">#include</span> <span class="cpf"><gdk-pixbuf/gdk-pixbuf.h></span><span class="cp"></span> +<a name="line-39"></a> +<a name="line-40"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span> +<a name="line-41"></a><span class="cp">#include</span> <span class="cpf">"weather.h"</span><span class="cp"></span> +<a name="line-42"></a><span class="cp">#include</span> <span class="cpf">"weather-priv.h"</span><span class="cp"></span> +<a name="line-43"></a> +<a name="line-44"></a><span class="cp">#define MOON_PHASES 36</span> +<a name="line-45"></a> +<a name="line-46"></a><span class="cm">/**</span> +<a name="line-47"></a><span class="cm"> * SECTION:weather</span> +<a name="line-48"></a><span class="cm"> * @Title: weather</span> +<a name="line-49"></a><span class="cm"> */</span> +<a name="line-50"></a> +<a name="line-51"></a><span class="k">static</span> <span class="kt">void</span> <span class="nf">_weather_internal_check</span> <span class="p">(</span><span class="kt">void</span><span class="p">);</span> +<a name="line-52"></a> +<a name="line-53"></a> +<a name="line-54"></a><span class="k">static</span> <span class="kr">inline</span> <span class="kt">void</span> +<a name="line-55"></a><span class="nf">mateweather_gettext_init</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<a name="line-56"></a><span class="p">{</span> +<a name="line-57"></a> <span class="k">static</span> <span class="n">gsize</span> <span class="n">mateweather_gettext_initialized</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-58"></a> +<a name="line-59"></a> <span class="k">if</span> <span class="p">(</span><span class="n">G_UNLIKELY</span> <span class="p">(</span><span class="n">g_once_init_enter</span> <span class="p">(</span><span class="o">&</span><span class="n">mateweather_gettext_initialized</span><span class="p">)))</span> <span class="p">{</span> +<a name="line-60"></a> <span class="n">bindtextdomain</span> <span class="p">(</span><span class="n">GETTEXT_PACKAGE</span><span class="p">,</span> <span class="n">MATELOCALEDIR</span><span class="p">);</span> +<a name="line-61"></a><span class="cp">#ifdef HAVE_BIND_TEXTDOMAIN_CODESET</span> +<a name="line-62"></a> <span class="n">bind_textdomain_codeset</span> <span class="p">(</span><span class="n">GETTEXT_PACKAGE</span><span class="p">,</span> <span class="s">"UTF-8"</span><span class="p">);</span> +<a name="line-63"></a><span class="cp">#endif</span> +<a name="line-64"></a> <span class="n">g_once_init_leave</span> <span class="p">(</span><span class="o">&</span><span class="n">mateweather_gettext_initialized</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-65"></a> <span class="p">}</span> +<a name="line-66"></a><span class="p">}</span> +<a name="line-67"></a> +<a name="line-68"></a><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span> +<a name="line-69"></a><span class="nf">mateweather_gettext</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">str</span><span class="p">)</span> +<a name="line-70"></a><span class="p">{</span> +<a name="line-71"></a> <span class="n">mateweather_gettext_init</span> <span class="p">();</span> +<a name="line-72"></a> <span class="k">return</span> <span class="n">dgettext</span> <span class="p">(</span><span class="n">GETTEXT_PACKAGE</span><span class="p">,</span> <span class="n">str</span><span class="p">);</span> +<a name="line-73"></a><span class="p">}</span> +<a name="line-74"></a> +<a name="line-75"></a><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span> +<a name="line-76"></a><span class="nf">mateweather_dpgettext</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">context</span><span class="p">,</span> +<a name="line-77"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">str</span><span class="p">)</span> +<a name="line-78"></a><span class="p">{</span> +<a name="line-79"></a> <span class="n">mateweather_gettext_init</span> <span class="p">();</span> +<a name="line-80"></a> <span class="k">return</span> <span class="n">g_dpgettext2</span> <span class="p">(</span><span class="n">GETTEXT_PACKAGE</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="n">str</span><span class="p">);</span> +<a name="line-81"></a><span class="p">}</span> +<a name="line-82"></a> +<a name="line-83"></a><span class="cm">/*</span> +<a name="line-84"></a><span class="cm"> * Convert string of the form "DD-MM-SSH" to radians</span> +<a name="line-85"></a><span class="cm"> * DD:degrees (to 3 digits), MM:minutes, SS:seconds H:hemisphere (NESW)</span> +<a name="line-86"></a><span class="cm"> * Return value is positive for N,E; negative for S,W.</span> +<a name="line-87"></a><span class="cm"> */</span> +<a name="line-88"></a><span class="k">static</span> <span class="n">gdouble</span> +<a name="line-89"></a><span class="nf">dmsh2rad</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">latlon</span><span class="p">)</span> +<a name="line-90"></a><span class="p">{</span> +<a name="line-91"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">p1</span><span class="p">,</span> <span class="o">*</span><span class="n">p2</span><span class="p">;</span> +<a name="line-92"></a> <span class="kt">int</span> <span class="n">deg</span><span class="p">,</span> <span class="n">min</span><span class="p">,</span> <span class="n">sec</span><span class="p">,</span> <span class="n">dir</span><span class="p">;</span> +<a name="line-93"></a> <span class="n">gdouble</span> <span class="n">value</span><span class="p">;</span> +<a name="line-94"></a> +<a name="line-95"></a> <span class="k">if</span> <span class="p">(</span><span class="n">latlon</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-96"></a> <span class="k">return</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-97"></a> <span class="n">p1</span> <span class="o">=</span> <span class="n">strchr</span> <span class="p">(</span><span class="n">latlon</span><span class="p">,</span> <span class="sc">'-'</span><span class="p">);</span> +<a name="line-98"></a> <span class="n">p2</span> <span class="o">=</span> <span class="n">strrchr</span> <span class="p">(</span><span class="n">latlon</span><span class="p">,</span> <span class="sc">'-'</span><span class="p">);</span> +<a name="line-99"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p1</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">p1</span> <span class="o">==</span> <span class="n">latlon</span><span class="p">)</span> <span class="p">{</span> +<a name="line-100"></a> <span class="k">return</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-101"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">p1</span> <span class="o">==</span> <span class="n">p2</span><span class="p">)</span> <span class="p">{</span> +<a name="line-102"></a> <span class="n">sscanf</span> <span class="p">(</span><span class="n">latlon</span><span class="p">,</span> <span class="s">"%d-%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">deg</span><span class="p">,</span> <span class="o">&</span><span class="n">min</span><span class="p">);</span> +<a name="line-103"></a> <span class="n">sec</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-104"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">p2</span> <span class="o">==</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">p1</span><span class="p">)</span> <span class="p">{</span> +<a name="line-105"></a> <span class="k">return</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-106"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-107"></a> <span class="n">sscanf</span> <span class="p">(</span><span class="n">latlon</span><span class="p">,</span> <span class="s">"%d-%d-%d"</span><span class="p">,</span> <span class="o">&</span><span class="n">deg</span><span class="p">,</span> <span class="o">&</span><span class="n">min</span><span class="p">,</span> <span class="o">&</span><span class="n">sec</span><span class="p">);</span> +<a name="line-108"></a> <span class="p">}</span> +<a name="line-109"></a> <span class="k">if</span> <span class="p">(</span><span class="n">deg</span> <span class="o">></span> <span class="mi">180</span> <span class="o">||</span> <span class="n">min</span> <span class="o">>=</span> <span class="mi">60</span> <span class="o">||</span> <span class="n">sec</span> <span class="o">>=</span> <span class="mi">60</span><span class="p">)</span> +<a name="line-110"></a> <span class="k">return</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-111"></a> <span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="n">gdouble</span><span class="p">)((</span><span class="n">deg</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">+</span> <span class="n">min</span><span class="p">)</span> <span class="o">*</span> <span class="mi">60</span> <span class="o">+</span> <span class="n">sec</span><span class="p">)</span> <span class="o">*</span> <span class="n">M_PI</span> <span class="o">/</span> <span class="mf">648000.</span><span class="p">;</span> +<a name="line-112"></a> +<a name="line-113"></a> <span class="n">dir</span> <span class="o">=</span> <span class="n">g_ascii_toupper</span> <span class="p">(</span><span class="n">latlon</span><span class="p">[</span><span class="n">strlen</span> <span class="p">(</span><span class="n">latlon</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]);</span> +<a name="line-114"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dir</span> <span class="o">==</span> <span class="sc">'W'</span> <span class="o">||</span> <span class="n">dir</span> <span class="o">==</span> <span class="sc">'S'</span><span class="p">)</span> +<a name="line-115"></a> <span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="n">value</span><span class="p">;</span> +<a name="line-116"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">dir</span> <span class="o">!=</span> <span class="sc">'E'</span> <span class="o">&&</span> <span class="n">dir</span> <span class="o">!=</span> <span class="sc">'N'</span> <span class="o">&&</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="mf">0.0</span> <span class="o">||</span> <span class="n">dir</span> <span class="o">!=</span> <span class="sc">'0'</span><span class="p">))</span> +<a name="line-117"></a> <span class="n">value</span> <span class="o">=</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-118"></a> <span class="k">return</span> <span class="n">value</span><span class="p">;</span> +<a name="line-119"></a><span class="p">}</span> +<a name="line-120"></a> +<a name="line-121"></a><span class="n">WeatherLocation</span> <span class="o">*</span> +<a name="line-122"></a><span class="nf">weather_location_new</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">name</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">code</span><span class="p">,</span> +<a name="line-123"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">zone</span><span class="p">,</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">radar</span><span class="p">,</span> +<a name="line-124"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">coordinates</span><span class="p">,</span> +<a name="line-125"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">country_code</span><span class="p">,</span> +<a name="line-126"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">tz_hint</span><span class="p">)</span> +<a name="line-127"></a><span class="p">{</span> +<a name="line-128"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location</span><span class="p">;</span> +<a name="line-129"></a> +<a name="line-130"></a> <span class="n">_weather_internal_check</span> <span class="p">();</span> +<a name="line-131"></a> +<a name="line-132"></a> <span class="n">location</span> <span class="o">=</span> <span class="n">g_new</span> <span class="p">(</span><span class="n">WeatherLocation</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-133"></a> +<a name="line-134"></a> <span class="cm">/* name and metar code must be set */</span> +<a name="line-135"></a> <span class="n">location</span><span class="o">-></span><span class="n">name</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">name</span><span class="p">);</span> +<a name="line-136"></a> <span class="n">location</span><span class="o">-></span><span class="n">code</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">code</span><span class="p">);</span> +<a name="line-137"></a> +<a name="line-138"></a> <span class="k">if</span> <span class="p">(</span><span class="n">zone</span><span class="p">)</span> <span class="p">{</span> +<a name="line-139"></a> <span class="n">location</span><span class="o">-></span><span class="n">zone</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">zone</span><span class="p">);</span> +<a name="line-140"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-141"></a> <span class="n">location</span><span class="o">-></span><span class="n">zone</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">"------"</span><span class="p">);</span> +<a name="line-142"></a> <span class="p">}</span> +<a name="line-143"></a> +<a name="line-144"></a> <span class="k">if</span> <span class="p">(</span><span class="n">radar</span><span class="p">)</span> <span class="p">{</span> +<a name="line-145"></a> <span class="n">location</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">radar</span><span class="p">);</span> +<a name="line-146"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-147"></a> <span class="n">location</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">"---"</span><span class="p">);</span> +<a name="line-148"></a> <span class="p">}</span> +<a name="line-149"></a> +<a name="line-150"></a> <span class="k">if</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">zone</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">)</span> <span class="p">{</span> +<a name="line-151"></a> <span class="n">location</span><span class="o">-></span><span class="n">zone_valid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-152"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-153"></a> <span class="n">location</span><span class="o">-></span><span class="n">zone_valid</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-154"></a> <span class="p">}</span> +<a name="line-155"></a> +<a name="line-156"></a> <span class="n">location</span><span class="o">-></span><span class="n">coordinates</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-157"></a> <span class="k">if</span> <span class="p">(</span><span class="n">coordinates</span><span class="p">)</span> +<a name="line-158"></a> <span class="p">{</span> +<a name="line-159"></a> <span class="kt">char</span> <span class="o">**</span><span class="n">pieces</span><span class="p">;</span> +<a name="line-160"></a> +<a name="line-161"></a> <span class="n">pieces</span> <span class="o">=</span> <span class="n">g_strsplit</span> <span class="p">(</span><span class="n">coordinates</span><span class="p">,</span> <span class="s">" "</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span> +<a name="line-162"></a> +<a name="line-163"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_strv_length</span> <span class="p">(</span><span class="n">pieces</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">)</span> +<a name="line-164"></a> <span class="p">{</span> +<a name="line-165"></a> <span class="n">location</span><span class="o">-></span><span class="n">coordinates</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">coordinates</span><span class="p">);</span> +<a name="line-166"></a> <span class="n">location</span><span class="o">-></span><span class="n">latitude</span> <span class="o">=</span> <span class="n">dmsh2rad</span> <span class="p">(</span><span class="n">pieces</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span> +<a name="line-167"></a> <span class="n">location</span><span class="o">-></span><span class="n">longitude</span> <span class="o">=</span> <span class="n">dmsh2rad</span> <span class="p">(</span><span class="n">pieces</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span> +<a name="line-168"></a> <span class="p">}</span> +<a name="line-169"></a> +<a name="line-170"></a> <span class="n">g_strfreev</span> <span class="p">(</span><span class="n">pieces</span><span class="p">);</span> +<a name="line-171"></a> <span class="p">}</span> +<a name="line-172"></a> +<a name="line-173"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">location</span><span class="o">-></span><span class="n">coordinates</span><span class="p">)</span> +<a name="line-174"></a> <span class="p">{</span> +<a name="line-175"></a> <span class="n">location</span><span class="o">-></span><span class="n">coordinates</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">"---"</span><span class="p">);</span> +<a name="line-176"></a> <span class="n">location</span><span class="o">-></span><span class="n">latitude</span> <span class="o">=</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-177"></a> <span class="n">location</span><span class="o">-></span><span class="n">longitude</span> <span class="o">=</span> <span class="n">DBL_MAX</span><span class="p">;</span> +<a name="line-178"></a> <span class="p">}</span> +<a name="line-179"></a> +<a name="line-180"></a> <span class="n">location</span><span class="o">-></span><span class="n">latlon_valid</span> <span class="o">=</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">latitude</span> <span class="o"><</span> <span class="n">DBL_MAX</span> <span class="o">&&</span> <span class="n">location</span><span class="o">-></span><span class="n">longitude</span> <span class="o"><</span> <span class="n">DBL_MAX</span><span class="p">);</span> +<a name="line-181"></a> +<a name="line-182"></a> <span class="n">location</span><span class="o">-></span><span class="n">country_code</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">country_code</span><span class="p">);</span> +<a name="line-183"></a> <span class="n">location</span><span class="o">-></span><span class="n">tz_hint</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">tz_hint</span><span class="p">);</span> +<a name="line-184"></a> +<a name="line-185"></a> <span class="k">return</span> <span class="n">location</span><span class="p">;</span> +<a name="line-186"></a><span class="p">}</span> +<a name="line-187"></a> +<a name="line-188"></a><span class="n">WeatherLocation</span> <span class="o">*</span> +<a name="line-189"></a><span class="nf">weather_location_clone</span> <span class="p">(</span><span class="k">const</span> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location</span><span class="p">)</span> +<a name="line-190"></a><span class="p">{</span> +<a name="line-191"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">clone</span><span class="p">;</span> +<a name="line-192"></a> +<a name="line-193"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">location</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-194"></a> +<a name="line-195"></a> <span class="n">clone</span> <span class="o">=</span> <span class="n">weather_location_new</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">name</span><span class="p">,</span> +<a name="line-196"></a> <span class="n">location</span><span class="o">-></span><span class="n">code</span><span class="p">,</span> <span class="n">location</span><span class="o">-></span><span class="n">zone</span><span class="p">,</span> +<a name="line-197"></a> <span class="n">location</span><span class="o">-></span><span class="n">radar</span><span class="p">,</span> <span class="n">location</span><span class="o">-></span><span class="n">coordinates</span><span class="p">,</span> +<a name="line-198"></a> <span class="n">location</span><span class="o">-></span><span class="n">country_code</span><span class="p">,</span> <span class="n">location</span><span class="o">-></span><span class="n">tz_hint</span><span class="p">);</span> +<a name="line-199"></a> <span class="n">clone</span><span class="o">-></span><span class="n">latitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">-></span><span class="n">latitude</span><span class="p">;</span> +<a name="line-200"></a> <span class="n">clone</span><span class="o">-></span><span class="n">longitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">-></span><span class="n">longitude</span><span class="p">;</span> +<a name="line-201"></a> <span class="n">clone</span><span class="o">-></span><span class="n">latlon_valid</span> <span class="o">=</span> <span class="n">location</span><span class="o">-></span><span class="n">latlon_valid</span><span class="p">;</span> +<a name="line-202"></a> <span class="k">return</span> <span class="n">clone</span><span class="p">;</span> +<a name="line-203"></a><span class="p">}</span> +<a name="line-204"></a> +<a name="line-205"></a><span class="kt">void</span> +<a name="line-206"></a><span class="nf">weather_location_free</span> <span class="p">(</span><span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location</span><span class="p">)</span> +<a name="line-207"></a><span class="p">{</span> +<a name="line-208"></a> <span class="k">if</span> <span class="p">(</span><span class="n">location</span><span class="p">)</span> <span class="p">{</span> +<a name="line-209"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">name</span><span class="p">);</span> +<a name="line-210"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">code</span><span class="p">);</span> +<a name="line-211"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">zone</span><span class="p">);</span> +<a name="line-212"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">radar</span><span class="p">);</span> +<a name="line-213"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">coordinates</span><span class="p">);</span> +<a name="line-214"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">country_code</span><span class="p">);</span> +<a name="line-215"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="o">-></span><span class="n">tz_hint</span><span class="p">);</span> +<a name="line-216"></a> +<a name="line-217"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">location</span><span class="p">);</span> +<a name="line-218"></a> <span class="p">}</span> +<a name="line-219"></a><span class="p">}</span> +<a name="line-220"></a> +<a name="line-221"></a><span class="n">gboolean</span> +<a name="line-222"></a><span class="nf">weather_location_equal</span> <span class="p">(</span><span class="k">const</span> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location1</span><span class="p">,</span> <span class="k">const</span> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location2</span><span class="p">)</span> +<a name="line-223"></a><span class="p">{</span> +<a name="line-224"></a> <span class="cm">/* if something is NULL, then it's TRUE if and only if both are NULL) */</span> +<a name="line-225"></a> <span class="k">if</span> <span class="p">(</span><span class="n">location1</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">location2</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-226"></a> <span class="k">return</span> <span class="p">(</span><span class="n">location1</span> <span class="o">==</span> <span class="n">location2</span><span class="p">);</span> +<a name="line-227"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">location1</span><span class="o">-></span><span class="n">code</span> <span class="o">||</span> <span class="o">!</span><span class="n">location2</span><span class="o">-></span><span class="n">code</span><span class="p">)</span> +<a name="line-228"></a> <span class="k">return</span> <span class="p">(</span><span class="n">location1</span><span class="o">-></span><span class="n">code</span> <span class="o">==</span> <span class="n">location2</span><span class="o">-></span><span class="n">code</span><span class="p">);</span> +<a name="line-229"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">location1</span><span class="o">-></span><span class="n">name</span> <span class="o">||</span> <span class="o">!</span><span class="n">location2</span><span class="o">-></span><span class="n">name</span><span class="p">)</span> +<a name="line-230"></a> <span class="k">return</span> <span class="p">(</span><span class="n">location1</span><span class="o">-></span><span class="n">name</span> <span class="o">==</span> <span class="n">location2</span><span class="o">-></span><span class="n">name</span><span class="p">);</span> +<a name="line-231"></a> +<a name="line-232"></a> <span class="k">return</span> <span class="p">((</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">location1</span><span class="o">-></span><span class="n">code</span><span class="p">,</span> <span class="n">location2</span><span class="o">-></span><span class="n">code</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="o">&&</span> +<a name="line-233"></a> <span class="p">(</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">location1</span><span class="o">-></span><span class="n">name</span><span class="p">,</span> <span class="n">location2</span><span class="o">-></span><span class="n">name</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">));</span> +<a name="line-234"></a><span class="p">}</span> +<a name="line-235"></a> +<a name="line-236"></a><span class="k">static</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">wind_direction_str</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-237"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Variable"</span><span class="p">),</span> +<a name="line-238"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"North"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"North - NorthEast"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Northeast"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"East - NorthEast"</span><span class="p">),</span> +<a name="line-239"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"East"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"East - Southeast"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Southeast"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"South - Southeast"</span><span class="p">),</span> +<a name="line-240"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"South"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"South - Southwest"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Southwest"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"West - Southwest"</span><span class="p">),</span> +<a name="line-241"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"West"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"West - Northwest"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Northwest"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"North - Northwest"</span><span class="p">)</span> +<a name="line-242"></a><span class="p">};</span> +<a name="line-243"></a> +<a name="line-244"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-245"></a><span class="nf">weather_wind_direction_string</span> <span class="p">(</span><span class="n">WeatherWindDirection</span> <span class="n">wind</span><span class="p">)</span> +<a name="line-246"></a><span class="p">{</span> +<a name="line-247"></a> <span class="k">if</span> <span class="p">(</span><span class="n">wind</span> <span class="o"><=</span> <span class="n">WIND_INVALID</span> <span class="o">||</span> <span class="n">wind</span> <span class="o">>=</span> <span class="n">WIND_LAST</span><span class="p">)</span> +<a name="line-248"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Invalid"</span><span class="p">);</span> +<a name="line-249"></a> +<a name="line-250"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="n">wind_direction_str</span><span class="p">[(</span><span class="kt">int</span><span class="p">)</span><span class="n">wind</span><span class="p">]);</span> +<a name="line-251"></a><span class="p">}</span> +<a name="line-252"></a> +<a name="line-253"></a><span class="k">static</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">sky_str</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-254"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Clear Sky"</span><span class="p">),</span> +<a name="line-255"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Broken clouds"</span><span class="p">),</span> +<a name="line-256"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Scattered clouds"</span><span class="p">),</span> +<a name="line-257"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Few clouds"</span><span class="p">),</span> +<a name="line-258"></a> <span class="n">N_</span><span class="p">(</span><span class="s">"Overcast"</span><span class="p">)</span> +<a name="line-259"></a><span class="p">};</span> +<a name="line-260"></a> +<a name="line-261"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-262"></a><span class="nf">weather_sky_string</span> <span class="p">(</span><span class="n">WeatherSky</span> <span class="n">sky</span><span class="p">)</span> +<a name="line-263"></a><span class="p">{</span> +<a name="line-264"></a> <span class="k">if</span> <span class="p">(</span><span class="n">sky</span> <span class="o"><=</span> <span class="n">SKY_INVALID</span> <span class="o">||</span> <span class="n">sky</span> <span class="o">>=</span> <span class="n">SKY_LAST</span><span class="p">)</span> +<a name="line-265"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Invalid"</span><span class="p">);</span> +<a name="line-266"></a> +<a name="line-267"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="n">sky_str</span><span class="p">[(</span><span class="kt">int</span><span class="p">)</span><span class="n">sky</span><span class="p">]);</span> +<a name="line-268"></a><span class="p">}</span> +<a name="line-269"></a> +<a name="line-270"></a> +<a name="line-271"></a><span class="cm">/*</span> +<a name="line-272"></a><span class="cm"> * Even though tedious, I switched to a 2D array for weather condition</span> +<a name="line-273"></a><span class="cm"> * strings, in order to facilitate internationalization, esp. for languages</span> +<a name="line-274"></a><span class="cm"> * with genders.</span> +<a name="line-275"></a><span class="cm"> */</span> +<a name="line-276"></a> +<a name="line-277"></a><span class="cm">/*</span> +<a name="line-278"></a><span class="cm"> * Almost all reportable combinations listed in</span> +<a name="line-279"></a><span class="cm"> * http://www.crh.noaa.gov/arx/wx.tbl.php are entered below, except those</span> +<a name="line-280"></a><span class="cm"> * having 2 qualifiers mixed together [such as "Blowing snow in vicinity"</span> +<a name="line-281"></a><span class="cm"> * (VCBLSN), "Thunderstorm in vicinity" (VCTS), etc].</span> +<a name="line-282"></a><span class="cm"> * Combinations that are not possible are filled in with "??".</span> +<a name="line-283"></a><span class="cm"> * Some other exceptions not handled yet, such as "SN BLSN" which has</span> +<a name="line-284"></a><span class="cm"> * special meaning.</span> +<a name="line-285"></a><span class="cm"> */</span> +<a name="line-286"></a> +<a name="line-287"></a><span class="cm">/*</span> +<a name="line-288"></a><span class="cm"> * Note, magic numbers, when you change the size here, make sure to change</span> +<a name="line-289"></a><span class="cm"> * the below function so that new values are recognized</span> +<a name="line-290"></a><span class="cm"> */</span> +<a name="line-291"></a><span class="cm">/* NONE VICINITY LIGHT MODERATE HEAVY SHALLOW PATCHES PARTIAL THUNDERSTORM BLOWING SHOWERS DRIFTING FREEZING */</span> +<a name="line-292"></a><span class="cm">/* *******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/</span> +<a name="line-293"></a><span class="k">static</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">conditions_str</span><span class="p">[</span><span class="mi">24</span><span class="p">][</span><span class="mi">13</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> +<a name="line-294"></a><span class="cm">/* Translators: If you want to know what "blowing" "shallow" "partial"</span> +<a name="line-295"></a><span class="cm"> * etc means, you can go to http://www.weather.com/glossary/ and</span> +<a name="line-296"></a><span class="cm"> * http://www.crh.noaa.gov/arx/wx.tbl.php */</span> +<a name="line-297"></a> <span class="cm">/* NONE */</span> <span class="p">{</span><span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Thunderstorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-298"></a> <span class="cm">/* DRIZZLE */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Drizzle"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Light drizzle"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Moderate drizzle"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy drizzle"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Freezing drizzle"</span><span class="p">)</span> <span class="p">},</span> +<a name="line-299"></a> <span class="cm">/* RAIN */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Rain"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Light rain"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Moderate rain"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy rain"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Thunderstorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Rain showers"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Freezing rain"</span><span class="p">)</span> <span class="p">},</span> +<a name="line-300"></a> <span class="cm">/* SNOW */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Snow"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Light snow"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Moderate snow"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy snow"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Snowstorm"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Blowing snowfall"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Snow showers"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Drifting snow"</span><span class="p">),</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-301"></a> <span class="cm">/* SNOW_GRAINS */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Snow grains"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Light snow grains"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Moderate snow grains"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy snow grains"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-302"></a> <span class="cm">/* ICE_CRYSTALS */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Ice crystals"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Ice crystals"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-303"></a> <span class="cm">/* ICE_PELLETS */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Ice pellets"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Few ice pellets"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Moderate ice pellets"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy ice pellets"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Ice pellet storm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Showers of ice pellets"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-304"></a> <span class="cm">/* HAIL */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Hail"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Hail"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Hailstorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Hail showers"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="p">},</span> +<a name="line-305"></a> <span class="cm">/* SMALL_HAIL */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Small hail"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Small hail"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Small hailstorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Showers of small hail"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-306"></a> <span class="cm">/* PRECIPITATION */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Unknown precipitation"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-307"></a> <span class="cm">/* MIST */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Mist"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Mist"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-308"></a> <span class="cm">/* FOG */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Fog"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Fog in the vicinity"</span><span class="p">)</span> <span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Fog"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Shallow fog"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Patches of fog"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Partial fog"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Freezing fog"</span><span class="p">)</span> <span class="p">},</span> +<a name="line-309"></a> <span class="cm">/* SMOKE */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Smoke"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Smoke"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-310"></a> <span class="cm">/* VOLCANIC_ASH */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Volcanic ash"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Volcanic ash"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-311"></a> <span class="cm">/* SAND */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Sand"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Sand"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Blowing sand"</span><span class="p">),</span> <span class="s">""</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Drifting sand"</span><span class="p">),</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-312"></a> <span class="cm">/* HAZE */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Haze"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Haze"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-313"></a> <span class="cm">/* SPRAY */</span> <span class="p">{</span><span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Blowing sprays"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-314"></a> <span class="cm">/* DUST */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Dust"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Dust"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Blowing dust"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Drifting dust"</span><span class="p">),</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-315"></a> <span class="cm">/* SQUALL */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Squall"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Squall"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-316"></a> <span class="cm">/* SANDSTORM */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Sandstorm"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Sandstorm in the vicinity"</span><span class="p">)</span> <span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Sandstorm"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy sandstorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-317"></a> <span class="cm">/* DUSTSTORM */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Duststorm"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Duststorm in the vicinity"</span><span class="p">)</span> <span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Duststorm"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Heavy duststorm"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-318"></a> <span class="cm">/* FUNNEL_CLOUD */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Funnel cloud"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-319"></a> <span class="cm">/* TORNADO */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Tornado"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">},</span> +<a name="line-320"></a> <span class="cm">/* DUST_WHIRLS */</span> <span class="p">{</span><span class="n">N_</span><span class="p">(</span><span class="s">"Dust whirls"</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Dust whirls in the vicinity"</span><span class="p">)</span> <span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">"Dust whirls"</span><span class="p">),</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span><span class="p">,</span> <span class="s">"??"</span> <span class="p">}</span> +<a name="line-321"></a><span class="p">};</span> +<a name="line-322"></a> +<a name="line-323"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-324"></a><span class="nf">weather_conditions_string</span> <span class="p">(</span><span class="n">WeatherConditions</span> <span class="n">cond</span><span class="p">)</span> +<a name="line-325"></a><span class="p">{</span> +<a name="line-326"></a><span class="hll"> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">str</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'str' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'str' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-327"></a> +<a name="line-328"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span><span class="p">)</span> <span class="p">{</span> +<a name="line-329"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-330"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-331"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">></span> <span class="n">PHENOMENON_INVALID</span> <span class="o">&&</span> +<a name="line-332"></a> <span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o"><</span> <span class="n">PHENOMENON_LAST</span> <span class="o">&&</span> +<a name="line-333"></a> <span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">></span> <span class="n">QUALIFIER_INVALID</span> <span class="o">&&</span> +<a name="line-334"></a> <span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o"><</span> <span class="n">QUALIFIER_LAST</span><span class="p">)</span> +<a name="line-335"></a> <span class="n">str</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="n">conditions_str</span><span class="p">[(</span><span class="kt">int</span><span class="p">)</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span><span class="p">][(</span><span class="kt">int</span><span class="p">)</span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span><span class="p">]);</span> +<a name="line-336"></a> <span class="k">else</span> +<a name="line-337"></a> <span class="n">str</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">"Invalid"</span><span class="p">);</span> +<a name="line-338"></a> <span class="k">return</span> <span class="p">(</span><span class="n">strlen</span> <span class="p">(</span><span class="n">str</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="o">?</span> <span class="nl">str</span> <span class="p">:</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-339"></a> <span class="p">}</span> +<a name="line-340"></a><span class="p">}</span> +<a name="line-341"></a> +<a name="line-342"></a><span class="cm">/* Locals turned global to facilitate asynchronous HTTP requests */</span> +<a name="line-343"></a> +<a name="line-344"></a> +<a name="line-345"></a><span class="n">gboolean</span> +<a name="line-346"></a><span class="nf">requests_init</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-347"></a><span class="p">{</span> +<a name="line-348"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span><span class="p">)</span> +<a name="line-349"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-350"></a> +<a name="line-351"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-352"></a><span class="p">}</span> +<a name="line-353"></a> +<a name="line-354"></a><span class="kt">void</span> <span class="nf">request_done</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">gboolean</span> <span class="n">ok</span><span class="p">)</span> +<a name="line-355"></a><span class="p">{</span> +<a name="line-356"></a> <span class="k">if</span> <span class="p">(</span><span class="n">ok</span><span class="p">)</span> <span class="p">{</span> +<a name="line-357"></a> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="n">calc_sun</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-358"></a> <span class="n">info</span><span class="o">-></span><span class="n">moonValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">&&</span> <span class="n">calc_moon</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-359"></a> <span class="p">}</span> +<a name="line-360"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!--</span><span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span><span class="p">)</span> +<a name="line-361"></a> <span class="n">info</span><span class="o">-></span><span class="n">finish_cb</span> <span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">cb_data</span><span class="p">);</span> +<a name="line-362"></a><span class="p">}</span> +<a name="line-363"></a> +<a name="line-364"></a><span class="cm">/* it's OK to pass in NULL */</span> +<a name="line-365"></a><span class="kt">void</span> +<a name="line-366"></a><span class="nf">free_forecast_list</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-367"></a><span class="p">{</span> +<a name="line-368"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> +<a name="line-369"></a> +<a name="line-370"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="p">)</span> +<a name="line-371"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-372"></a> +<a name="line-373"></a> <span class="k">for</span> <span class="p">(</span><span class="n">p</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">;</span> <span class="n">p</span><span class="p">;</span> <span class="n">p</span> <span class="o">=</span> <span class="n">p</span><span class="o">-></span><span class="n">next</span><span class="p">)</span> +<a name="line-374"></a> <span class="n">weather_info_free</span> <span class="p">(</span><span class="n">p</span><span class="o">-></span><span class="n">data</span><span class="p">);</span> +<a name="line-375"></a> +<a name="line-376"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">)</span> <span class="p">{</span> +<a name="line-377"></a> <span class="n">g_slist_free</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">);</span> +<a name="line-378"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-379"></a> <span class="p">}</span> +<a name="line-380"></a><span class="p">}</span> +<a name="line-381"></a> +<a name="line-382"></a><span class="cm">/* Relative humidity computation - thanks to <[email protected]> */</span> +<a name="line-383"></a> +<a name="line-384"></a><span class="k">static</span> <span class="kr">inline</span> <span class="n">gdouble</span> +<a name="line-385"></a><span class="nf">calc_humidity</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">temp</span><span class="p">,</span> <span class="n">gdouble</span> <span class="n">dewp</span><span class="p">)</span> +<a name="line-386"></a><span class="p">{</span> +<a name="line-387"></a> <span class="n">gdouble</span> <span class="n">esat</span><span class="p">,</span> <span class="n">esurf</span><span class="p">;</span> +<a name="line-388"></a> +<a name="line-389"></a> <span class="k">if</span> <span class="p">(</span><span class="n">temp</span> <span class="o">></span> <span class="o">-</span><span class="mf">500.0</span> <span class="o">&&</span> <span class="n">dewp</span> <span class="o">></span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-390"></a> <span class="n">temp</span> <span class="o">=</span> <span class="n">TEMP_F_TO_C</span> <span class="p">(</span><span class="n">temp</span><span class="p">);</span> +<a name="line-391"></a> <span class="n">dewp</span> <span class="o">=</span> <span class="n">TEMP_F_TO_C</span> <span class="p">(</span><span class="n">dewp</span><span class="p">);</span> +<a name="line-392"></a> +<a name="line-393"></a> <span class="n">esat</span> <span class="o">=</span> <span class="mf">6.11</span> <span class="o">*</span> <span class="n">pow</span> <span class="p">(</span><span class="mf">10.0</span><span class="p">,</span> <span class="p">(</span><span class="mf">7.5</span> <span class="o">*</span> <span class="n">temp</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="mf">237.7</span> <span class="o">+</span> <span class="n">temp</span><span class="p">));</span> +<a name="line-394"></a> <span class="n">esurf</span> <span class="o">=</span> <span class="mf">6.11</span> <span class="o">*</span> <span class="n">pow</span> <span class="p">(</span><span class="mf">10.0</span><span class="p">,</span> <span class="p">(</span><span class="mf">7.5</span> <span class="o">*</span> <span class="n">dewp</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="mf">237.7</span> <span class="o">+</span> <span class="n">dewp</span><span class="p">));</span> +<a name="line-395"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-396"></a> <span class="n">esurf</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-397"></a> <span class="n">esat</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">;</span> +<a name="line-398"></a> <span class="p">}</span> +<a name="line-399"></a> <span class="k">return</span> <span class="p">((</span><span class="n">esurf</span><span class="o">/</span><span class="n">esat</span><span class="p">)</span> <span class="o">*</span> <span class="mf">100.0</span><span class="p">);</span> +<a name="line-400"></a><span class="p">}</span> +<a name="line-401"></a> +<a name="line-402"></a><span class="k">static</span> <span class="kr">inline</span> <span class="n">gdouble</span> +<a name="line-403"></a><span class="nf">calc_apparent</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-404"></a><span class="p">{</span> +<a name="line-405"></a> <span class="n">gdouble</span> <span class="n">temp</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">;</span> +<a name="line-406"></a> <span class="n">gdouble</span> <span class="n">wind</span> <span class="o">=</span> <span class="n">WINDSPEED_KNOTS_TO_MPH</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span><span class="p">);</span> +<a name="line-407"></a> <span class="n">gdouble</span> <span class="n">apparent</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.</span><span class="p">;</span> +<a name="line-408"></a> +<a name="line-409"></a> <span class="cm">/*</span> +<a name="line-410"></a><span class="cm"> * Wind chill calculations as of 01-Nov-2001</span> +<a name="line-411"></a><span class="cm"> * http://www.nws.noaa.gov/om/windchill/index.shtml</span> +<a name="line-412"></a><span class="cm"> * Some pages suggest that the formula will soon be adjusted</span> +<a name="line-413"></a><span class="cm"> * to account for solar radiation (bright sun vs cloudy sky)</span> +<a name="line-414"></a><span class="cm"> */</span> +<a name="line-415"></a> <span class="k">if</span> <span class="p">(</span><span class="n">temp</span> <span class="o"><=</span> <span class="mf">50.0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-416"></a> <span class="k">if</span> <span class="p">(</span><span class="n">wind</span> <span class="o">></span> <span class="mf">3.0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-417"></a> <span class="n">gdouble</span> <span class="n">v</span> <span class="o">=</span> <span class="n">pow</span> <span class="p">(</span><span class="n">wind</span><span class="p">,</span> <span class="mf">0.16</span><span class="p">);</span> +<a name="line-418"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="mf">35.74</span> <span class="o">+</span> <span class="mf">0.6215</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">-</span> <span class="mf">35.75</span> <span class="o">*</span> <span class="n">v</span> <span class="o">+</span> <span class="mf">0.4275</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">v</span><span class="p">;</span> +<a name="line-419"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">wind</span> <span class="o">>=</span> <span class="mf">0.</span><span class="p">)</span> <span class="p">{</span> +<a name="line-420"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span> +<a name="line-421"></a> <span class="p">}</span> +<a name="line-422"></a> <span class="p">}</span> +<a name="line-423"></a> <span class="cm">/*</span> +<a name="line-424"></a><span class="cm"> * Heat index calculations:</span> +<a name="line-425"></a><span class="cm"> * http://www.srh.noaa.gov/fwd/heatindex/heat5.html</span> +<a name="line-426"></a><span class="cm"> */</span> +<a name="line-427"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">temp</span> <span class="o">>=</span> <span class="mf">80.0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-428"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span> <span class="o">>=</span> <span class="o">-</span><span class="mf">500.</span> <span class="o">&&</span> <span class="n">info</span><span class="o">-></span><span class="n">dew</span> <span class="o">>=</span> <span class="o">-</span><span class="mf">500.</span><span class="p">)</span> <span class="p">{</span> +<a name="line-429"></a> <span class="n">gdouble</span> <span class="n">humidity</span> <span class="o">=</span> <span class="n">calc_humidity</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">dew</span><span class="p">);</span> +<a name="line-430"></a> <span class="n">gdouble</span> <span class="n">t2</span> <span class="o">=</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">temp</span><span class="p">;</span> +<a name="line-431"></a> <span class="n">gdouble</span> <span class="n">h2</span> <span class="o">=</span> <span class="n">humidity</span> <span class="o">*</span> <span class="n">humidity</span><span class="p">;</span> +<a name="line-432"></a> +<a name="line-433"></a><span class="cp">#if 1</span> +<a name="line-434"></a> <span class="cm">/*</span> +<a name="line-435"></a><span class="cm"> * A really precise formula. Note that overall precision is</span> +<a name="line-436"></a><span class="cm"> * constrained by the accuracy of the instruments and that the</span> +<a name="line-437"></a><span class="cm"> * we receive the temperature and dewpoints as integers.</span> +<a name="line-438"></a><span class="cm"> */</span> +<a name="line-439"></a> <span class="n">gdouble</span> <span class="n">t3</span> <span class="o">=</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">temp</span><span class="p">;</span> +<a name="line-440"></a> <span class="n">gdouble</span> <span class="n">h3</span> <span class="o">=</span> <span class="n">h2</span> <span class="o">*</span> <span class="n">temp</span><span class="p">;</span> +<a name="line-441"></a> +<a name="line-442"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="mf">16.923</span> +<a name="line-443"></a> <span class="o">+</span> <span class="mf">0.185212</span> <span class="o">*</span> <span class="n">temp</span> +<a name="line-444"></a> <span class="o">+</span> <span class="mf">5.37941</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-445"></a> <span class="o">-</span> <span class="mf">0.100254</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-446"></a> <span class="o">+</span> <span class="mf">9.41695e-3</span> <span class="o">*</span> <span class="n">t2</span> +<a name="line-447"></a> <span class="o">+</span> <span class="mf">7.28898e-3</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-448"></a> <span class="o">+</span> <span class="mf">3.45372e-4</span> <span class="o">*</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-449"></a> <span class="o">-</span> <span class="mf">8.14971e-4</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-450"></a> <span class="o">+</span> <span class="mf">1.02102e-5</span> <span class="o">*</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-451"></a> <span class="o">-</span> <span class="mf">3.8646e-5</span> <span class="o">*</span> <span class="n">t3</span> +<a name="line-452"></a> <span class="o">+</span> <span class="mf">2.91583e-5</span> <span class="o">*</span> <span class="n">h3</span> +<a name="line-453"></a> <span class="o">+</span> <span class="mf">1.42721e-6</span> <span class="o">*</span> <span class="n">t3</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-454"></a> <span class="o">+</span> <span class="mf">1.97483e-7</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">h3</span> +<a name="line-455"></a> <span class="o">-</span> <span class="mf">2.18429e-8</span> <span class="o">*</span> <span class="n">t3</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-456"></a> <span class="o">+</span> <span class="mf">8.43296e-10</span> <span class="o">*</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">h3</span> +<a name="line-457"></a> <span class="o">-</span> <span class="mf">4.81975e-11</span> <span class="o">*</span> <span class="n">t3</span> <span class="o">*</span> <span class="n">h3</span><span class="p">;</span> +<a name="line-458"></a><span class="cp">#else</span> +<a name="line-459"></a> <span class="cm">/*</span> +<a name="line-460"></a><span class="cm"> * An often cited alternative: values are within 5 degrees for</span> +<a name="line-461"></a><span class="cm"> * most ranges between 10% and 70% humidity and to 110 degrees.</span> +<a name="line-462"></a><span class="cm"> */</span> +<a name="line-463"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="o">-</span> <span class="mf">42.379</span> +<a name="line-464"></a> <span class="o">+</span> <span class="mf">2.04901523</span> <span class="o">*</span> <span class="n">temp</span> +<a name="line-465"></a> <span class="o">+</span> <span class="mf">10.14333127</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-466"></a> <span class="o">-</span> <span class="mf">0.22475541</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-467"></a> <span class="o">-</span> <span class="mf">6.83783e-3</span> <span class="o">*</span> <span class="n">t2</span> +<a name="line-468"></a> <span class="o">-</span> <span class="mf">5.481717e-2</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-469"></a> <span class="o">+</span> <span class="mf">1.22874e-3</span> <span class="o">*</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">humidity</span> +<a name="line-470"></a> <span class="o">+</span> <span class="mf">8.5282e-4</span> <span class="o">*</span> <span class="n">temp</span> <span class="o">*</span> <span class="n">h2</span> +<a name="line-471"></a> <span class="o">-</span> <span class="mf">1.99e-6</span> <span class="o">*</span> <span class="n">t2</span> <span class="o">*</span> <span class="n">h2</span><span class="p">;</span> +<a name="line-472"></a><span class="cp">#endif</span> +<a name="line-473"></a> <span class="p">}</span> +<a name="line-474"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-475"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="n">temp</span><span class="p">;</span> +<a name="line-476"></a> <span class="p">}</span> +<a name="line-477"></a> +<a name="line-478"></a> <span class="k">return</span> <span class="n">apparent</span><span class="p">;</span> +<a name="line-479"></a><span class="p">}</span> +<a name="line-480"></a> +<a name="line-481"></a><span class="n">WeatherInfo</span> <span class="o">*</span> +<a name="line-482"></a><span class="nf">_weather_info_fill</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> +<a name="line-483"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">location</span><span class="p">,</span> +<a name="line-484"></a> <span class="k">const</span> <span class="n">WeatherPrefs</span> <span class="o">*</span><span class="n">prefs</span><span class="p">,</span> +<a name="line-485"></a> <span class="n">WeatherInfoFunc</span> <span class="n">cb</span><span class="p">,</span> +<a name="line-486"></a> <span class="n">gpointer</span> <span class="n">data</span><span class="p">)</span> +<a name="line-487"></a><span class="p">{</span> +<a name="line-488"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(((</span><span class="n">info</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">location</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">))</span> <span class="o">||</span> \ +<a name="line-489"></a> <span class="p">((</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="o">&&</span> <span class="p">(</span><span class="n">location</span> <span class="o">==</span> <span class="nb">NULL</span><span class="p">)),</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-490"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">prefs</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-491"></a> +<a name="line-492"></a> <span class="cm">/* FIXME: i'm not sure this works as intended anymore */</span> +<a name="line-493"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="p">)</span> <span class="p">{</span> +<a name="line-494"></a> <span class="n">info</span> <span class="o">=</span> <span class="n">g_new0</span> <span class="p">(</span><span class="n">WeatherInfo</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-495"></a> <span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-496"></a> <span class="n">info</span><span class="o">-></span><span class="n">location</span> <span class="o">=</span> <span class="n">weather_location_clone</span> <span class="p">(</span><span class="n">location</span><span class="p">);</span> +<a name="line-497"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-498"></a><span class="hll"> <span class="n">location</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">;</span><span class="error2"><--- Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?</span><span class="error2"><--- Variable 'location' is assigned a value that is never used.</span> +</span><a name="line-499"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">)</span> +<a name="line-500"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">);</span> +<a name="line-501"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-502"></a> +<a name="line-503"></a> <span class="n">free_forecast_list</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-504"></a> +<a name="line-505"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">radar</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-506"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">radar</span><span class="p">);</span> +<a name="line-507"></a> <span class="n">info</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-508"></a> <span class="p">}</span> +<a name="line-509"></a> <span class="p">}</span> +<a name="line-510"></a> +<a name="line-511"></a> <span class="cm">/* Update in progress */</span> +<a name="line-512"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">requests_init</span> <span class="p">(</span><span class="n">info</span><span class="p">))</span> <span class="p">{</span> +<a name="line-513"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-514"></a> <span class="p">}</span> +<a name="line-515"></a> +<a name="line-516"></a> <span class="cm">/* Defaults (just in case...) */</span> +<a name="line-517"></a> <span class="cm">/* Well, no just in case anymore. We may actually fail to fetch some</span> +<a name="line-518"></a><span class="cm"> * fields. */</span> +<a name="line-519"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast_type</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">type</span><span class="p">;</span> +<a name="line-520"></a> +<a name="line-521"></a> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">;</span> +<a name="line-522"></a> <span class="n">info</span><span class="o">-></span><span class="n">speed_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">speed_unit</span><span class="p">;</span> +<a name="line-523"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">pressure_unit</span><span class="p">;</span> +<a name="line-524"></a> <span class="n">info</span><span class="o">-></span><span class="n">distance_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">distance_unit</span><span class="p">;</span> +<a name="line-525"></a> +<a name="line-526"></a> <span class="n">info</span><span class="o">-></span><span class="n">update</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-527"></a> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-528"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-529"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">PHENOMENON_NONE</span><span class="p">;</span> +<a name="line-530"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">QUALIFIER_NONE</span><span class="p">;</span> +<a name="line-531"></a> <span class="n">info</span><span class="o">-></span><span class="n">temp</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.0</span><span class="p">;</span> +<a name="line-532"></a> <span class="n">info</span><span class="o">-></span><span class="n">tempMinMaxValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-533"></a> <span class="n">info</span><span class="o">-></span><span class="n">temp_min</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.0</span><span class="p">;</span> +<a name="line-534"></a> <span class="n">info</span><span class="o">-></span><span class="n">temp_max</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.0</span><span class="p">;</span> +<a name="line-535"></a> <span class="n">info</span><span class="o">-></span><span class="n">dew</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1000.0</span><span class="p">;</span> +<a name="line-536"></a> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-537"></a> <span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> +<a name="line-538"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-539"></a> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-540"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-541"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-542"></a> <span class="n">info</span><span class="o">-></span><span class="n">moonValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-543"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunrise</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-544"></a> <span class="n">info</span><span class="o">-></span><span class="n">sunset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-545"></a> <span class="n">info</span><span class="o">-></span><span class="n">moonphase</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-546"></a> <span class="n">info</span><span class="o">-></span><span class="n">moonlatitude</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-547"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-548"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-549"></a> <span class="n">info</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-550"></a> <span class="n">info</span><span class="o">-></span><span class="n">radar_url</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-></span><span class="n">radar</span> <span class="o">&&</span> <span class="n">prefs</span><span class="o">-></span><span class="n">radar_custom_url</span> <span class="o">?</span> +<a name="line-551"></a> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">prefs</span><span class="o">-></span><span class="n">radar_custom_url</span><span class="p">)</span> <span class="o">:</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-552"></a> <span class="n">info</span><span class="o">-></span><span class="n">finish_cb</span> <span class="o">=</span> <span class="n">cb</span><span class="p">;</span> +<a name="line-553"></a> <span class="n">info</span><span class="o">-></span><span class="n">cb_data</span> <span class="o">=</span> <span class="n">data</span><span class="p">;</span> +<a name="line-554"></a> +<a name="line-555"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">)</span> <span class="p">{</span> +<a name="line-556"></a> <span class="n">info</span><span class="o">-></span><span class="n">session</span> <span class="o">=</span> <span class="n">soup_session_async_new</span> <span class="p">();</span> +<a name="line-557"></a> <span class="n">soup_session_add_feature_by_type</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">,</span> <span class="n">SOUP_TYPE_PROXY_RESOLVER_DEFAULT</span><span class="p">);</span> +<a name="line-558"></a> <span class="p">}</span> +<a name="line-559"></a> +<a name="line-560"></a> <span class="n">metar_start_open</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-561"></a> <span class="n">iwin_start_open</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-562"></a> +<a name="line-563"></a> <span class="k">if</span> <span class="p">(</span><span class="n">prefs</span><span class="o">-></span><span class="n">radar</span><span class="p">)</span> <span class="p">{</span> +<a name="line-564"></a> <span class="n">wx_start_open</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-565"></a> <span class="p">}</span> +<a name="line-566"></a> +<a name="line-567"></a> <span class="k">return</span> <span class="n">info</span><span class="p">;</span> +<a name="line-568"></a><span class="p">}</span> +<a name="line-569"></a> +<a name="line-570"></a><span class="kt">void</span> +<a name="line-571"></a><span class="nf">weather_info_abort</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-572"></a><span class="p">{</span> +<a name="line-573"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-574"></a> +<a name="line-575"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">)</span> <span class="p">{</span> +<a name="line-576"></a> <span class="n">soup_session_abort</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">);</span> +<a name="line-577"></a> <span class="n">info</span><span class="o">-></span><span class="n">requests_pending</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-578"></a> <span class="p">}</span> +<a name="line-579"></a><span class="p">}</span> +<a name="line-580"></a> +<a name="line-581"></a><span class="n">WeatherInfo</span> <span class="o">*</span> +<a name="line-582"></a><span class="nf">weather_info_clone</span> <span class="p">(</span><span class="k">const</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-583"></a><span class="p">{</span> +<a name="line-584"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">clone</span><span class="p">;</span> +<a name="line-585"></a> +<a name="line-586"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-587"></a> +<a name="line-588"></a> <span class="n">clone</span> <span class="o">=</span> <span class="n">g_new</span> <span class="p">(</span><span class="n">WeatherInfo</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> +<a name="line-589"></a> +<a name="line-590"></a> +<a name="line-591"></a> <span class="cm">/* move everything */</span> +<a name="line-592"></a> <span class="n">memmove</span> <span class="p">(</span><span class="n">clone</span><span class="p">,</span> <span class="n">info</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">WeatherInfo</span><span class="p">));</span> +<a name="line-593"></a> +<a name="line-594"></a> +<a name="line-595"></a> <span class="cm">/* special moves */</span> +<a name="line-596"></a> <span class="n">clone</span><span class="o">-></span><span class="n">location</span> <span class="o">=</span> <span class="n">weather_location_clone</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-597"></a> <span class="cm">/* This handles null correctly */</span> +<a name="line-598"></a> <span class="n">clone</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">);</span> +<a name="line-599"></a> <span class="n">clone</span><span class="o">-></span><span class="n">radar_url</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">radar_url</span><span class="p">);</span> +<a name="line-600"></a> +<a name="line-601"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">)</span> <span class="p">{</span> +<a name="line-602"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span> +<a name="line-603"></a> +<a name="line-604"></a> <span class="n">clone</span><span class="o">-></span><span class="n">forecast_list</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-605"></a> <span class="k">for</span> <span class="p">(</span><span class="n">p</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">;</span> <span class="n">p</span><span class="p">;</span> <span class="n">p</span> <span class="o">=</span> <span class="n">p</span><span class="o">-></span><span class="n">next</span><span class="p">)</span> <span class="p">{</span> +<a name="line-606"></a> <span class="n">clone</span><span class="o">-></span><span class="n">forecast_list</span> <span class="o">=</span> <span class="n">g_slist_prepend</span> <span class="p">(</span><span class="n">clone</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">,</span> <span class="n">weather_info_clone</span> <span class="p">(</span><span class="n">p</span><span class="o">-></span><span class="n">data</span><span class="p">));</span> +<a name="line-607"></a> <span class="p">}</span> +<a name="line-608"></a> +<a name="line-609"></a> <span class="n">clone</span><span class="o">-></span><span class="n">forecast_list</span> <span class="o">=</span> <span class="n">g_slist_reverse</span> <span class="p">(</span><span class="n">clone</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">);</span> +<a name="line-610"></a> <span class="p">}</span> +<a name="line-611"></a> +<a name="line-612"></a> <span class="n">clone</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">radar</span><span class="p">;</span> +<a name="line-613"></a> <span class="k">if</span> <span class="p">(</span><span class="n">clone</span><span class="o">-></span><span class="n">radar</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> +<a name="line-614"></a> <span class="n">g_object_ref</span> <span class="p">(</span><span class="n">clone</span><span class="o">-></span><span class="n">radar</span><span class="p">);</span> +<a name="line-615"></a> +<a name="line-616"></a> <span class="k">return</span> <span class="n">clone</span><span class="p">;</span> +<a name="line-617"></a><span class="p">}</span> +<a name="line-618"></a> +<a name="line-619"></a><span class="kt">void</span> +<a name="line-620"></a><span class="nf">weather_info_free</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-621"></a><span class="p">{</span> +<a name="line-622"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="p">)</span> +<a name="line-623"></a> <span class="k">return</span><span class="p">;</span> +<a name="line-624"></a> +<a name="line-625"></a> <span class="n">weather_info_abort</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-626"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">)</span> +<a name="line-627"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">session</span><span class="p">);</span> +<a name="line-628"></a> +<a name="line-629"></a> <span class="n">weather_location_free</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">);</span> +<a name="line-630"></a> <span class="n">info</span><span class="o">-></span><span class="n">location</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-631"></a> +<a name="line-632"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">);</span> +<a name="line-633"></a> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-634"></a> +<a name="line-635"></a> <span class="n">free_forecast_list</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-636"></a> +<a name="line-637"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">radar</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span> +<a name="line-638"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">radar</span><span class="p">);</span> +<a name="line-639"></a> <span class="n">info</span><span class="o">-></span><span class="n">radar</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-640"></a> <span class="p">}</span> +<a name="line-641"></a> +<a name="line-642"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-643"></a><span class="p">}</span> +<a name="line-644"></a> +<a name="line-645"></a><span class="n">gboolean</span> +<a name="line-646"></a><span class="nf">weather_info_is_valid</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-647"></a><span class="p">{</span> +<a name="line-648"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-649"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">;</span> +<a name="line-650"></a><span class="p">}</span> +<a name="line-651"></a> +<a name="line-652"></a><span class="n">gboolean</span> +<a name="line-653"></a><span class="nf">weather_info_network_error</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-654"></a><span class="p">{</span> +<a name="line-655"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-656"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">network_error</span><span class="p">;</span> +<a name="line-657"></a><span class="p">}</span> +<a name="line-658"></a> +<a name="line-659"></a><span class="kt">void</span> +<a name="line-660"></a><span class="nf">weather_info_to_metric</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-661"></a><span class="p">{</span> +<a name="line-662"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-663"></a> +<a name="line-664"></a> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span> <span class="o">=</span> <span class="n">TEMP_UNIT_CENTIGRADE</span><span class="p">;</span> +<a name="line-665"></a> <span class="n">info</span><span class="o">-></span><span class="n">speed_unit</span> <span class="o">=</span> <span class="n">SPEED_UNIT_MS</span><span class="p">;</span> +<a name="line-666"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span> <span class="o">=</span> <span class="n">PRESSURE_UNIT_HPA</span><span class="p">;</span> +<a name="line-667"></a> <span class="n">info</span><span class="o">-></span><span class="n">distance_unit</span> <span class="o">=</span> <span class="n">DISTANCE_UNIT_METERS</span><span class="p">;</span> +<a name="line-668"></a><span class="p">}</span> +<a name="line-669"></a> +<a name="line-670"></a><span class="kt">void</span> +<a name="line-671"></a><span class="nf">weather_info_to_imperial</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-672"></a><span class="p">{</span> +<a name="line-673"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-674"></a> +<a name="line-675"></a> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span> <span class="o">=</span> <span class="n">TEMP_UNIT_FAHRENHEIT</span><span class="p">;</span> +<a name="line-676"></a> <span class="n">info</span><span class="o">-></span><span class="n">speed_unit</span> <span class="o">=</span> <span class="n">SPEED_UNIT_MPH</span><span class="p">;</span> +<a name="line-677"></a> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span> <span class="o">=</span> <span class="n">PRESSURE_UNIT_INCH_HG</span><span class="p">;</span> +<a name="line-678"></a> <span class="n">info</span><span class="o">-></span><span class="n">distance_unit</span> <span class="o">=</span> <span class="n">DISTANCE_UNIT_MILES</span><span class="p">;</span> +<a name="line-679"></a><span class="p">}</span> +<a name="line-680"></a> +<a name="line-681"></a><span class="k">const</span> <span class="n">WeatherLocation</span> <span class="o">*</span> +<a name="line-682"></a><span class="nf">weather_info_get_location</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-683"></a><span class="p">{</span> +<a name="line-684"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-685"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">;</span> +<a name="line-686"></a><span class="p">}</span> +<a name="line-687"></a> +<a name="line-688"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-689"></a><span class="nf">weather_info_get_location_name</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-690"></a><span class="p">{</span> +<a name="line-691"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-692"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">location</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-693"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">name</span><span class="p">;</span> +<a name="line-694"></a><span class="p">}</span> +<a name="line-695"></a> +<a name="line-696"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-697"></a><span class="nf">weather_info_get_update</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-698"></a><span class="p">{</span> +<a name="line-699"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">200</span><span class="p">];</span> +<a name="line-700"></a><span class="hll"> <span class="kt">char</span> <span class="o">*</span><span class="n">utf8</span><span class="p">,</span> <span class="o">*</span><span class="n">timeformat</span><span class="p">;</span><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'utf8' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'utf8' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div><div class="verbose expandable"><span class="error2"><--- The scope of the variable 'timeformat' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable 'timeformat' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced: +void f(int x) +{ + int i = 0; + if (x) { + // it's safe to move 'int i = 0;' here + for (int n = 0; n < 10; ++n) { + // it is possible but not safe to move 'int i = 0;' here + do_something(&i); + } + } +} +When you see this message it is always safe to reduce the variable scope 1 level.</div></div> +</span><a name="line-701"></a> +<a name="line-702"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-703"></a> +<a name="line-704"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-705"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-706"></a> +<a name="line-707"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">update</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span> +<a name="line-708"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-709"></a> <span class="n">localtime_r</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="o">-></span><span class="n">update</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-710"></a> <span class="cm">/* Translators: this is a format string for strftime</span> +<a name="line-711"></a><span class="cm"> * see `man 3 strftime` for more details</span> +<a name="line-712"></a><span class="cm"> */</span> +<a name="line-713"></a> <span class="n">timeformat</span> <span class="o">=</span> <span class="n">g_locale_from_utf8</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"%a, %b %d / %H:%M"</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> +<a name="line-714"></a> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-715"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">timeformat</span><span class="p">)</span> <span class="p">{</span> +<a name="line-716"></a> <span class="n">strcpy</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">"???"</span><span class="p">);</span> +<a name="line-717"></a> <span class="p">}</span> +<a name="line-718"></a><span class="hll"> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">strftime</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">timeformat</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="error2"><--- Unsigned less than zero</span> +</span><a name="line-719"></a> <span class="n">strcpy</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">"???"</span><span class="p">);</span> +<a name="line-720"></a> <span class="p">}</span> +<a name="line-721"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">timeformat</span><span class="p">);</span> +<a name="line-722"></a> +<a name="line-723"></a> <span class="cm">/* Convert to UTF-8 */</span> +<a name="line-724"></a> <span class="n">utf8</span> <span class="o">=</span> <span class="n">g_locale_to_utf8</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-725"></a> <span class="n">strcpy</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">utf8</span><span class="p">);</span> +<a name="line-726"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">utf8</span><span class="p">);</span> +<a name="line-727"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-728"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown observation time"</span><span class="p">),</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">));</span> +<a name="line-729"></a> <span class="n">buf</span><span class="p">[</span><span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-730"></a> <span class="p">}</span> +<a name="line-731"></a> +<a name="line-732"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-733"></a><span class="p">}</span> +<a name="line-734"></a> +<a name="line-735"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-736"></a><span class="nf">weather_info_get_sky</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-737"></a><span class="p">{</span> +<a name="line-738"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-739"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-740"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-741"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-742"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-743"></a> <span class="k">return</span> <span class="n">weather_sky_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sky</span><span class="p">);</span> +<a name="line-744"></a><span class="p">}</span> +<a name="line-745"></a> +<a name="line-746"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-747"></a><span class="nf">weather_info_get_conditions</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-748"></a><span class="p">{</span> +<a name="line-749"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-750"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-751"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-752"></a> <span class="k">return</span> <span class="n">weather_conditions_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">);</span> +<a name="line-753"></a><span class="p">}</span> +<a name="line-754"></a> +<a name="line-755"></a><span class="k">static</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-756"></a><span class="nf">temperature_string</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">temp</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">to_unit</span><span class="p">,</span> <span class="n">gboolean</span> <span class="n">want_round</span><span class="p">)</span> +<a name="line-757"></a><span class="p">{</span> +<a name="line-758"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span> +<a name="line-759"></a> +<a name="line-760"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-761"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_FAHRENHEIT</span><span class="p">:</span> +<a name="line-762"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">want_round</span><span class="p">)</span> <span class="p">{</span> +<a name="line-763"></a> <span class="cm">/* Translators: This is the temperature in degrees Fahrenheit (\302\260 is U+00B0 DEGREE SIGN) */</span> +<a name="line-764"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f </span><span class="se">\302\260</span><span class="s">F"</span><span class="p">),</span> <span class="n">temp</span><span class="p">);</span> +<a name="line-765"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-766"></a> <span class="k">const</span> <span class="kt">int</span> <span class="n">range_problem</span> <span class="o">=</span> <span class="n">FE_INVALID</span> <span class="o">|</span> <span class="n">FE_DIVBYZERO</span> <span class="o">|</span> <span class="n">FE_OVERFLOW</span> <span class="o">|</span> <span class="n">FE_UNDERFLOW</span><span class="p">;</span> +<a name="line-767"></a> <span class="n">gdouble</span> <span class="n">temp_r</span><span class="p">;</span> +<a name="line-768"></a> +<a name="line-769"></a> <span class="n">feclearexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">);</span> +<a name="line-770"></a> <span class="n">temp_r</span> <span class="o">=</span> <span class="n">round</span> <span class="p">(</span><span class="n">temp</span><span class="p">);</span> +<a name="line-771"></a> <span class="k">if</span> <span class="p">(</span><span class="n">fetestexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">))</span> +<a name="line-772"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"n/a"</span><span class="p">));</span> +<a name="line-773"></a> <span class="k">else</span> +<a name="line-774"></a> <span class="cm">/* Translators: This is the temperature in degrees Fahrenheit (\302\260 is U+00B0 DEGREE SIGN) */</span> +<a name="line-775"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%d </span><span class="se">\302\260</span><span class="s">F"</span><span class="p">),</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">temp_r</span><span class="p">);</span> +<a name="line-776"></a> <span class="p">}</span> +<a name="line-777"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-778"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_CENTIGRADE</span><span class="p">:</span> +<a name="line-779"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">want_round</span><span class="p">)</span> <span class="p">{</span> +<a name="line-780"></a> <span class="cm">/* Translators: This is the temperature in degrees Celsius (\302\260 is U+00B0 DEGREE SIGN) */</span> +<a name="line-781"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f </span><span class="se">\302\260</span><span class="s">C"</span><span class="p">),</span> <span class="n">TEMP_F_TO_C</span> <span class="p">(</span><span class="n">temp</span><span class="p">));</span> +<a name="line-782"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-783"></a> <span class="k">const</span> <span class="kt">int</span> <span class="n">range_problem</span> <span class="o">=</span> <span class="n">FE_INVALID</span> <span class="o">|</span> <span class="n">FE_DIVBYZERO</span> <span class="o">|</span> <span class="n">FE_OVERFLOW</span> <span class="o">|</span> <span class="n">FE_UNDERFLOW</span><span class="p">;</span> +<a name="line-784"></a> <span class="n">gdouble</span> <span class="n">temp_r</span><span class="p">;</span> +<a name="line-785"></a> +<a name="line-786"></a> <span class="n">feclearexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">);</span> +<a name="line-787"></a> <span class="n">temp_r</span> <span class="o">=</span> <span class="n">round</span> <span class="p">(</span><span class="n">TEMP_F_TO_C</span> <span class="p">(</span><span class="n">temp</span><span class="p">));</span> +<a name="line-788"></a> <span class="k">if</span> <span class="p">(</span><span class="n">fetestexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">))</span> +<a name="line-789"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"n/a"</span><span class="p">));</span> +<a name="line-790"></a> <span class="k">else</span> +<a name="line-791"></a> <span class="cm">/* Translators: This is the temperature in degrees Celsius (\302\260 is U+00B0 DEGREE SIGN) */</span> +<a name="line-792"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%d </span><span class="se">\302\260</span><span class="s">C"</span><span class="p">),</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">temp_r</span><span class="p">);</span> +<a name="line-793"></a> <span class="p">}</span> +<a name="line-794"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-795"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_KELVIN</span><span class="p">:</span> +<a name="line-796"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">want_round</span><span class="p">)</span> <span class="p">{</span> +<a name="line-797"></a> <span class="cm">/* Translators: This is the temperature in kelvin */</span> +<a name="line-798"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f K"</span><span class="p">),</span> <span class="n">TEMP_F_TO_K</span> <span class="p">(</span><span class="n">temp</span><span class="p">));</span> +<a name="line-799"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-800"></a> <span class="k">const</span> <span class="kt">int</span> <span class="n">range_problem</span> <span class="o">=</span> <span class="n">FE_INVALID</span> <span class="o">|</span> <span class="n">FE_DIVBYZERO</span> <span class="o">|</span> <span class="n">FE_OVERFLOW</span> <span class="o">|</span> <span class="n">FE_UNDERFLOW</span><span class="p">;</span> +<a name="line-801"></a> <span class="n">gdouble</span> <span class="n">temp_r</span><span class="p">;</span> +<a name="line-802"></a> +<a name="line-803"></a> <span class="n">feclearexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">);</span> +<a name="line-804"></a> <span class="n">temp_r</span> <span class="o">=</span> <span class="n">round</span> <span class="p">(</span><span class="n">TEMP_F_TO_K</span> <span class="p">(</span><span class="n">temp</span><span class="p">));</span> +<a name="line-805"></a> <span class="k">if</span> <span class="p">(</span><span class="n">fetestexcept</span><span class="p">(</span><span class="n">range_problem</span><span class="p">))</span> +<a name="line-806"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"n/a"</span><span class="p">));</span> +<a name="line-807"></a> <span class="k">else</span> +<a name="line-808"></a> <span class="cm">/* Translators: This is the temperature in kelvin */</span> +<a name="line-809"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%d K"</span><span class="p">),</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="n">temp_r</span><span class="p">);</span> +<a name="line-810"></a> <span class="p">}</span> +<a name="line-811"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-812"></a> +<a name="line-813"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_INVALID</span><span class="p">:</span> +<a name="line-814"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-815"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-816"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">"Conversion to illegal temperature unit: %d"</span><span class="p">,</span> <span class="n">to_unit</span><span class="p">);</span> +<a name="line-817"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-818"></a> <span class="p">}</span> +<a name="line-819"></a> +<a name="line-820"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-821"></a><span class="p">}</span> +<a name="line-822"></a> +<a name="line-823"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-824"></a><span class="nf">weather_info_get_temp</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-825"></a><span class="p">{</span> +<a name="line-826"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-827"></a> +<a name="line-828"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-829"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-830"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-831"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-832"></a> +<a name="line-833"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-834"></a><span class="p">}</span> +<a name="line-835"></a> +<a name="line-836"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-837"></a><span class="nf">weather_info_get_temp_min</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-838"></a><span class="p">{</span> +<a name="line-839"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-840"></a> +<a name="line-841"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">tempMinMaxValid</span><span class="p">)</span> +<a name="line-842"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-843"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_min</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-844"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-845"></a> +<a name="line-846"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_min</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-847"></a><span class="p">}</span> +<a name="line-848"></a> +<a name="line-849"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-850"></a><span class="nf">weather_info_get_temp_max</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-851"></a><span class="p">{</span> +<a name="line-852"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-853"></a> +<a name="line-854"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">tempMinMaxValid</span><span class="p">)</span> +<a name="line-855"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-856"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_max</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-857"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-858"></a> +<a name="line-859"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_max</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-860"></a><span class="p">}</span> +<a name="line-861"></a> +<a name="line-862"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-863"></a><span class="nf">weather_info_get_dew</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-864"></a><span class="p">{</span> +<a name="line-865"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-866"></a> +<a name="line-867"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-868"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-869"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">dew</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-870"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-871"></a> +<a name="line-872"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">dew</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-873"></a><span class="p">}</span> +<a name="line-874"></a> +<a name="line-875"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-876"></a><span class="nf">weather_info_get_humidity</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-877"></a><span class="p">{</span> +<a name="line-878"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">20</span><span class="p">];</span> +<a name="line-879"></a> <span class="n">gdouble</span> <span class="n">humidity</span><span class="p">;</span> +<a name="line-880"></a> +<a name="line-881"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-882"></a> +<a name="line-883"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-884"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-885"></a> +<a name="line-886"></a> <span class="n">humidity</span> <span class="o">=</span> <span class="n">calc_humidity</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">dew</span><span class="p">);</span> +<a name="line-887"></a> <span class="k">if</span> <span class="p">(</span><span class="n">humidity</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-888"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-889"></a> +<a name="line-890"></a> <span class="cm">/* Translators: This is the humidity in percent */</span> +<a name="line-891"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.f%%"</span><span class="p">),</span> <span class="n">humidity</span><span class="p">);</span> +<a name="line-892"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-893"></a><span class="p">}</span> +<a name="line-894"></a> +<a name="line-895"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-896"></a><span class="nf">weather_info_get_apparent</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-897"></a><span class="p">{</span> +<a name="line-898"></a> <span class="n">gdouble</span> <span class="n">apparent</span><span class="p">;</span> +<a name="line-899"></a> +<a name="line-900"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-901"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-902"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-903"></a> +<a name="line-904"></a> <span class="n">apparent</span> <span class="o">=</span> <span class="n">calc_apparent</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-905"></a> <span class="k">if</span> <span class="p">(</span><span class="n">apparent</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-906"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-907"></a> +<a name="line-908"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">apparent</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-909"></a><span class="p">}</span> +<a name="line-910"></a> +<a name="line-911"></a><span class="k">static</span> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-912"></a><span class="nf">windspeed_string</span> <span class="p">(</span><span class="n">gfloat</span> <span class="n">knots</span><span class="p">,</span> <span class="n">SpeedUnit</span> <span class="n">to_unit</span><span class="p">)</span> +<a name="line-913"></a><span class="p">{</span> +<a name="line-914"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span> +<a name="line-915"></a> +<a name="line-916"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-917"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_KNOTS</span><span class="p">:</span> +<a name="line-918"></a> <span class="cm">/* Translators: This is the wind speed in knots */</span> +<a name="line-919"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%0.1f knots"</span><span class="p">),</span> <span class="n">knots</span><span class="p">);</span> +<a name="line-920"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-921"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_MPH</span><span class="p">:</span> +<a name="line-922"></a> <span class="cm">/* Translators: This is the wind speed in miles per hour */</span> +<a name="line-923"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f mph"</span><span class="p">),</span> <span class="n">WINDSPEED_KNOTS_TO_MPH</span> <span class="p">(</span><span class="n">knots</span><span class="p">));</span> +<a name="line-924"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-925"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_KPH</span><span class="p">:</span> +<a name="line-926"></a> <span class="cm">/* Translators: This is the wind speed in kilometers per hour */</span> +<a name="line-927"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f km/h"</span><span class="p">),</span> <span class="n">WINDSPEED_KNOTS_TO_KPH</span> <span class="p">(</span><span class="n">knots</span><span class="p">));</span> +<a name="line-928"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-929"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_MS</span><span class="p">:</span> +<a name="line-930"></a> <span class="cm">/* Translators: This is the wind speed in meters per second */</span> +<a name="line-931"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f m/s"</span><span class="p">),</span> <span class="n">WINDSPEED_KNOTS_TO_MS</span> <span class="p">(</span><span class="n">knots</span><span class="p">));</span> +<a name="line-932"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-933"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_BFT</span><span class="p">:</span> +<a name="line-934"></a> <span class="cm">/* Translators: This is the wind speed as a Beaufort force factor</span> +<a name="line-935"></a><span class="cm"> * (commonly used in nautical wind estimation).</span> +<a name="line-936"></a><span class="cm"> */</span> +<a name="line-937"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"Beaufort force %.1f"</span><span class="p">),</span> +<a name="line-938"></a> <span class="n">WINDSPEED_KNOTS_TO_BFT</span> <span class="p">(</span><span class="n">knots</span><span class="p">));</span> +<a name="line-939"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-940"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_INVALID</span><span class="p">:</span> +<a name="line-941"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-942"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-943"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">"Conversion to illegal speed unit: %d"</span><span class="p">,</span> <span class="n">to_unit</span><span class="p">);</span> +<a name="line-944"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-945"></a> <span class="p">}</span> +<a name="line-946"></a> +<a name="line-947"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-948"></a><span class="p">}</span> +<a name="line-949"></a> +<a name="line-950"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-951"></a><span class="nf">weather_info_get_wind</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-952"></a><span class="p">{</span> +<a name="line-953"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">200</span><span class="p">];</span> +<a name="line-954"></a> +<a name="line-955"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-956"></a> +<a name="line-957"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-958"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-959"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o"><</span> <span class="mf">0.0</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> +<a name="line-960"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-961"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o">==</span> <span class="mf">0.00</span><span class="p">)</span> <span class="p">{</span> +<a name="line-962"></a> <span class="n">strncpy</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">_</span><span class="p">(</span><span class="s">"Calm"</span><span class="p">),</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">));</span> +<a name="line-963"></a> <span class="n">buf</span><span class="p">[</span><span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">'\0'</span><span class="p">;</span> +<a name="line-964"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> +<a name="line-965"></a> <span class="cm">/* Translators: This is 'wind direction' / 'wind speed' */</span> +<a name="line-966"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%s / %s"</span><span class="p">),</span> +<a name="line-967"></a> <span class="n">weather_wind_direction_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">wind</span><span class="p">),</span> +<a name="line-968"></a> <span class="n">windspeed_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">speed_unit</span><span class="p">));</span> +<a name="line-969"></a> <span class="p">}</span> +<a name="line-970"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-971"></a><span class="p">}</span> +<a name="line-972"></a> +<a name="line-973"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-974"></a><span class="nf">weather_info_get_pressure</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-975"></a><span class="p">{</span> +<a name="line-976"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span> +<a name="line-977"></a> +<a name="line-978"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-979"></a> +<a name="line-980"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-981"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-982"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-983"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-984"></a> +<a name="line-985"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-986"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_INCH_HG</span><span class="p">:</span> +<a name="line-987"></a> <span class="cm">/* Translators: This is pressure in inches of mercury */</span> +<a name="line-988"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.2f inHg"</span><span class="p">),</span> <span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">);</span> +<a name="line-989"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-990"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_MM_HG</span><span class="p">:</span> +<a name="line-991"></a> <span class="cm">/* Translators: This is pressure in millimeters of mercury */</span> +<a name="line-992"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f mmHg"</span><span class="p">),</span> <span class="n">PRESSURE_INCH_TO_MM</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">));</span> +<a name="line-993"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-994"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_KPA</span><span class="p">:</span> +<a name="line-995"></a> <span class="cm">/* Translators: This is pressure in kiloPascals */</span> +<a name="line-996"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.2f kPa"</span><span class="p">),</span> <span class="n">PRESSURE_INCH_TO_KPA</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">));</span> +<a name="line-997"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-998"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_HPA</span><span class="p">:</span> +<a name="line-999"></a> <span class="cm">/* Translators: This is pressure in hectoPascals */</span> +<a name="line-1000"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.2f hPa"</span><span class="p">),</span> <span class="n">PRESSURE_INCH_TO_HPA</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">));</span> +<a name="line-1001"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1002"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_MB</span><span class="p">:</span> +<a name="line-1003"></a> <span class="cm">/* Translators: This is pressure in millibars */</span> +<a name="line-1004"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.2f mb"</span><span class="p">),</span> <span class="n">PRESSURE_INCH_TO_MB</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">));</span> +<a name="line-1005"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1006"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_ATM</span><span class="p">:</span> +<a name="line-1007"></a> <span class="cm">/* Translators: This is pressure in atmospheres */</span> +<a name="line-1008"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.3f atm"</span><span class="p">),</span> <span class="n">PRESSURE_INCH_TO_ATM</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">));</span> +<a name="line-1009"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1010"></a> +<a name="line-1011"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1012"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1013"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1014"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">"Conversion to illegal pressure unit: %d"</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span><span class="p">);</span> +<a name="line-1015"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-1016"></a> <span class="p">}</span> +<a name="line-1017"></a> +<a name="line-1018"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-1019"></a><span class="p">}</span> +<a name="line-1020"></a> +<a name="line-1021"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1022"></a><span class="nf">weather_info_get_visibility</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1023"></a><span class="p">{</span> +<a name="line-1024"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">100</span><span class="p">];</span> +<a name="line-1025"></a> +<a name="line-1026"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1027"></a> +<a name="line-1028"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1029"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1030"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">visibility</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-1031"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-1032"></a> +<a name="line-1033"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">distance_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1034"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_MILES</span><span class="p">:</span> +<a name="line-1035"></a> <span class="cm">/* Translators: This is the visibility in miles */</span> +<a name="line-1036"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f miles"</span><span class="p">),</span> <span class="n">info</span><span class="o">-></span><span class="n">visibility</span><span class="p">);</span> +<a name="line-1037"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1038"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_KM</span><span class="p">:</span> +<a name="line-1039"></a> <span class="cm">/* Translators: This is the visibility in kilometers */</span> +<a name="line-1040"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.1f km"</span><span class="p">),</span> <span class="n">VISIBILITY_SM_TO_KM</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">visibility</span><span class="p">));</span> +<a name="line-1041"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1042"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_METERS</span><span class="p">:</span> +<a name="line-1043"></a> <span class="cm">/* Translators: This is the visibility in meters */</span> +<a name="line-1044"></a> <span class="n">g_snprintf</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%.0fm"</span><span class="p">),</span> <span class="n">VISIBILITY_SM_TO_M</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">visibility</span><span class="p">));</span> +<a name="line-1045"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1046"></a> +<a name="line-1047"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1048"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1049"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1050"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">"Conversion to illegal visibility unit: %d"</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span><span class="p">);</span> +<a name="line-1051"></a> <span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s">"Unknown"</span><span class="p">);</span> +<a name="line-1052"></a> <span class="p">}</span> +<a name="line-1053"></a> +<a name="line-1054"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-1055"></a><span class="p">}</span> +<a name="line-1056"></a> +<a name="line-1057"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1058"></a><span class="nf">weather_info_get_sunrise</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1059"></a><span class="p">{</span> +<a name="line-1060"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">200</span><span class="p">];</span> +<a name="line-1061"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-1062"></a> +<a name="line-1063"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">&&</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1064"></a> +<a name="line-1065"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">latlon_valid</span><span class="p">)</span> +<a name="line-1066"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1067"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1068"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1069"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">calc_sun</span> <span class="p">(</span><span class="n">info</span><span class="p">))</span> +<a name="line-1070"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1071"></a> +<a name="line-1072"></a> <span class="n">localtime_r</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="o">-></span><span class="n">sunrise</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-1073"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">strftime</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%H:%M"</span><span class="p">),</span> <span class="o">&</span><span class="n">tm</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span><span class="error2"><--- Unsigned less than zero</span> +</span><a name="line-1074"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1075"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-1076"></a><span class="p">}</span> +<a name="line-1077"></a> +<a name="line-1078"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1079"></a><span class="nf">weather_info_get_sunset</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1080"></a><span class="p">{</span> +<a name="line-1081"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">buf</span><span class="p">[</span><span class="mi">200</span><span class="p">];</span> +<a name="line-1082"></a> <span class="k">struct</span> <span class="n">tm</span> <span class="n">tm</span><span class="p">;</span> +<a name="line-1083"></a> +<a name="line-1084"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">&&</span> <span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1085"></a> +<a name="line-1086"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">location</span><span class="o">-></span><span class="n">latlon_valid</span><span class="p">)</span> +<a name="line-1087"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1088"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1089"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1090"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">calc_sun</span> <span class="p">(</span><span class="n">info</span><span class="p">))</span> +<a name="line-1091"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1092"></a> +<a name="line-1093"></a> <span class="n">localtime_r</span> <span class="p">(</span><span class="o">&</span><span class="n">info</span><span class="o">-></span><span class="n">sunset</span><span class="p">,</span> <span class="o">&</span><span class="n">tm</span><span class="p">);</span> +<a name="line-1094"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">strftime</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">buf</span><span class="p">),</span> <span class="n">_</span><span class="p">(</span><span class="s">"%H:%M"</span><span class="p">),</span> <span class="o">&</span><span class="n">tm</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">)</span><span class="error2"><--- Unsigned less than zero</span> +</span><a name="line-1095"></a> <span class="k">return</span> <span class="s">"-"</span><span class="p">;</span> +<a name="line-1096"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span> +<a name="line-1097"></a><span class="p">}</span> +<a name="line-1098"></a> +<a name="line-1099"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1100"></a><span class="nf">weather_info_get_forecast</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1101"></a><span class="p">{</span> +<a name="line-1102"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1103"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">forecast</span><span class="p">;</span> +<a name="line-1104"></a><span class="p">}</span> +<a name="line-1105"></a> +<a name="line-1106"></a><span class="cm">/**</span> +<a name="line-1107"></a><span class="cm"> * weather_info_get_forecast_list:</span> +<a name="line-1108"></a><span class="cm"> * Returns list of WeatherInfo* objects for the forecast.</span> +<a name="line-1109"></a><span class="cm"> * The list is owned by the 'info' object thus is alive as long</span> +<a name="line-1110"></a><span class="cm"> * as the 'info'. This list is filled only when requested with</span> +<a name="line-1111"></a><span class="cm"> * type FORECAST_LIST and if available for given location.</span> +<a name="line-1112"></a><span class="cm"> * The 'update' property is the date/time when the forecast info</span> +<a name="line-1113"></a><span class="cm"> * is used for.</span> +<a name="line-1114"></a><span class="cm"> **/</span> +<a name="line-1115"></a><span class="n">GSList</span> <span class="o">*</span> +<a name="line-1116"></a><span class="nf">weather_info_get_forecast_list</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1117"></a><span class="p">{</span> +<a name="line-1118"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1119"></a> +<a name="line-1120"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1121"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-1122"></a> +<a name="line-1123"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">forecast_list</span><span class="p">;</span> +<a name="line-1124"></a><span class="p">}</span> +<a name="line-1125"></a> +<a name="line-1126"></a><span class="n">GdkPixbufAnimation</span> <span class="o">*</span> +<a name="line-1127"></a><span class="nf">weather_info_get_radar</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1128"></a><span class="p">{</span> +<a name="line-1129"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1130"></a> <span class="k">return</span> <span class="n">info</span><span class="o">-></span><span class="n">radar</span><span class="p">;</span> +<a name="line-1131"></a><span class="p">}</span> +<a name="line-1132"></a> +<a name="line-1133"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1134"></a><span class="nf">weather_info_get_temp_summary</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1135"></a><span class="p">{</span> +<a name="line-1136"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1137"></a> +<a name="line-1138"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">temp</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-1139"></a> <span class="k">return</span> <span class="s">"--"</span><span class="p">;</span> +<a name="line-1140"></a> +<a name="line-1141"></a> <span class="k">return</span> <span class="n">temperature_string</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">,</span> <span class="n">TRUE</span><span class="p">);</span> +<a name="line-1142"></a> +<a name="line-1143"></a><span class="p">}</span> +<a name="line-1144"></a> +<a name="line-1145"></a><span class="n">gchar</span> <span class="o">*</span> +<a name="line-1146"></a><span class="nf">weather_info_get_weather_summary</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1147"></a><span class="p">{</span> +<a name="line-1148"></a> <span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">buf</span><span class="p">;</span> +<a name="line-1149"></a> +<a name="line-1150"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1151"></a> +<a name="line-1152"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1153"></a> <span class="k">return</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s">"Retrieval failed"</span><span class="p">));</span> +<a name="line-1154"></a> <span class="n">buf</span> <span class="o">=</span> <span class="n">weather_info_get_conditions</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-1155"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span> <span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">"-"</span><span class="p">))</span> +<a name="line-1156"></a> <span class="n">buf</span> <span class="o">=</span> <span class="n">weather_info_get_sky</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span> +<a name="line-1157"></a> <span class="k">return</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">"%s: %s"</span><span class="p">,</span> <span class="n">weather_info_get_location_name</span> <span class="p">(</span><span class="n">info</span><span class="p">),</span> <span class="n">buf</span><span class="p">);</span> +<a name="line-1158"></a><span class="p">}</span> +<a name="line-1159"></a> +<a name="line-1160"></a><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span> +<a name="line-1161"></a><span class="nf">weather_info_get_icon_name</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">)</span> +<a name="line-1162"></a><span class="p">{</span> +<a name="line-1163"></a> <span class="n">WeatherConditions</span> <span class="n">cond</span><span class="p">;</span> +<a name="line-1164"></a> <span class="n">WeatherSky</span> <span class="n">sky</span><span class="p">;</span> +<a name="line-1165"></a> <span class="kt">time_t</span> <span class="n">current_time</span><span class="p">;</span> +<a name="line-1166"></a> <span class="n">gboolean</span> <span class="n">daytime</span><span class="p">;</span> +<a name="line-1167"></a> <span class="n">gchar</span><span class="o">*</span> <span class="n">icon</span><span class="p">;</span> +<a name="line-1168"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="n">icon_buffer</span><span class="p">[</span><span class="mi">32</span><span class="p">];</span> +<a name="line-1169"></a> <span class="n">WeatherMoonPhase</span> <span class="n">moonPhase</span><span class="p">;</span> +<a name="line-1170"></a> <span class="n">WeatherMoonLatitude</span> <span class="n">moonLat</span><span class="p">;</span> +<a name="line-1171"></a> <span class="n">gint</span> <span class="n">phase</span><span class="p">;</span> +<a name="line-1172"></a> +<a name="line-1173"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> +<a name="line-1174"></a> +<a name="line-1175"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1176"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-1177"></a> +<a name="line-1178"></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">;</span> +<a name="line-1179"></a> <span class="n">sky</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sky</span><span class="p">;</span> +<a name="line-1180"></a> +<a name="line-1181"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1182"></a> <span class="k">if</span> <span class="p">(</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">!=</span> <span class="n">PHENOMENON_NONE</span> <span class="o">&&</span> +<a name="line-1183"></a> <span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">==</span> <span class="n">QUALIFIER_THUNDERSTORM</span><span class="p">)</span> +<a name="line-1184"></a> <span class="k">return</span> <span class="s">"weather-storm"</span><span class="p">;</span> +<a name="line-1185"></a> +<a name="line-1186"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1187"></a> <span class="k">case</span> <span class="nl">PHENOMENON_INVALID</span><span class="p">:</span> +<a name="line-1188"></a> <span class="k">case</span> <span class="nl">PHENOMENON_LAST</span><span class="p">:</span> +<a name="line-1189"></a> <span class="k">case</span> <span class="nl">PHENOMENON_NONE</span><span class="p">:</span> +<a name="line-1190"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1191"></a> +<a name="line-1192"></a> <span class="k">case</span> <span class="nl">PHENOMENON_DRIZZLE</span><span class="p">:</span> +<a name="line-1193"></a> <span class="k">case</span> <span class="nl">PHENOMENON_RAIN</span><span class="p">:</span> +<a name="line-1194"></a> <span class="k">case</span> <span class="nl">PHENOMENON_UNKNOWN_PRECIPITATION</span><span class="p">:</span> +<a name="line-1195"></a> <span class="k">case</span> <span class="nl">PHENOMENON_HAIL</span><span class="p">:</span> +<a name="line-1196"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SMALL_HAIL</span><span class="p">:</span> +<a name="line-1197"></a> <span class="k">return</span> <span class="s">"weather-showers"</span><span class="p">;</span> +<a name="line-1198"></a> +<a name="line-1199"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SNOW</span><span class="p">:</span> +<a name="line-1200"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SNOW_GRAINS</span><span class="p">:</span> +<a name="line-1201"></a> <span class="k">case</span> <span class="nl">PHENOMENON_ICE_PELLETS</span><span class="p">:</span> +<a name="line-1202"></a> <span class="k">case</span> <span class="nl">PHENOMENON_ICE_CRYSTALS</span><span class="p">:</span> +<a name="line-1203"></a> <span class="k">return</span> <span class="s">"weather-snow"</span><span class="p">;</span> +<a name="line-1204"></a> +<a name="line-1205"></a> <span class="k">case</span> <span class="nl">PHENOMENON_TORNADO</span><span class="p">:</span> +<a name="line-1206"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SQUALL</span><span class="p">:</span> +<a name="line-1207"></a> <span class="k">return</span> <span class="s">"weather-storm"</span><span class="p">;</span> +<a name="line-1208"></a> +<a name="line-1209"></a> <span class="k">case</span> <span class="nl">PHENOMENON_MIST</span><span class="p">:</span> +<a name="line-1210"></a> <span class="k">case</span> <span class="nl">PHENOMENON_FOG</span><span class="p">:</span> +<a name="line-1211"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SMOKE</span><span class="p">:</span> +<a name="line-1212"></a> <span class="k">case</span> <span class="nl">PHENOMENON_VOLCANIC_ASH</span><span class="p">:</span> +<a name="line-1213"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SAND</span><span class="p">:</span> +<a name="line-1214"></a> <span class="k">case</span> <span class="nl">PHENOMENON_HAZE</span><span class="p">:</span> +<a name="line-1215"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SPRAY</span><span class="p">:</span> +<a name="line-1216"></a> <span class="k">case</span> <span class="nl">PHENOMENON_DUST</span><span class="p">:</span> +<a name="line-1217"></a> <span class="k">case</span> <span class="nl">PHENOMENON_SANDSTORM</span><span class="p">:</span> +<a name="line-1218"></a> <span class="k">case</span> <span class="nl">PHENOMENON_DUSTSTORM</span><span class="p">:</span> +<a name="line-1219"></a> <span class="k">case</span> <span class="nl">PHENOMENON_FUNNEL_CLOUD</span><span class="p">:</span> +<a name="line-1220"></a> <span class="k">case</span> <span class="nl">PHENOMENON_DUST_WHIRLS</span><span class="p">:</span> +<a name="line-1221"></a> <span class="k">return</span> <span class="s">"weather-fog"</span><span class="p">;</span> +<a name="line-1222"></a> <span class="p">}</span> +<a name="line-1223"></a> <span class="p">}</span> +<a name="line-1224"></a> +<a name="line-1225"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">midnightSun</span> <span class="o">||</span> +<a name="line-1226"></a> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">&&</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span><span class="p">))</span> +<a name="line-1227"></a> <span class="n">daytime</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1228"></a> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">polarNight</span><span class="p">)</span> +<a name="line-1229"></a> <span class="n">daytime</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1230"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-1231"></a> <span class="n">current_time</span> <span class="o">=</span> <span class="n">time</span> <span class="p">(</span><span class="nb">NULL</span><span class="p">);</span> +<a name="line-1232"></a> <span class="n">daytime</span> <span class="o">=</span> +<a name="line-1233"></a> <span class="p">(</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span> <span class="o">||</span> <span class="p">(</span><span class="n">current_time</span> <span class="o">>=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunrise</span><span class="p">)</span> <span class="p">)</span> <span class="o">&&</span> +<a name="line-1234"></a> <span class="p">(</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span> <span class="o">||</span> <span class="p">(</span><span class="n">current_time</span> <span class="o"><</span> <span class="n">info</span><span class="o">-></span><span class="n">sunset</span><span class="p">)</span> <span class="p">);</span> +<a name="line-1235"></a> <span class="p">}</span> +<a name="line-1236"></a> +<a name="line-1237"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">sky</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1238"></a> <span class="k">case</span> <span class="nl">SKY_INVALID</span><span class="p">:</span> +<a name="line-1239"></a> <span class="k">case</span> <span class="nl">SKY_LAST</span><span class="p">:</span> +<a name="line-1240"></a> <span class="k">case</span> <span class="nl">SKY_CLEAR</span><span class="p">:</span> +<a name="line-1241"></a> <span class="k">if</span> <span class="p">(</span><span class="n">daytime</span><span class="p">)</span> +<a name="line-1242"></a> <span class="k">return</span> <span class="s">"weather-clear"</span><span class="p">;</span> +<a name="line-1243"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-1244"></a> <span class="n">icon</span> <span class="o">=</span> <span class="n">g_stpcpy</span><span class="p">(</span><span class="n">icon_buffer</span><span class="p">,</span> <span class="s">"weather-clear-night"</span><span class="p">);</span> +<a name="line-1245"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1246"></a> <span class="p">}</span> +<a name="line-1247"></a> +<a name="line-1248"></a> <span class="k">case</span> <span class="nl">SKY_BROKEN</span><span class="p">:</span> +<a name="line-1249"></a> <span class="k">case</span> <span class="nl">SKY_SCATTERED</span><span class="p">:</span> +<a name="line-1250"></a> <span class="k">case</span> <span class="nl">SKY_FEW</span><span class="p">:</span> +<a name="line-1251"></a> <span class="k">if</span> <span class="p">(</span><span class="n">daytime</span><span class="p">)</span> +<a name="line-1252"></a> <span class="k">return</span> <span class="s">"weather-few-clouds"</span><span class="p">;</span> +<a name="line-1253"></a> <span class="k">else</span> <span class="p">{</span> +<a name="line-1254"></a> <span class="n">icon</span> <span class="o">=</span> <span class="n">g_stpcpy</span><span class="p">(</span><span class="n">icon_buffer</span><span class="p">,</span> <span class="s">"weather-few-clouds-night"</span><span class="p">);</span> +<a name="line-1255"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1256"></a> <span class="p">}</span> +<a name="line-1257"></a> +<a name="line-1258"></a> <span class="k">case</span> <span class="nl">SKY_OVERCAST</span><span class="p">:</span> +<a name="line-1259"></a> <span class="k">return</span> <span class="s">"weather-overcast"</span><span class="p">;</span> +<a name="line-1260"></a> +<a name="line-1261"></a> <span class="k">default</span><span class="o">:</span> <span class="cm">/* unrecognized */</span> +<a name="line-1262"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span> +<a name="line-1263"></a> <span class="p">}</span> +<a name="line-1264"></a> +<a name="line-1265"></a> <span class="cm">/*</span> +<a name="line-1266"></a><span class="cm"> * A phase-of-moon icon is to be returned.</span> +<a name="line-1267"></a><span class="cm"> * Determine which one based on the moon's location</span> +<a name="line-1268"></a><span class="cm"> */</span> +<a name="line-1269"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">moonValid</span> <span class="o">&&</span> <span class="n">weather_info_get_value_moonphase</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="o">&</span><span class="n">moonPhase</span><span class="p">,</span> <span class="o">&</span><span class="n">moonLat</span><span class="p">))</span> <span class="p">{</span> +<a name="line-1270"></a> <span class="n">phase</span> <span class="o">=</span> <span class="p">(</span><span class="n">gint</span><span class="p">)((</span><span class="n">moonPhase</span> <span class="o">*</span> <span class="n">MOON_PHASES</span> <span class="o">/</span> <span class="mf">360.</span><span class="p">)</span> <span class="o">+</span> <span class="mf">0.5</span><span class="p">);</span> +<a name="line-1271"></a> <span class="k">if</span> <span class="p">(</span><span class="n">phase</span> <span class="o">==</span> <span class="n">MOON_PHASES</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1272"></a> <span class="n">phase</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> +<a name="line-1273"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">phase</span> <span class="o">></span> <span class="mi">0</span> <span class="o">&&</span> +<a name="line-1274"></a> <span class="p">(</span><span class="n">RADIANS_TO_DEGREES</span><span class="p">(</span><span class="n">weather_info_get_location</span><span class="p">(</span><span class="n">info</span><span class="p">)</span><span class="o">-></span><span class="n">latitude</span><span class="p">)</span> +<a name="line-1275"></a> <span class="o"><</span> <span class="n">moonLat</span><span class="p">))</span> <span class="p">{</span> +<a name="line-1276"></a> <span class="cm">/*</span> +<a name="line-1277"></a><span class="cm"> * Locations south of the moon's latitude will see the moon in the</span> +<a name="line-1278"></a><span class="cm"> * northern sky. The moon waxes and wanes from left to right</span> +<a name="line-1279"></a><span class="cm"> * so we reference an icon running in the opposite direction.</span> +<a name="line-1280"></a><span class="cm"> */</span> +<a name="line-1281"></a> <span class="n">phase</span> <span class="o">=</span> <span class="n">MOON_PHASES</span> <span class="o">-</span> <span class="n">phase</span><span class="p">;</span> +<a name="line-1282"></a> <span class="p">}</span> +<a name="line-1283"></a> +<a name="line-1284"></a> <span class="cm">/*</span> +<a name="line-1285"></a><span class="cm"> * If the moon is not full then append the angle to the icon string.</span> +<a name="line-1286"></a><span class="cm"> * Note that an icon by this name is not required to exist:</span> +<a name="line-1287"></a><span class="cm"> * the caller can use GTK_ICON_LOOKUP_GENERIC_FALLBACK to fall back to</span> +<a name="line-1288"></a><span class="cm"> * the full moon image.</span> +<a name="line-1289"></a><span class="cm"> */</span> +<a name="line-1290"></a> <span class="k">if</span> <span class="p">((</span><span class="mi">0</span> <span class="o">==</span> <span class="p">(</span><span class="n">MOON_PHASES</span> <span class="o">&</span> <span class="mh">0x1</span><span class="p">))</span> <span class="o">&&</span> <span class="p">(</span><span class="n">MOON_PHASES</span><span class="o">/</span><span class="mi">2</span> <span class="o">!=</span> <span class="n">phase</span><span class="p">))</span> <span class="p">{</span> +<a name="line-1291"></a> <span class="n">g_snprintf</span><span class="p">(</span><span class="n">icon</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">icon_buffer</span><span class="p">)</span> <span class="o">-</span> <span class="n">strlen</span><span class="p">(</span><span class="n">icon_buffer</span><span class="p">),</span> +<a name="line-1292"></a> <span class="s">"-%03d"</span><span class="p">,</span> <span class="n">phase</span> <span class="o">*</span> <span class="mi">360</span> <span class="o">/</span> <span class="n">MOON_PHASES</span><span class="p">);</span> +<a name="line-1293"></a> <span class="p">}</span> +<a name="line-1294"></a> <span class="p">}</span> +<a name="line-1295"></a> <span class="k">return</span> <span class="n">icon_buffer</span><span class="p">;</span> +<a name="line-1296"></a><span class="p">}</span> +<a name="line-1297"></a> +<a name="line-1298"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-1299"></a><span class="nf">temperature_value</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">temp_f</span><span class="p">,</span> +<a name="line-1300"></a> <span class="n">TempUnit</span> <span class="n">to_unit</span><span class="p">,</span> +<a name="line-1301"></a> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> +<a name="line-1302"></a> <span class="n">TempUnit</span> <span class="n">def_unit</span><span class="p">)</span> +<a name="line-1303"></a><span class="p">{</span> +<a name="line-1304"></a> <span class="n">gboolean</span> <span class="n">ok</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1305"></a> +<a name="line-1306"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">;</span> +<a name="line-1307"></a> <span class="k">if</span> <span class="p">(</span><span class="n">temp_f</span> <span class="o"><</span> <span class="o">-</span><span class="mf">500.0</span><span class="p">)</span> +<a name="line-1308"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1309"></a> +<a name="line-1310"></a> <span class="k">if</span> <span class="p">(</span><span class="n">to_unit</span> <span class="o">==</span> <span class="n">TEMP_UNIT_DEFAULT</span><span class="p">)</span> +<a name="line-1311"></a> <span class="n">to_unit</span> <span class="o">=</span> <span class="n">def_unit</span><span class="p">;</span> +<a name="line-1312"></a> +<a name="line-1313"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1314"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_FAHRENHEIT</span><span class="p">:</span> +<a name="line-1315"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">temp_f</span><span class="p">;</span> +<a name="line-1316"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1317"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_CENTIGRADE</span><span class="p">:</span> +<a name="line-1318"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">TEMP_F_TO_C</span> <span class="p">(</span><span class="n">temp_f</span><span class="p">);</span> +<a name="line-1319"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1320"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_KELVIN</span><span class="p">:</span> +<a name="line-1321"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">TEMP_F_TO_K</span> <span class="p">(</span><span class="n">temp_f</span><span class="p">);</span> +<a name="line-1322"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1323"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1324"></a> <span class="k">case</span> <span class="nl">TEMP_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1325"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1326"></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1327"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1328"></a> <span class="p">}</span> +<a name="line-1329"></a> +<a name="line-1330"></a> <span class="k">return</span> <span class="n">ok</span><span class="p">;</span> +<a name="line-1331"></a><span class="p">}</span> +<a name="line-1332"></a> +<a name="line-1333"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-1334"></a><span class="nf">speed_value</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">knots</span><span class="p">,</span> <span class="n">SpeedUnit</span> <span class="n">to_unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">SpeedUnit</span> <span class="n">def_unit</span><span class="p">)</span> +<a name="line-1335"></a><span class="p">{</span> +<a name="line-1336"></a> <span class="n">gboolean</span> <span class="n">ok</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1337"></a> +<a name="line-1338"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-1339"></a> +<a name="line-1340"></a> <span class="k">if</span> <span class="p">(</span><span class="n">knots</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-1341"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1342"></a> +<a name="line-1343"></a> <span class="k">if</span> <span class="p">(</span><span class="n">to_unit</span> <span class="o">==</span> <span class="n">SPEED_UNIT_DEFAULT</span><span class="p">)</span> +<a name="line-1344"></a> <span class="n">to_unit</span> <span class="o">=</span> <span class="n">def_unit</span><span class="p">;</span> +<a name="line-1345"></a> +<a name="line-1346"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1347"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_KNOTS</span><span class="p">:</span> +<a name="line-1348"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">knots</span><span class="p">;</span> +<a name="line-1349"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1350"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_MPH</span><span class="p">:</span> +<a name="line-1351"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">WINDSPEED_KNOTS_TO_MPH</span> <span class="p">(</span><span class="n">knots</span><span class="p">);</span> +<a name="line-1352"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1353"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_KPH</span><span class="p">:</span> +<a name="line-1354"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">WINDSPEED_KNOTS_TO_KPH</span> <span class="p">(</span><span class="n">knots</span><span class="p">);</span> +<a name="line-1355"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1356"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_MS</span><span class="p">:</span> +<a name="line-1357"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">WINDSPEED_KNOTS_TO_MS</span> <span class="p">(</span><span class="n">knots</span><span class="p">);</span> +<a name="line-1358"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1359"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_BFT</span><span class="p">:</span> +<a name="line-1360"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">WINDSPEED_KNOTS_TO_BFT</span> <span class="p">(</span><span class="n">knots</span><span class="p">);</span> +<a name="line-1361"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1362"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1363"></a> <span class="k">case</span> <span class="nl">SPEED_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1364"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1365"></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1366"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1367"></a> <span class="p">}</span> +<a name="line-1368"></a> +<a name="line-1369"></a> <span class="k">return</span> <span class="n">ok</span><span class="p">;</span> +<a name="line-1370"></a><span class="p">}</span> +<a name="line-1371"></a> +<a name="line-1372"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-1373"></a><span class="nf">pressure_value</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">inHg</span><span class="p">,</span> <span class="n">PressureUnit</span> <span class="n">to_unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">PressureUnit</span> <span class="n">def_unit</span><span class="p">)</span> +<a name="line-1374"></a><span class="p">{</span> +<a name="line-1375"></a> <span class="n">gboolean</span> <span class="n">ok</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1376"></a> +<a name="line-1377"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-1378"></a> +<a name="line-1379"></a> <span class="k">if</span> <span class="p">(</span><span class="n">inHg</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-1380"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1381"></a> +<a name="line-1382"></a> <span class="k">if</span> <span class="p">(</span><span class="n">to_unit</span> <span class="o">==</span> <span class="n">PRESSURE_UNIT_DEFAULT</span><span class="p">)</span> +<a name="line-1383"></a> <span class="n">to_unit</span> <span class="o">=</span> <span class="n">def_unit</span><span class="p">;</span> +<a name="line-1384"></a> +<a name="line-1385"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1386"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_INCH_HG</span><span class="p">:</span> +<a name="line-1387"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">inHg</span><span class="p">;</span> +<a name="line-1388"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1389"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_MM_HG</span><span class="p">:</span> +<a name="line-1390"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">PRESSURE_INCH_TO_MM</span> <span class="p">(</span><span class="n">inHg</span><span class="p">);</span> +<a name="line-1391"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1392"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_KPA</span><span class="p">:</span> +<a name="line-1393"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">PRESSURE_INCH_TO_KPA</span> <span class="p">(</span><span class="n">inHg</span><span class="p">);</span> +<a name="line-1394"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1395"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_HPA</span><span class="p">:</span> +<a name="line-1396"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">PRESSURE_INCH_TO_HPA</span> <span class="p">(</span><span class="n">inHg</span><span class="p">);</span> +<a name="line-1397"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1398"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_MB</span><span class="p">:</span> +<a name="line-1399"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">PRESSURE_INCH_TO_MB</span> <span class="p">(</span><span class="n">inHg</span><span class="p">);</span> +<a name="line-1400"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1401"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_ATM</span><span class="p">:</span> +<a name="line-1402"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">PRESSURE_INCH_TO_ATM</span> <span class="p">(</span><span class="n">inHg</span><span class="p">);</span> +<a name="line-1403"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1404"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1405"></a> <span class="k">case</span> <span class="nl">PRESSURE_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1406"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1407"></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1408"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1409"></a> <span class="p">}</span> +<a name="line-1410"></a> +<a name="line-1411"></a> <span class="k">return</span> <span class="n">ok</span><span class="p">;</span> +<a name="line-1412"></a><span class="p">}</span> +<a name="line-1413"></a> +<a name="line-1414"></a><span class="k">static</span> <span class="n">gboolean</span> +<a name="line-1415"></a><span class="nf">distance_value</span> <span class="p">(</span><span class="n">gdouble</span> <span class="n">miles</span><span class="p">,</span> <span class="n">DistanceUnit</span> <span class="n">to_unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> <span class="n">DistanceUnit</span> <span class="n">def_unit</span><span class="p">)</span> +<a name="line-1416"></a><span class="p">{</span> +<a name="line-1417"></a> <span class="n">gboolean</span> <span class="n">ok</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1418"></a> +<a name="line-1419"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">;</span> +<a name="line-1420"></a> +<a name="line-1421"></a> <span class="k">if</span> <span class="p">(</span><span class="n">miles</span> <span class="o"><</span> <span class="mf">0.0</span><span class="p">)</span> +<a name="line-1422"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1423"></a> +<a name="line-1424"></a> <span class="k">if</span> <span class="p">(</span><span class="n">to_unit</span> <span class="o">==</span> <span class="n">DISTANCE_UNIT_DEFAULT</span><span class="p">)</span> +<a name="line-1425"></a> <span class="n">to_unit</span> <span class="o">=</span> <span class="n">def_unit</span><span class="p">;</span> +<a name="line-1426"></a> +<a name="line-1427"></a> <span class="k">switch</span> <span class="p">(</span><span class="n">to_unit</span><span class="p">)</span> <span class="p">{</span> +<a name="line-1428"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_MILES</span><span class="p">:</span> +<a name="line-1429"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">miles</span><span class="p">;</span> +<a name="line-1430"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1431"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_KM</span><span class="p">:</span> +<a name="line-1432"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">VISIBILITY_SM_TO_KM</span> <span class="p">(</span><span class="n">miles</span><span class="p">);</span> +<a name="line-1433"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1434"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_METERS</span><span class="p">:</span> +<a name="line-1435"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">VISIBILITY_SM_TO_M</span> <span class="p">(</span><span class="n">miles</span><span class="p">);</span> +<a name="line-1436"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1437"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_INVALID</span><span class="p">:</span> +<a name="line-1438"></a> <span class="k">case</span> <span class="nl">DISTANCE_UNIT_DEFAULT</span><span class="p">:</span> +<a name="line-1439"></a> <span class="k">default</span><span class="o">:</span> +<a name="line-1440"></a> <span class="n">ok</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1441"></a> <span class="k">break</span><span class="p">;</span> +<a name="line-1442"></a> <span class="p">}</span> +<a name="line-1443"></a> +<a name="line-1444"></a> <span class="k">return</span> <span class="n">ok</span><span class="p">;</span> +<a name="line-1445"></a><span class="p">}</span> +<a name="line-1446"></a> +<a name="line-1447"></a><span class="n">gboolean</span> +<a name="line-1448"></a><span class="nf">weather_info_get_value_sky</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">WeatherSky</span> <span class="o">*</span><span class="n">sky</span><span class="p">)</span> +<a name="line-1449"></a><span class="p">{</span> +<a name="line-1450"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1451"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">sky</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1452"></a> +<a name="line-1453"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1454"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1455"></a> +<a name="line-1456"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o"><=</span> <span class="n">SKY_INVALID</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">sky</span> <span class="o">>=</span> <span class="n">SKY_LAST</span><span class="p">)</span> +<a name="line-1457"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1458"></a> +<a name="line-1459"></a> <span class="o">*</span><span class="n">sky</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sky</span><span class="p">;</span> +<a name="line-1460"></a> +<a name="line-1461"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1462"></a><span class="p">}</span> +<a name="line-1463"></a> +<a name="line-1464"></a><span class="n">gboolean</span> +<a name="line-1465"></a><span class="nf">weather_info_get_value_conditions</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">WeatherConditionPhenomenon</span> <span class="o">*</span><span class="n">phenomenon</span><span class="p">,</span> <span class="n">WeatherConditionQualifier</span> <span class="o">*</span><span class="n">qualifier</span><span class="p">)</span> +<a name="line-1466"></a><span class="p">{</span> +<a name="line-1467"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1468"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">phenomenon</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1469"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">qualifier</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1470"></a> +<a name="line-1471"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1472"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1473"></a> +<a name="line-1474"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">significant</span><span class="p">)</span> +<a name="line-1475"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1476"></a> +<a name="line-1477"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">></span> <span class="n">PHENOMENON_INVALID</span> <span class="o">&&</span> +<a name="line-1478"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o"><</span> <span class="n">PHENOMENON_LAST</span> <span class="o">&&</span> +<a name="line-1479"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">></span> <span class="n">QUALIFIER_INVALID</span> <span class="o">&&</span> +<a name="line-1480"></a> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o"><</span> <span class="n">QUALIFIER_LAST</span><span class="p">))</span> +<a name="line-1481"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1482"></a> +<a name="line-1483"></a> <span class="o">*</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span><span class="p">;</span> +<a name="line-1484"></a> <span class="o">*</span><span class="n">qualifier</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span><span class="p">;</span> +<a name="line-1485"></a> +<a name="line-1486"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1487"></a><span class="p">}</span> +<a name="line-1488"></a> +<a name="line-1489"></a><span class="n">gboolean</span> +<a name="line-1490"></a><span class="nf">weather_info_get_value_temp</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1491"></a><span class="p">{</span> +<a name="line-1492"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1493"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1494"></a> +<a name="line-1495"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1496"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1497"></a> +<a name="line-1498"></a> <span class="k">return</span> <span class="n">temperature_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">);</span> +<a name="line-1499"></a><span class="p">}</span> +<a name="line-1500"></a> +<a name="line-1501"></a><span class="n">gboolean</span> +<a name="line-1502"></a><span class="nf">weather_info_get_value_temp_min</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1503"></a><span class="p">{</span> +<a name="line-1504"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1505"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1506"></a> +<a name="line-1507"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">tempMinMaxValid</span><span class="p">)</span> +<a name="line-1508"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1509"></a> +<a name="line-1510"></a> <span class="k">return</span> <span class="n">temperature_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_min</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">);</span> +<a name="line-1511"></a><span class="p">}</span> +<a name="line-1512"></a> +<a name="line-1513"></a><span class="n">gboolean</span> +<a name="line-1514"></a><span class="nf">weather_info_get_value_temp_max</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1515"></a><span class="p">{</span> +<a name="line-1516"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1517"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1518"></a> +<a name="line-1519"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">tempMinMaxValid</span><span class="p">)</span> +<a name="line-1520"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1521"></a> +<a name="line-1522"></a> <span class="k">return</span> <span class="n">temperature_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">temp_max</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">);</span> +<a name="line-1523"></a><span class="p">}</span> +<a name="line-1524"></a> +<a name="line-1525"></a><span class="n">gboolean</span> +<a name="line-1526"></a><span class="nf">weather_info_get_value_dew</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1527"></a><span class="p">{</span> +<a name="line-1528"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1529"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1530"></a> +<a name="line-1531"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1532"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1533"></a> +<a name="line-1534"></a> <span class="k">return</span> <span class="n">temperature_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">dew</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">);</span> +<a name="line-1535"></a><span class="p">}</span> +<a name="line-1536"></a> +<a name="line-1537"></a><span class="n">gboolean</span> +<a name="line-1538"></a><span class="nf">weather_info_get_value_apparent</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">TempUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1539"></a><span class="p">{</span> +<a name="line-1540"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1541"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1542"></a> +<a name="line-1543"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1544"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1545"></a> +<a name="line-1546"></a> <span class="k">return</span> <span class="n">temperature_value</span> <span class="p">(</span><span class="n">calc_apparent</span> <span class="p">(</span><span class="n">info</span><span class="p">),</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">temperature_unit</span><span class="p">);</span> +<a name="line-1547"></a><span class="p">}</span> +<a name="line-1548"></a> +<a name="line-1549"></a><span class="n">gboolean</span> +<a name="line-1550"></a><span class="nf">weather_info_get_value_update</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1551"></a><span class="p">{</span> +<a name="line-1552"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1553"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1554"></a> +<a name="line-1555"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1556"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1557"></a> +<a name="line-1558"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">update</span><span class="p">;</span> +<a name="line-1559"></a> +<a name="line-1560"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1561"></a><span class="p">}</span> +<a name="line-1562"></a> +<a name="line-1563"></a><span class="n">gboolean</span> +<a name="line-1564"></a><span class="nf">weather_info_get_value_sunrise</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1565"></a><span class="p">{</span> +<a name="line-1566"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1567"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1568"></a> +<a name="line-1569"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunriseValid</span><span class="p">)</span> +<a name="line-1570"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1571"></a> +<a name="line-1572"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunrise</span><span class="p">;</span> +<a name="line-1573"></a> +<a name="line-1574"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1575"></a><span class="p">}</span> +<a name="line-1576"></a> +<a name="line-1577"></a><span class="n">gboolean</span> +<a name="line-1578"></a><span class="nf">weather_info_get_value_sunset</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1579"></a><span class="p">{</span> +<a name="line-1580"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1581"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1582"></a> +<a name="line-1583"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">sunsetValid</span><span class="p">)</span> +<a name="line-1584"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1585"></a> +<a name="line-1586"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">sunset</span><span class="p">;</span> +<a name="line-1587"></a> +<a name="line-1588"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1589"></a><span class="p">}</span> +<a name="line-1590"></a> +<a name="line-1591"></a><span class="n">gboolean</span> +<a name="line-1592"></a><span class="nf">weather_info_get_value_moonphase</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> +<a name="line-1593"></a> <span class="n">WeatherMoonPhase</span> <span class="o">*</span><span class="n">value</span><span class="p">,</span> +<a name="line-1594"></a> <span class="n">WeatherMoonLatitude</span> <span class="o">*</span><span class="n">lat</span><span class="p">)</span> +<a name="line-1595"></a><span class="p">{</span> +<a name="line-1596"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1597"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1598"></a> +<a name="line-1599"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">moonValid</span><span class="p">)</span> +<a name="line-1600"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1601"></a> +<a name="line-1602"></a> <span class="o">*</span><span class="n">value</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">moonphase</span><span class="p">;</span> +<a name="line-1603"></a> <span class="o">*</span><span class="n">lat</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">moonlatitude</span><span class="p">;</span> +<a name="line-1604"></a> +<a name="line-1605"></a> <span class="k">return</span> <span class="n">TRUE</span><span class="p">;</span> +<a name="line-1606"></a><span class="p">}</span> +<a name="line-1607"></a> +<a name="line-1608"></a><span class="n">gboolean</span> +<a name="line-1609"></a><span class="nf">weather_info_get_value_wind</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">SpeedUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">speed</span><span class="p">,</span> <span class="n">WeatherWindDirection</span> <span class="o">*</span><span class="n">direction</span><span class="p">)</span> +<a name="line-1610"></a><span class="p">{</span> +<a name="line-1611"></a> <span class="n">gboolean</span> <span class="n">res</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1612"></a> +<a name="line-1613"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1614"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">speed</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1615"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">direction</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1616"></a> +<a name="line-1617"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1618"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1619"></a> +<a name="line-1620"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span> <span class="o"><</span> <span class="mf">0.0</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o"><=</span> <span class="n">WIND_INVALID</span> <span class="o">||</span> <span class="n">info</span><span class="o">-></span><span class="n">wind</span> <span class="o">>=</span> <span class="n">WIND_LAST</span><span class="p">)</span> +<a name="line-1621"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1622"></a> +<a name="line-1623"></a> <span class="n">res</span> <span class="o">=</span> <span class="n">speed_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">windspeed</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">speed</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">speed_unit</span><span class="p">);</span> +<a name="line-1624"></a> <span class="o">*</span><span class="n">direction</span> <span class="o">=</span> <span class="n">info</span><span class="o">-></span><span class="n">wind</span><span class="p">;</span> +<a name="line-1625"></a> +<a name="line-1626"></a> <span class="k">return</span> <span class="n">res</span><span class="p">;</span> +<a name="line-1627"></a><span class="p">}</span> +<a name="line-1628"></a> +<a name="line-1629"></a><span class="n">gboolean</span> +<a name="line-1630"></a><span class="nf">weather_info_get_value_pressure</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">PressureUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1631"></a><span class="p">{</span> +<a name="line-1632"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1633"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1634"></a> +<a name="line-1635"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1636"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1637"></a> +<a name="line-1638"></a> <span class="k">return</span> <span class="n">pressure_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">pressure</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">pressure_unit</span><span class="p">);</span> +<a name="line-1639"></a><span class="p">}</span> +<a name="line-1640"></a> +<a name="line-1641"></a><span class="n">gboolean</span> +<a name="line-1642"></a><span class="nf">weather_info_get_value_visibility</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="n">DistanceUnit</span> <span class="n">unit</span><span class="p">,</span> <span class="n">gdouble</span> <span class="o">*</span><span class="n">value</span><span class="p">)</span> +<a name="line-1643"></a><span class="p">{</span> +<a name="line-1644"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1645"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">value</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1646"></a> +<a name="line-1647"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">info</span><span class="o">-></span><span class="n">valid</span><span class="p">)</span> +<a name="line-1648"></a> <span class="k">return</span> <span class="n">FALSE</span><span class="p">;</span> +<a name="line-1649"></a> +<a name="line-1650"></a> <span class="k">return</span> <span class="n">distance_value</span> <span class="p">(</span><span class="n">info</span><span class="o">-></span><span class="n">visibility</span><span class="p">,</span> <span class="n">unit</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">info</span><span class="o">-></span><span class="n">distance_unit</span><span class="p">);</span> +<a name="line-1651"></a><span class="p">}</span> +<a name="line-1652"></a> +<a name="line-1653"></a><span class="cm">/**</span> +<a name="line-1654"></a><span class="cm"> * weather_info_get_upcoming_moonphases:</span> +<a name="line-1655"></a><span class="cm"> * @info: WeatherInfo containing the time_t of interest</span> +<a name="line-1656"></a><span class="cm"> * @phases: An array of four time_t values that will hold the returned values.</span> +<a name="line-1657"></a><span class="cm"> * The values are estimates of the time of the next new, quarter, full and</span> +<a name="line-1658"></a><span class="cm"> * three-quarter moons.</span> +<a name="line-1659"></a><span class="cm"> *</span> +<a name="line-1660"></a><span class="cm"> * Returns: gboolean indicating success or failure</span> +<a name="line-1661"></a><span class="cm"> */</span> +<a name="line-1662"></a><span class="n">gboolean</span> +<a name="line-1663"></a><span class="nf">weather_info_get_upcoming_moonphases</span> <span class="p">(</span><span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">info</span><span class="p">,</span> <span class="kt">time_t</span> <span class="o">*</span><span class="n">phases</span><span class="p">)</span> +<a name="line-1664"></a><span class="p">{</span> +<a name="line-1665"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">info</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1666"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">phases</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span> +<a name="line-1667"></a> +<a name="line-1668"></a> <span class="k">return</span> <span class="n">calc_moon_phases</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">phases</span><span class="p">);</span> +<a name="line-1669"></a><span class="p">}</span> +<a name="line-1670"></a> +<a name="line-1671"></a><span class="k">static</span> <span class="kt">void</span> +<a name="line-1672"></a><span class="nf">_weather_internal_check</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> +<a name="line-1673"></a><span class="p">{</span> +<a name="line-1674"></a> <span class="n">g_assert</span> <span class="p">(</span><span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">wind_direction_str</span><span class="p">)</span> <span class="o">==</span> <span class="n">WIND_LAST</span><span class="p">);</span> +<a name="line-1675"></a> <span class="n">g_assert</span> <span class="p">(</span><span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">sky_str</span><span class="p">)</span> <span class="o">==</span> <span class="n">SKY_LAST</span><span class="p">);</span> +<a name="line-1676"></a> <span class="n">g_assert</span> <span class="p">(</span><span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">conditions_str</span><span class="p">)</span> <span class="o">==</span> <span class="n">PHENOMENON_LAST</span><span class="p">);</span> +<a name="line-1677"></a> <span class="n">g_assert</span> <span class="p">(</span><span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">conditions_str</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="n">QUALIFIER_LAST</span><span class="p">);</span> +<a name="line-1678"></a><span class="p">}</span> +</pre></div> +</td></tr></table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/index.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/index.html new file mode 100644 index 0000000..be43540 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/index.html @@ -0,0 +1,157 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> + + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: </h1> + </div> + <div class="wrapper"> + <div id="menu_index"> + <p id="filename"><a href="index.html">Defect summary;</a> </p> + + <label><input type="checkbox" onclick="toggleAll()" checked> Toggle all</label> + <table> + <tr><th>Show</th><th>#</th><th>Defect ID</th></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="variableScope" name="variableScope" checked></td><td>10</td><td>variableScope</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="asctimeCalled" name="asctimeCalled" checked></td><td>5</td><td>asctimeCalled</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="unsignedLessThanZero" name="unsignedLessThanZero" checked></td><td>3</td><td>unsignedLessThanZero</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>2</td><td>knownConditionTrueFalse</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="redundantInitialization" name="redundantInitialization" checked></td><td>2</td><td>redundantInitialization</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="unreadVariable" name="unreadVariable" checked></td><td>2</td><td>unreadVariable</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="arrayIndexThenCheck" name="arrayIndexThenCheck" checked></td><td>1</td><td>arrayIndexThenCheck</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="missingInclude" name="missingInclude" checked></td><td>1</td><td>missingInclude</td></tr> + <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="uselessAssignmentPtrArg" name="uselessAssignmentPtrArg" checked></td><td>1</td><td>uselessAssignmentPtrArg</td></tr> + <tr><td></td><td>27</td><td>total</td></tr> + </table> + <p><a href="stats.html">Statistics</a></p> + </div> + <div id="content_index"> + + <table> + <tr><th>Line</th><th>Id</th><th>CWE</th><th>Severity</th><th>Message</th></tr> + <tr><td colspan="5"><a href="9.html"></a></td></tr> + <tr class="missingInclude"><td></td><td>missingInclude</td><td></td><td>information</td><td>Cppcheck cannot find all the include files (use --check-config for details)</td></tr> + <tr><td colspan="5"><a href="0.html">libmateweather/location-entry.c</a></td></tr> + <tr class="variableScope"><td><a href="0.html#line-303">303</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'cmpcode' can be reduced.</td></tr> + <tr><td colspan="5"><a href="1.html">libmateweather/mateweather-timezone.c</a></td></tr> + <tr class="variableScope"><td><a href="1.html#line-71">71</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'second_isdst' can be reduced.</td></tr> + <tr><td colspan="5"><a href="2.html">libmateweather/parser.c</a></td></tr> + <tr class="variableScope"><td><a href="2.html#line-94">94</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'next_tagname' can be reduced.</td></tr> + <tr class="arrayIndexThenCheck"><td><a href="2.html#line-117">117</a></td><td>arrayIndexThenCheck</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >Array index 'i' is used before limits check.</td></tr> + <tr><td colspan="5"><a href="3.html">libmateweather/test_metar.c</a></td></tr> + <tr class="variableScope"><td><a href="3.html#line-29">29</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'len' can be reduced.</td></tr> + <tr><td colspan="5"><a href="4.html">libmateweather/test_sun_moon.c</a></td></tr> + <tr class="asctimeCalled"><td><a href="4.html#line-73">73</a></td><td>asctimeCalled</td><td><a href="https://cwe.mitre.org/data/definitions/477.html">477</a></td><td>style</td><td >Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</td></tr> + <tr class="asctimeCalled"><td><a href="4.html#line-83">83</a></td><td>asctimeCalled</td><td><a href="https://cwe.mitre.org/data/definitions/477.html">477</a></td><td>style</td><td >Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</td></tr> + <tr class="asctimeCalled"><td><a href="4.html#line-84">84</a></td><td>asctimeCalled</td><td><a href="https://cwe.mitre.org/data/definitions/477.html">477</a></td><td>style</td><td >Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</td></tr> + <tr class="asctimeCalled"><td><a href="4.html#line-85">85</a></td><td>asctimeCalled</td><td><a href="https://cwe.mitre.org/data/definitions/477.html">477</a></td><td>style</td><td >Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</td></tr> + <tr class="asctimeCalled"><td><a href="4.html#line-86">86</a></td><td>asctimeCalled</td><td><a href="https://cwe.mitre.org/data/definitions/477.html">477</a></td><td>style</td><td >Obsolete function 'asctime' called. It is recommended to use 'strftime' instead.</td></tr> + <tr><td colspan="5"><a href="5.html">libmateweather/weather-bom.c</a></td></tr> + <tr class="variableScope"><td><a href="5.html#line-32">32</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'rp' can be reduced.</td></tr> + <tr><td colspan="5"><a href="6.html">libmateweather/weather-metar.c</a></td></tr> + <tr class="knownConditionTrueFalse"><td><a href="6.html#line-117">117</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td >Condition '12<=dir' is always true</td></tr> + <tr class="knownConditionTrueFalse"><td><a href="6.html#line-145">145</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/571.html">571</a></td><td>style</td><td >Condition 'dir<=348' is always true</td></tr> + <tr class="unreadVariable"><td><a href="6.html#line-454">454</a></td><td>unreadVariable</td><td><a href="https://cwe.mitre.org/data/definitions/563.html">563</a></td><td>style</td><td >Variable 'i' is assigned a value that is never used.</td></tr> + <tr class="variableScope"><td><a href="6.html#line-493">493</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'endtag' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="6.html#line-494">494</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'metar' can be reduced.</td></tr> + <tr><td colspan="5"><a href="7.html">libmateweather/weather-sun.c</a></td></tr> + <tr class="redundantInitialization"><td><a href="7.html#line-178">178</a></td><td>redundantInitialization</td><td><a href="https://cwe.mitre.org/data/definitions/563.html">563</a></td><td>style</td><td >Redundant initialization for 'obsLat'. The initialized value is overwritten before it is read.</td></tr> + <tr class="redundantInitialization"><td><a href="7.html#line-179">179</a></td><td>redundantInitialization</td><td><a href="https://cwe.mitre.org/data/definitions/563.html">563</a></td><td>style</td><td >Redundant initialization for 'obsLon'. The initialized value is overwritten before it is read.</td></tr> + <tr><td colspan="5"><a href="8.html">libmateweather/weather.c</a></td></tr> + <tr class="variableScope"><td><a href="8.html#line-326">326</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'str' can be reduced.</td></tr> + <tr class="uselessAssignmentPtrArg"><td><a href="8.html#line-498">498</a></td><td>uselessAssignmentPtrArg</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>warning</td><td >Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?</td></tr> + <tr class="unreadVariable"><td><a href="8.html#line-498">498</a></td><td>unreadVariable</td><td><a href="https://cwe.mitre.org/data/definitions/563.html">563</a></td><td>style</td><td >Variable 'location' is assigned a value that is never used.</td></tr> + <tr class="variableScope"><td><a href="8.html#line-700">700</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'utf8' can be reduced.</td></tr> + <tr class="variableScope"><td><a href="8.html#line-700">700</a></td><td>variableScope</td><td><a href="https://cwe.mitre.org/data/definitions/398.html">398</a></td><td>style</td><td >The scope of the variable 'timeformat' can be reduced.</td></tr> + <tr class="unsignedLessThanZero"><td><a href="8.html#line-718">718</a></td><td>unsignedLessThanZero</td><td><a href="https://cwe.mitre.org/data/definitions/570.html">570</a></td><td>style</td><td >Checking if unsigned expression 'strftime(buf,sizeof(buf),timeformat,&tm)' is less than zero.</td></tr> + <tr class="unsignedLessThanZero"><td><a href="8.html#line-1073">1073</a></td><td>unsignedLessThanZero</td><td><a href="https://cwe.mitre.org/data/definitions/570.html">570</a></td><td>style</td><td >Checking if unsigned expression 'strftime(buf,sizeof(buf),mateweather_gettext("%H:%M"),&tm)' is less than zero.</td></tr> + <tr class="unsignedLessThanZero"><td><a href="8.html#line-1094">1094</a></td><td>unsignedLessThanZero</td><td><a href="https://cwe.mitre.org/data/definitions/570.html">570</a></td><td>style</td><td >Checking if unsigned expression 'strftime(buf,sizeof(buf),mateweather_gettext("%H:%M"),&tm)' is less than zero.</td></tr> + </table> + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/stats.html b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/stats.html new file mode 100644 index 0000000..8662a70 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/stats.html @@ -0,0 +1,116 @@ + +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Cppcheck - HTML report - libmateweather</title> + <link rel="stylesheet" href="style.css"> + <style> + + </style> + <script> + function getStyle(el, styleProp) { + var y; + + if (el.currentStyle) { + y = el.currentStyle[styleProp]; + } else if (window.getComputedStyle) { + y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp); + } + + return y; + } + + function toggle() { + var el = this.expandable_content; + var mark = this.expandable_marker; + + if (el.style.display === "block") { + el.style.display = "none"; + mark.textContent = "[+]"; + } else { + el.style.display = "block"; + mark.textContent = "[-]"; + } + } + + function initExpandables() { + var elements = document.querySelectorAll(".expandable"); + + for (var i = 0, len = elements.length; i < len; i++) { + var el = elements[i]; + var clickable = el.querySelector("span"); + var marker = clickable.querySelector(".marker"); + var content = el.querySelector(".content"); + var width = clickable.clientWidth - parseInt(getStyle(content, "padding-left")) - parseInt(getStyle(content, "padding-right")); + content.style.width = width + "px"; + clickable.expandable_content = content; + clickable.expandable_marker = marker; + clickable.addEventListener("click", toggle); + } + } + + function toggleDisplay(id) { + var elements = document.querySelectorAll("." + id); + + for (var i = 0, len = elements.length; i < len; i++) { + elements[i].classList.toggle("d-none"); + } + } + + function toggleAll() { + var elements = document.querySelectorAll("input"); + + // starting from 1 since 0 is the "toggle all" input + for (var i = 1, len = elements.length; i < len; i++) { + var el = elements[i]; + + if (el.checked) { + el.checked = false; + } else { + el.checked = true; + } + + toggleDisplay(el.id); + } + } + window.addEventListener("load", initExpandables); + </script> + </head> + <body> + <div id="header" class="header"> + <h1>Cppcheck report - libmateweather: Statistics</h1> + </div> + <div class="wrapper"> + <div id="menu_index"> + <p id="filename"><a href="index.html">Back to summary</a> </p> + + </div> + <div id="content_index"> +<p>Top 10 files for warning severity, total findings: 1<br> +   1 <a href="8.html"> libmateweather/weather.c</a><br> +</p> +<p>Top 10 files for style severity, total findings: 25<br> +   7 <a href="8.html"> libmateweather/weather.c</a><br> +   5 <a href="6.html"> libmateweather/weather-metar.c</a><br> +   5 <a href="4.html"> libmateweather/test_sun_moon.c</a><br> +   2 <a href="7.html"> libmateweather/weather-sun.c</a><br> +   2 <a href="2.html"> libmateweather/parser.c</a><br> +   1 <a href="5.html"> libmateweather/weather-bom.c</a><br> +   1 <a href="3.html"> libmateweather/test_metar.c</a><br> +   1 <a href="1.html"> libmateweather/mateweather-timezone.c</a><br> +   1 <a href="0.html"> libmateweather/location-entry.c</a><br> +</p> + + </div> <!-- /.wrapper --> + </div> + <div id="footer" class="footer"> + <p> + Cppcheck 2.3 - a tool for static C/C++ code analysis<br> + <br> + Internet: <a href="http://cppcheck.net">http://cppcheck.net</a><br> + IRC: <a href="irc://irc.freenode.net/cppcheck">irc://irc.freenode.net/cppcheck</a><br> + </p> + </div> + </body> +</html> diff --git a/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/style.css b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/style.css new file mode 100644 index 0000000..07125f4 --- /dev/null +++ b/2021-04-07-202655-6033-cppcheck@eca5311a4fd2_brazil2/style.css @@ -0,0 +1,137 @@ + +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif; + font-size: 13px; + line-height: 1.5; + margin: 0; + width: auto; +} + +h1 { + margin: 10px; +} + +.header { + border-bottom: thin solid #aaa; +} + +.footer { + border-top: thin solid #aaa; + font-size: 90%; + margin-top: 5px; +} + +.footer ul { + list-style-type: none; + padding-left: 0; +} + +.footer > p { + margin: 4px; +} + +.wrapper { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} + +#menu, +#menu_index { + text-align: left; + width: 350px; + height: 90vh; + min-height: 200px; + overflow: auto; + position: -webkit-sticky; + position: sticky; + top: 0; + padding: 0 15px 15px 15px; +} + +#menu > a { + display: block; + margin-left: 10px; + font-size: 12px; + z-index: 1; +} + +#content, +#content_index { + background-color: #fff; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + padding: 0 15px 15px 15px; + width: calc(100% - 350px); + height: 100%; + overflow-x: auto; +} + +#filename { + margin-left: 10px; + font-size: 12px; + z-index: 1; +} + +.error { + background-color: #ffb7b7; +} + +.error2 { + background-color: #faa; + display: inline-block; + margin-left: 4px; +} + +.inconclusive { + background-color: #b6b6b4; +} + +.inconclusive2 { + background-color: #b6b6b4; + display: inline-block; + margin-left: 4px; +} + +.verbose { + display: inline-block; + vertical-align: top; + cursor: help; +} + +.verbose .content { + display: none; + position: absolute; + padding: 10px; + margin: 4px; + max-width: 40%; + white-space: pre-wrap; + border: 1px solid #000; + background-color: #ffffcc; + cursor: auto; +} + +.highlight .hll { + padding: 1px; +} + +.highlighttable { + background-color: #fff; + z-index: 10; + position: relative; + margin: -10px; +} + +.linenos { + border-right: thin solid #aaa; + color: #d3d3d3; + padding-right: 6px; +} + +.d-none { + display: none; +} |