summaryrefslogtreecommitdiff
path: root/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master
diff options
context:
space:
mode:
Diffstat (limited to '2020-07-17-122136-1677-cppcheck@af3af510ab5b_master')
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/0.html1368
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/1.html994
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/10.html384
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/11.html3562
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/2.html708
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/3.html330
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/4.html350
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/5.html336
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/6.html1122
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/7.html528
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/8.html1324
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/9.html876
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/index.html167
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/stats.html119
-rw-r--r--2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/style.css137
15 files changed, 12305 insertions, 0 deletions
diff --git a/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/0.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/0.html
new file mode 100644
index 0000000..4be7c02
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&quot;location-entry.h&quot;</span><span class="cp"></span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</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&lt;!-- --&gt;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">&quot;match_selected&quot;</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">-&gt;</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">&quot;changed&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;top&quot;</span><span class="p">,</span>
+<a name="line-121"></a> <span class="s">&quot;Top Location&quot;</span><span class="p">,</span>
+<a name="line-122"></a> <span class="s">&quot;The MateWeatherLocation whose children will be used to fill in the entry&quot;</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">&quot;location&quot;</span><span class="p">,</span>
+<a name="line-127"></a> <span class="s">&quot;Location&quot;</span><span class="p">,</span>
+<a name="line-128"></a> <span class="s">&quot;The selected MateWeatherLocation&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</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">&amp;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;&quot;</span><span class="p">);</span>
+<a name="line-196"></a> <span class="n">entry</span><span class="o">-&gt;</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">&quot;location&quot;</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&#39;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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">-&gt;</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">-&gt;</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&#39;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&#39;s text was modified by the user, or %FALSE if</span>
+<a name="line-271"></a><span class="cm"> * it&#39;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">-&gt;</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&#39;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&#39;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&#39;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">&lt;--- The scope of the variable 'cmpcode' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;cmpcode&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&quot;%s, %s&quot;</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">&quot;%s, %s&quot;</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">&amp;&amp;</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 (&lt;location&gt;) 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">&quot;%s (%s), %s&quot;</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">&quot;%s (%s), %s&quot;</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">&amp;</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">&amp;</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&#39;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">&quot;%s, %s&quot;</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">&quot;%s, %s&quot;</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">&amp;</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">&amp;</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">/* &lt;location&gt; with no parent &lt;city&gt;, or &lt;city&gt; with a single</span>
+<a name="line-440"></a><span class="cm"> * child &lt;location&gt;.</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">&quot;%s, %s&quot;</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">&quot;%s, %s&quot;</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">&amp;</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">&amp;</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">-&gt;</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">&gt;</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&#39;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&#39;t at this point) or</span>
+<a name="line-501"></a><span class="cm"> * it is preceded by the string &quot;, &quot; (which isn&#39;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">&quot;, &quot;</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">&amp;&amp;</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">&amp;</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">&amp;</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">&quot; &quot;</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">&amp;&amp;</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">&amp;&amp;</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">&quot; &quot;</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">&quot;top&quot;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/1.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/1.html
new file mode 100644
index 0000000..8801b6f
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;string.h&gt;</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">&quot;mateweather-timezone.h&quot;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&quot;parser.h&quot;</span><span class="cp"></span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</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 &quot;TZif&quot;</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">&lt;--- The scope of the variable 'second_isdst' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;second_isdst&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&amp;</span><span class="n">contents</span><span class="p">,</span> <span class="o">&amp;</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">&lt;</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&#39;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">&lt;</span> <span class="n">timecnt</span> <span class="o">&amp;&amp;</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">&gt;</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">&lt;</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">-&gt;</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">&quot;id&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">xml</span><span class="p">),</span> <span class="s">&quot;name&quot;</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">-&gt;</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">-&gt;</span><span class="n">year_start</span><span class="p">,</span> <span class="n">parser</span><span class="o">-&gt;</span><span class="n">year_end</span><span class="p">,</span>
+<a name="line-189"></a> <span class="o">&amp;</span><span class="n">offset</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">has_dst</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;timezone&quot;</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">-&gt;</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">-&gt;</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">&lt;</span> <span class="n">zones</span><span class="o">-&gt;</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">-&gt;</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&#39;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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;</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">&quot;MateWeatherTimezone&quot;</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">&amp;</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">-&gt;</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">-&gt;</span><span class="n">id</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">&quot;GMT&quot;</span><span class="p">);</span>
+<a name="line-315"></a> <span class="n">zone</span><span class="o">-&gt;</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">&quot;Greenwich Mean Time&quot;</span><span class="p">));</span>
+<a name="line-316"></a> <span class="n">zone</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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&#39;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&#39;s country&#39;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&#39;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">-&gt;</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&#39;s tzdata identifier, eg &quot;America/New_York&quot;.</span>
+<a name="line-348"></a><span class="cm"> *</span>
+<a name="line-349"></a><span class="cm"> * Return value: @zone&#39;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">-&gt;</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&#39;s standard offset from UTC, in minutes. Eg, a value of</span>
+<a name="line-363"></a><span class="cm"> * %120 would indicate &quot;GMT+2&quot;.</span>
+<a name="line-364"></a><span class="cm"> *</span>
+<a name="line-365"></a><span class="cm"> * Return value: @zone&#39;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">-&gt;</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">-&gt;</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&#39;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 &quot;GMT+2&quot;. 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&#39;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">-&gt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/10.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/10.html
new file mode 100644
index 0000000..f134e12
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/10.html
@@ -0,0 +1,384 @@
+
+<!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-wx.c</h1>
+ </div>
+ <div class="wrapper">
+ <div id="menu">
+ <p id="filename"><a href="index.html">Defects:</a> weather-wx.c</p>
+<a href="10.html#line-59"> nullPointerRedundantCheck 59</a><a href="10.html#line-62"> nullPointerRedundantCheck 62</a><a href="10.html#line-64"> nullPointerRedundantCheck 64</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</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-wx.c - Weather server functions (WX Radar)</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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span>
+<a name="line-24"></a><span class="cp">#include</span> <span class="cpf">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</span><span class="cp"></span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class="k">static</span> <span class="kt">void</span>
+<a name="line-28"></a><span class="nf">wx_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-29"></a><span class="p">{</span>
+<a name="line-30"></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-31"></a> <span class="n">GdkPixbufAnimation</span> <span class="o">*</span><span class="n">animation</span><span class="p">;</span>
+<a name="line-32"></a>
+<a name="line-33"></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-34"></a>
+<a name="line-35"></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">-&gt;</span><span class="n">status_code</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-36"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">&quot;Failed to get radar map image: %d %s.</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
+<a name="line-37"></a> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">reason_phrase</span><span class="p">);</span>
+<a name="line-38"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span><span class="p">);</span>
+<a name="line-39"></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-40"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-41"></a> <span class="p">}</span>
+<a name="line-42"></a>
+<a name="line-43"></a> <span class="n">gdk_pixbuf_loader_close</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>
+<a name="line-44"></a> <span class="n">animation</span> <span class="o">=</span> <span class="n">gdk_pixbuf_loader_get_animation</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span><span class="p">);</span>
+<a name="line-45"></a> <span class="k">if</span> <span class="p">(</span><span class="n">animation</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="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">)</span>
+<a name="line-47"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">);</span>
+<a name="line-48"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">radar</span> <span class="o">=</span> <span class="n">animation</span><span class="p">;</span>
+<a name="line-49"></a> <span class="n">g_object_ref</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">);</span>
+<a name="line-50"></a> <span class="p">}</span>
+<a name="line-51"></a> <span class="n">g_object_unref</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span><span class="p">);</span>
+<a name="line-52"></a>
+<a name="line-53"></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-54"></a><span class="p">}</span>
+<a name="line-55"></a>
+<a name="line-56"></a><span class="k">static</span> <span class="kt">void</span>
+<a name="line-57"></a><span class="nf">wx_got_chunk</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">SoupBuffer</span> <span class="o">*</span><span class="n">chunk</span><span class="p">,</span> <span class="n">gpointer</span> <span class="n">data</span><span class="p">)</span>
+<a name="line-58"></a><span class="p">{</span>
+<a name="line-59"></a><span class="hll"> <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><span class="error2">&lt;--- Assignment from '(struct _WeatherInfo*)data'</span>
+</span><a name="line-60"></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-61"></a>
+<a name="line-62"></a><span class="hll"> <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><span class="error2">&lt;--- Assuming that condition 'info!=NULL' is not redundant</span>
+</span><a name="line-63"></a>
+<a name="line-64"></a><span class="hll"> <span class="n">gdk_pixbuf_loader_write</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span><span class="p">,</span> <span class="p">(</span><span class="n">guchar</span> <span class="o">*</span><span class="p">)</span><span class="n">chunk</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">,</span><span class="error2">&lt;--- Null pointer dereference</span>
+</span><a name="line-65"></a> <span class="n">chunk</span><span class="o">-&gt;</span><span class="n">length</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">error</span><span class="p">);</span>
+<a name="line-66"></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-67"></a> <span class="n">g_print</span> <span class="p">(</span><span class="s">&quot;%s </span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">error</span><span class="o">-&gt;</span><span class="n">message</span><span class="p">);</span>
+<a name="line-68"></a> <span class="n">g_error_free</span> <span class="p">(</span><span class="n">error</span><span class="p">);</span>
+<a name="line-69"></a> <span class="p">}</span>
+<a name="line-70"></a><span class="p">}</span>
+<a name="line-71"></a>
+<a name="line-72"></a><span class="cm">/* Get radar map and into newly allocated pixmap */</span>
+<a name="line-73"></a><span class="kt">void</span>
+<a name="line-74"></a><span class="nf">wx_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-75"></a><span class="p">{</span>
+<a name="line-76"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span>
+<a name="line-77"></a> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">;</span>
+<a name="line-78"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span>
+<a name="line-79"></a>
+<a name="line-80"></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-81"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">radar</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-82"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_loader</span> <span class="o">=</span> <span class="n">gdk_pixbuf_loader_new</span> <span class="p">();</span>
+<a name="line-83"></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">location</span><span class="p">;</span>
+<a name="line-84"></a> <span class="n">g_return_if_fail</span> <span class="p">(</span><span class="n">loc</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">);</span>
+<a name="line-85"></a>
+<a name="line-86"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_url</span><span class="p">)</span>
+<a name="line-87"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">radar_url</span><span class="p">);</span>
+<a name="line-88"></a> <span class="k">else</span> <span class="p">{</span>
+<a name="line-89"></a> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;-&#39;</span><span class="p">)</span>
+<a name="line-90"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-91"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">&quot;http://image.weather.com/web/radar/us_%s_closeradar_medium_usen.jpg&quot;</span><span class="p">,</span> <span class="n">loc</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">);</span>
+<a name="line-92"></a> <span class="p">}</span>
+<a name="line-93"></a>
+<a name="line-94"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_message_new</span> <span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span>
+<a name="line-95"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">msg</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-96"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">&quot;Invalid radar URL: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span>
+<a name="line-97"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span>
+<a name="line-98"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-99"></a> <span class="p">}</span>
+<a name="line-100"></a>
+<a name="line-101"></a> <span class="n">g_signal_connect</span> <span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="s">&quot;got-chunk&quot;</span><span class="p">,</span> <span class="n">G_CALLBACK</span> <span class="p">(</span><span class="n">wx_got_chunk</span><span class="p">),</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-102"></a> <span class="n">soup_message_body_set_accumulate</span> <span class="p">(</span><span class="n">msg</span><span class="o">-&gt;</span><span class="n">response_body</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span>
+<a name="line-103"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">wx_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-104"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span>
+<a name="line-105"></a>
+<a name="line-106"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span>
+<a name="line-107"></a><span class="p">}</span>
+</pre></div>
+</td></tr></table>
+ </div> <!-- /.wrapper -->
+ </div>
+ <div id="footer" class="footer">
+ <p>
+ Cppcheck 2.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/11.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/11.html
new file mode 100644
index 0000000..3d73d28
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/11.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="11.html#line-326"> variableScope 326</a><a href="11.html#line-498"> uselessAssignmentPtrArg 498</a><a href="11.html#line-498"> unreadVariable 498</a><a href="11.html#line-700"> variableScope 700</a><a href="11.html#line-700"> variableScope 700</a><a href="11.html#line-718"> unsignedLessThanZero 718</a><a href="11.html#line-1073"> unsignedLessThanZero 1073</a><a href="11.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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;stdio.h&gt;</span><span class="cp"></span>
+<a name="line-24"></a><span class="cp">#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;assert.h&gt;</span><span class="cp"></span>
+<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">&lt;math.h&gt;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&lt;fenv.h&gt;</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">&lt;values.h&gt;</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">&lt;time.h&gt;</span><span class="cp"></span>
+<a name="line-36"></a><span class="cp">#include</span> <span class="cpf">&lt;unistd.h&gt;</span><span class="cp"></span>
+<a name="line-37"></a>
+<a name="line-38"></a><span class="cp">#include</span> <span class="cpf">&lt;gdk-pixbuf/gdk-pixbuf.h&gt;</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">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-42"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</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">&amp;</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">&quot;UTF-8&quot;</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">&amp;</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 &quot;DD-MM-SSH&quot; 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">&#39;-&#39;</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">&#39;-&#39;</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">&quot;%d-%d&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">deg</span><span class="p">,</span> <span class="o">&amp;</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">&quot;%d-%d-%d&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">deg</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">min</span><span class="p">,</span> <span class="o">&amp;</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">&gt;</span> <span class="mi">180</span> <span class="o">||</span> <span class="n">min</span> <span class="o">&gt;=</span> <span class="mi">60</span> <span class="o">||</span> <span class="n">sec</span> <span class="o">&gt;=</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">&#39;W&#39;</span> <span class="o">||</span> <span class="n">dir</span> <span class="o">==</span> <span class="sc">&#39;S&#39;</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">&#39;E&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">dir</span> <span class="o">!=</span> <span class="sc">&#39;N&#39;</span> <span class="o">&amp;&amp;</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">&#39;0&#39;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">zone</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">&quot;------&quot;</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">-&gt;</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">-&gt;</span><span class="n">radar</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">&quot;---&quot;</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">-&gt;</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">&#39;-&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-151"></a> <span class="n">location</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">&quot; &quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">coordinates</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">&quot;---&quot;</span><span class="p">);</span>
+<a name="line-176"></a> <span class="n">location</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">latlon_valid</span> <span class="o">=</span> <span class="p">(</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latitude</span> <span class="o">&lt;</span> <span class="n">DBL_MAX</span> <span class="o">&amp;&amp;</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">longitude</span> <span class="o">&lt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">name</span><span class="p">,</span>
+<a name="line-196"></a> <span class="n">location</span><span class="o">-&gt;</span><span class="n">code</span><span class="p">,</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">zone</span><span class="p">,</span>
+<a name="line-197"></a> <span class="n">location</span><span class="o">-&gt;</span><span class="n">radar</span><span class="p">,</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">coordinates</span><span class="p">,</span>
+<a name="line-198"></a> <span class="n">location</span><span class="o">-&gt;</span><span class="n">country_code</span><span class="p">,</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">tz_hint</span><span class="p">);</span>
+<a name="line-199"></a> <span class="n">clone</span><span class="o">-&gt;</span><span class="n">latitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">latitude</span><span class="p">;</span>
+<a name="line-200"></a> <span class="n">clone</span><span class="o">-&gt;</span><span class="n">longitude</span> <span class="o">=</span> <span class="n">location</span><span class="o">-&gt;</span><span class="n">longitude</span><span class="p">;</span>
+<a name="line-201"></a> <span class="n">clone</span><span class="o">-&gt;</span><span class="n">latlon_valid</span> <span class="o">=</span> <span class="n">location</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</span><span class="n">code</span> <span class="o">||</span> <span class="o">!</span><span class="n">location2</span><span class="o">-&gt;</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">-&gt;</span><span class="n">code</span> <span class="o">==</span> <span class="n">location2</span><span class="o">-&gt;</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">-&gt;</span><span class="n">name</span> <span class="o">||</span> <span class="o">!</span><span class="n">location2</span><span class="o">-&gt;</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">-&gt;</span><span class="n">name</span> <span class="o">==</span> <span class="n">location2</span><span class="o">-&gt;</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">-&gt;</span><span class="n">code</span><span class="p">,</span> <span class="n">location2</span><span class="o">-&gt;</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">&amp;&amp;</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">-&gt;</span><span class="n">name</span><span class="p">,</span> <span class="n">location2</span><span class="o">-&gt;</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">&quot;Variable&quot;</span><span class="p">),</span>
+<a name="line-238"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;North&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;North - NorthEast&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Northeast&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;East - NorthEast&quot;</span><span class="p">),</span>
+<a name="line-239"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;East&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;East - Southeast&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Southeast&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;South - Southeast&quot;</span><span class="p">),</span>
+<a name="line-240"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;South&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;South - Southwest&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Southwest&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;West - Southwest&quot;</span><span class="p">),</span>
+<a name="line-241"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;West&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;West - Northwest&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Northwest&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;North - Northwest&quot;</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">&lt;=</span> <span class="n">WIND_INVALID</span> <span class="o">||</span> <span class="n">wind</span> <span class="o">&gt;=</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">&quot;Invalid&quot;</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">&quot;Clear Sky&quot;</span><span class="p">),</span>
+<a name="line-255"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Broken clouds&quot;</span><span class="p">),</span>
+<a name="line-256"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Scattered clouds&quot;</span><span class="p">),</span>
+<a name="line-257"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Few clouds&quot;</span><span class="p">),</span>
+<a name="line-258"></a> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Overcast&quot;</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">&lt;=</span> <span class="n">SKY_INVALID</span> <span class="o">||</span> <span class="n">sky</span> <span class="o">&gt;=</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">&quot;Invalid&quot;</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 &quot;Blowing snow in vicinity&quot;</span>
+<a name="line-281"></a><span class="cm"> * (VCBLSN), &quot;Thunderstorm in vicinity&quot; (VCTS), etc].</span>
+<a name="line-282"></a><span class="cm"> * Combinations that are not possible are filled in with &quot;??&quot;.</span>
+<a name="line-283"></a><span class="cm"> * Some other exceptions not handled yet, such as &quot;SN BLSN&quot; 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 &quot;blowing&quot; &quot;shallow&quot; &quot;partial&quot;</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">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Thunderstorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Drizzle&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Light drizzle&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Moderate drizzle&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy drizzle&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Freezing drizzle&quot;</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">&quot;Rain&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Light rain&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Moderate rain&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy rain&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Thunderstorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Rain showers&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Freezing rain&quot;</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">&quot;Snow&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Light snow&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Moderate snow&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy snow&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Snowstorm&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Blowing snowfall&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Snow showers&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Drifting snow&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</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">&quot;Snow grains&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Light snow grains&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Moderate snow grains&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy snow grains&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Ice crystals&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Ice crystals&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Ice pellets&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Few ice pellets&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Moderate ice pellets&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy ice pellets&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Ice pellet storm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Showers of ice pellets&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Hail&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Hail&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Hailstorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Hail showers&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Small hail&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Small hail&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Small hailstorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Showers of small hail&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Unknown precipitation&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Mist&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Mist&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Fog&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Fog in the vicinity&quot;</span><span class="p">)</span> <span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Fog&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Shallow fog&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Patches of fog&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Partial fog&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Freezing fog&quot;</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">&quot;Smoke&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Smoke&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Volcanic ash&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Volcanic ash&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Sand&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Sand&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Blowing sand&quot;</span><span class="p">),</span> <span class="s">&quot;&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Drifting sand&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</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">&quot;Haze&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Haze&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span> <span class="p">},</span>
+<a name="line-313"></a> <span class="cm">/* SPRAY */</span> <span class="p">{</span><span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Blowing sprays&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Dust&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Dust&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Blowing dust&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Drifting dust&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</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">&quot;Squall&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Squall&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Sandstorm&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Sandstorm in the vicinity&quot;</span><span class="p">)</span> <span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Sandstorm&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy sandstorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Duststorm&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Duststorm in the vicinity&quot;</span><span class="p">)</span> <span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Duststorm&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Heavy duststorm&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Funnel cloud&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Tornado&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&quot;Dust whirls&quot;</span><span class="p">),</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Dust whirls in the vicinity&quot;</span><span class="p">)</span> <span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="n">N_</span><span class="p">(</span><span class="s">&quot;Dust whirls&quot;</span><span class="p">),</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</span><span class="p">,</span> <span class="s">&quot;??&quot;</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">&lt;--- The scope of the variable 'str' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;str&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&quot;-&quot;</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">&gt;</span> <span class="n">PHENOMENON_INVALID</span> <span class="o">&amp;&amp;</span>
+<a name="line-332"></a> <span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">&lt;</span> <span class="n">PHENOMENON_LAST</span> <span class="o">&amp;&amp;</span>
+<a name="line-333"></a> <span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">&gt;</span> <span class="n">QUALIFIER_INVALID</span> <span class="o">&amp;&amp;</span>
+<a name="line-334"></a> <span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">&lt;</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">&quot;Invalid&quot;</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">&gt;</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">&quot;-&quot;</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">-&gt;</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">-&gt;</span><span class="n">moonValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">valid</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">requests_pending</span><span class="p">)</span>
+<a name="line-361"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">forecast_list</span><span class="p">);</span>
+<a name="line-378"></a> <span class="n">info</span><span class="o">-&gt;</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 &lt;[email protected]&gt; */</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">&gt;</span> <span class="o">-</span><span class="mf">500.0</span> <span class="o">&amp;&amp;</span> <span class="n">dewp</span> <span class="o">&gt;</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">-&gt;</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">-&gt;</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">&lt;=</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">&gt;</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">&gt;=</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">&gt;=</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">-&gt;</span><span class="n">temp</span> <span class="o">&gt;=</span> <span class="o">-</span><span class="mf">500.</span> <span class="o">&amp;&amp;</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">dew</span> <span class="o">&gt;=</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">-&gt;</span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">&amp;&amp;</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">&amp;&amp;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">location</span><span class="p">;</span><span class="error2">&lt;--- Assignment of function parameter has no effect outside the function. Did you forget dereferencing it?</span><span class="error2">&lt;--- 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">-&gt;</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">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-501"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">radar</span><span class="p">);</span>
+<a name="line-507"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">forecast_type</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</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">-&gt;</span><span class="n">temperature_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</span><span class="n">temperature_unit</span><span class="p">;</span>
+<a name="line-522"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">speed_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</span><span class="n">speed_unit</span><span class="p">;</span>
+<a name="line-523"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">pressure_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</span><span class="n">pressure_unit</span><span class="p">;</span>
+<a name="line-524"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">distance_unit</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">radar_url</span> <span class="o">=</span> <span class="n">prefs</span><span class="o">-&gt;</span><span class="n">radar</span> <span class="o">&amp;&amp;</span> <span class="n">prefs</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">session</span><span class="p">);</span>
+<a name="line-577"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-599"></a> <span class="n">clone</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">radar</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">location</span><span class="p">);</span>
+<a name="line-630"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-633"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">radar</span><span class="p">);</span>
+<a name="line-639"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</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">&lt;--- The scope of the variable 'utf8' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;utf8&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&lt;--- The scope of the variable 'timeformat' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;timeformat&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-705"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</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">&amp;</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">update</span><span class="p">,</span> <span class="o">&amp;</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">&quot;%a, %b %d / %H:%M&quot;</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">&quot;???&quot;</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">&amp;</span><span class="n">tm</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="error2">&lt;--- 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">&quot;???&quot;</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">&quot;Unknown observation time&quot;</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">&#39;\0&#39;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-740"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">sky</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-751"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</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">&quot;%.1f </span><span class="se">\302\260</span><span class="s">F&quot;</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">&quot;n/a&quot;</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">&quot;%d </span><span class="se">\302\260</span><span class="s">F&quot;</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">&quot;%.1f </span><span class="se">\302\260</span><span class="s">C&quot;</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">&quot;n/a&quot;</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">&quot;%d </span><span class="se">\302\260</span><span class="s">C&quot;</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">&quot;%.1f K&quot;</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">&quot;n/a&quot;</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">&quot;%d K&quot;</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">&quot;Conversion to illegal temperature unit: %d&quot;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-829"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">temp</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span><span class="p">)</span>
+<a name="line-842"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">temp_min</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">temp_min</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span><span class="p">)</span>
+<a name="line-855"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">temp_max</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">temp_max</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-868"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">dew</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">dew</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-884"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">&lt;</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">&quot;Unknown&quot;</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">&quot;%.f%%&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-902"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">&lt;</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">&quot;Unknown&quot;</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">-&gt;</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">&quot;%0.1f knots&quot;</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">&quot;%.1f mph&quot;</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">&quot;%.1f km/h&quot;</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">&quot;%.1f m/s&quot;</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">&quot;Beaufort force %.1f&quot;</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">&quot;Conversion to illegal speed unit: %d&quot;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-958"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">windspeed</span> <span class="o">&lt;</span> <span class="mf">0.0</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">wind</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</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">&quot;Calm&quot;</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">&#39;\0&#39;</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 &#39;wind direction&#39; / &#39;wind speed&#39; */</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">&quot;%s / %s&quot;</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">-&gt;</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">-&gt;</span><span class="n">windspeed</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-981"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">pressure</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</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">&quot;%.2f inHg&quot;</span><span class="p">),</span> <span class="n">info</span><span class="o">-&gt;</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">&quot;%.1f mmHg&quot;</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">-&gt;</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">&quot;%.2f kPa&quot;</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">-&gt;</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">&quot;%.2f hPa&quot;</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">-&gt;</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">&quot;%.2f mb&quot;</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">-&gt;</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">&quot;%.3f atm&quot;</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">-&gt;</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">&quot;Conversion to illegal pressure unit: %d&quot;</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">&quot;Unknown&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-1029"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">visibility</span> <span class="o">&lt;</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">&quot;Unknown&quot;</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">-&gt;</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">&quot;%.1f miles&quot;</span><span class="p">),</span> <span class="n">info</span><span class="o">-&gt;</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">&quot;%.1f km&quot;</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">-&gt;</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">&quot;%.0fm&quot;</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">-&gt;</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">&quot;Conversion to illegal visibility unit: %d&quot;</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">&quot;Unknown&quot;</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">&amp;&amp;</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latlon_valid</span><span class="p">)</span>
+<a name="line-1066"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-1068"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">&quot;-&quot;</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">&amp;</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunrise</span><span class="p">,</span> <span class="o">&amp;</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">&quot;%H:%M&quot;</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">tm</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span><span class="error2">&lt;--- Unsigned less than zero</span>
+</span><a name="line-1074"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">&amp;&amp;</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latlon_valid</span><span class="p">)</span>
+<a name="line-1087"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</span><span class="n">valid</span><span class="p">)</span>
+<a name="line-1089"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">&quot;-&quot;</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">&amp;</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunset</span><span class="p">,</span> <span class="o">&amp;</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">&quot;%H:%M&quot;</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">tm</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span><span class="error2">&lt;--- Unsigned less than zero</span>
+</span><a name="line-1095"></a> <span class="k">return</span> <span class="s">&quot;-&quot;</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">-&gt;</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 &#39;info&#39; object thus is alive as long</span>
+<a name="line-1110"></a><span class="cm"> * as the &#39;info&#39;. 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 &#39;update&#39; 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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">temp</span> <span class="o">&lt;</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">&quot;--&quot;</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">-&gt;</span><span class="n">temp</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">&quot;Retrieval failed&quot;</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">&quot;-&quot;</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">&quot;%s: %s&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;&amp;</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">&quot;weather-storm&quot;</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">&quot;weather-showers&quot;</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">&quot;weather-snow&quot;</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">&quot;weather-storm&quot;</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">&quot;weather-fog&quot;</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">-&gt;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">||</span> <span class="p">(</span><span class="n">current_time</span> <span class="o">&gt;=</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">sunrise</span><span class="p">)</span> <span class="p">)</span> <span class="o">&amp;&amp;</span>
+<a name="line-1234"></a> <span class="p">(</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunsetValid</span> <span class="o">||</span> <span class="p">(</span><span class="n">current_time</span> <span class="o">&lt;</span> <span class="n">info</span><span class="o">-&gt;</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">&quot;weather-clear&quot;</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">&quot;weather-clear-night&quot;</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">&quot;weather-few-clouds&quot;</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">&quot;weather-few-clouds-night&quot;</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">&quot;weather-overcast&quot;</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&#39;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">-&gt;</span><span class="n">moonValid</span> <span class="o">&amp;&amp;</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">&amp;</span><span class="n">moonPhase</span><span class="p">,</span> <span class="o">&amp;</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">&gt;</span> <span class="mi">0</span> <span class="o">&amp;&amp;</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">-&gt;</span><span class="n">latitude</span><span class="p">)</span>
+<a name="line-1275"></a> <span class="o">&lt;</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&#39;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">&amp;</span> <span class="mh">0x1</span><span class="p">))</span> <span class="o">&amp;&amp;</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">&quot;-%03d&quot;</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">&lt;</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">&lt;</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">&lt;</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">&lt;</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">-&gt;</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">-&gt;</span><span class="n">sky</span> <span class="o">&lt;=</span> <span class="n">SKY_INVALID</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">sky</span> <span class="o">&gt;=</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">&gt;</span> <span class="n">PHENOMENON_INVALID</span> <span class="o">&amp;&amp;</span>
+<a name="line-1478"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">&lt;</span> <span class="n">PHENOMENON_LAST</span> <span class="o">&amp;&amp;</span>
+<a name="line-1479"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">&gt;</span> <span class="n">QUALIFIER_INVALID</span> <span class="o">&amp;&amp;</span>
+<a name="line-1480"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">cond</span><span class="p">.</span><span class="n">qualifier</span> <span class="o">&lt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">||</span> <span class="o">!</span><span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">windspeed</span> <span class="o">&lt;</span> <span class="mf">0.0</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">wind</span> <span class="o">&lt;=</span> <span class="n">WIND_INVALID</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">wind</span> <span class="o">&gt;=</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/2.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/2.html
new file mode 100644
index 0000000..02a2882
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&quot;weather-priv.h&quot;</span><span class="cp"></span>
+<a name="line-27"></a>
+<a name="line-28"></a><span class="cp">#include</span> <span class="cpf">&quot;parser.h&quot;</span><span class="cp"></span>
+<a name="line-29"></a>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;libxml/xmlreader.h&gt;</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&#39;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">-&gt;</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 &quot;node&quot; 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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &quot;xml:lang&quot; 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">&lt;--- The scope of the variable 'next_tagname' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;next_tagname&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">-&gt;</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&#39;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">-&gt;</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">&quot;C&quot;</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 &quot;node&quot; 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">-&gt;</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">-&gt;</span><span class="n">locales</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&amp;&amp;</span> <span class="n">i</span> <span class="o">&lt;</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">&lt;--- Array index 'i' is used before limits check. <span class="marker">[+]</span></span><div class="content">Defensive programming: The variable &apos;i&apos; 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 &apos;(a[i] &amp;&amp; i &lt; 10)&apos; to &apos;(i &lt; 10 &amp;&amp; a[i])&apos;. 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">-&gt;</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&#39;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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;&amp;</span>
+<a name="line-145"></a> <span class="n">xmlTextReaderNodeType</span> <span class="p">(</span><span class="n">parser</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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&#39;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">-&gt;</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">&quot;%s/Locations.%s.xml&quot;</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">-&gt;</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">&quot;%s/Locations.%s.xml.gz&quot;</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">-&gt;</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">&quot;Locations.xml&quot;</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">&amp;&amp;</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">&quot;Locations.xml.gz&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&amp;&amp;</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">&quot;mateweather&quot;</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">-&gt;</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">&quot;format&quot;</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">&amp;&amp;</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">&quot;1.0&quot;</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">&amp;</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">-&gt;</span><span class="n">year_start</span> <span class="o">=</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&amp;</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">-&gt;</span><span class="n">year_end</span> <span class="o">=</span> <span class="n">mktime</span> <span class="p">(</span><span class="o">&amp;</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">-&gt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/3.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/3.html
new file mode 100644
index 0000000..2bd6a15
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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-20"> knownConditionTrueFalse 20</a><a href="3.html#line-29"> variableScope 29</a><a href="3.html#line-36"> knownConditionTrueFalse 36</a><a href="3.html#line-40"> knownConditionTrueFalse 40</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">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-7"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-8"></a><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt;</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">&quot;weather-priv.h&quot;</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="hll"> <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><span class="error2">&lt;--- Assignment 'filename=NULL', assigned value is 0</span>
+</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">&quot;file&quot;</span><span class="p">,</span> <span class="sc">&#39;f&#39;</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">&amp;</span><span class="n">filename</span><span class="p">,</span>
+<a name="line-23"></a> <span class="s">&quot;file constaining metar observations&quot;</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">&lt;--- The scope of the variable 'len' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;len&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&quot;- test libmateweather metar parser&quot;</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">&amp;</span><span class="n">argc</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">argv</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">error</span><span class="p">);</span>
+<a name="line-35"></a>
+<a name="line-36"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span><span class="error2">&lt;--- Assuming condition is false</span>
+</span><a name="line-37"></a> <span class="n">perror</span> <span class="p">(</span><span class="n">error</span><span class="o">-&gt;</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">-&gt;</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="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="p">{</span><span class="error2">&lt;--- Condition 'filename' is always false</span>
+</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">&quot;r&quot;</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">&quot;fopen&quot;</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">&quot;Enter a METAR string...</span><span class="se">\n</span><span class="s">&quot;</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">&#39;\n&#39;</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">&#39;\0&#39;</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">&quot;</span><span class="se">\n</span><span class="s">%s</span><span class="se">\n</span><span class="s">&quot;</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">&amp;</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">&amp;</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">&amp;</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">&quot;Returned info:</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
+<a name="line-62"></a> <span class="n">printf</span> <span class="p">(</span><span class="s">&quot; update: %s&quot;</span><span class="p">,</span> <span class="n">ctime</span> <span class="p">(</span><span class="o">&amp;</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">&quot; sky: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_sky</span> <span class="p">(</span><span class="o">&amp;</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">&quot; cond: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_conditions</span> <span class="p">(</span><span class="o">&amp;</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">&quot; temp: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_temp</span> <span class="p">(</span><span class="o">&amp;</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">&quot; dewp: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_dew</span> <span class="p">(</span><span class="o">&amp;</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">&quot; wind: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_wind</span> <span class="p">(</span><span class="o">&amp;</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">&quot; pressure: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_pressure</span> <span class="p">(</span><span class="o">&amp;</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">&quot; vis: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">weather_info_get_visibility</span> <span class="p">(</span><span class="o">&amp;</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&#39;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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/4.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/4.html
new file mode 100644
index 0000000..5f42729
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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-18"> knownConditionTrueFalse 18</a><a href="4.html#line-58"> knownConditionTrueFalse 58</a><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">&lt;glib.h&gt;</span><span class="cp"></span>
+<a name="line-4"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-5"></a><span class="cp">#include</span> <span class="cpf">&lt;time.h&gt;</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">&quot;weather-priv.h&quot;</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="hll"> <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><span class="error2">&lt;--- Assignment 'gtime=NULL', assigned value is 0</span>
+</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">&quot;latitude&quot;</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">&amp;</span><span class="n">latitude</span><span class="p">,</span>
+<a name="line-25"></a> <span class="s">&quot;observer&#39;s latitude in degrees north&quot;</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">&quot;longitude&quot;</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">&amp;</span><span class="n">longitude</span><span class="p">,</span>
+<a name="line-27"></a> <span class="s">&quot;observer&#39;s longitude in degrees east&quot;</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">&quot;time&quot;</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">&amp;</span><span class="n">gtime</span><span class="p">,</span>
+<a name="line-29"></a> <span class="s">&quot;time in seconds from Unix epoch&quot;</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">&amp;</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">&amp;</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">&quot;- test libmateweather sun/moon calculations&quot;</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">&amp;</span><span class="n">argc</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">argv</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">-&gt;</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">&lt;</span> <span class="o">-</span><span class="mf">90.</span> <span class="o">||</span> <span class="n">latitude</span> <span class="o">&gt;</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">&quot;invalid latitude: should be [-90 .. 90]&quot;</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">&lt;</span> <span class="o">-</span><span class="mf">180.</span> <span class="o">||</span> <span class="n">longitude</span> <span class="o">&gt;</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">&quot;invalid longitude: should be [-180 .. 180]&quot;</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">&amp;</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="hll"> <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><span class="error2">&lt;--- Condition 'gtime!=NULL' is always false</span>
+</span><a name="line-59"></a> <span class="c1">// printf(&quot; gtime=%s\n&quot;, gtime);</span>
+<a name="line-60"></a> <span class="n">g_date_set_parse</span><span class="p">(</span><span class="o">&amp;</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">&amp;</span><span class="n">gdate</span><span class="p">,</span> <span class="o">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&quot; Latitude %7.3f %c Longitude %7.3f %c for %s All times UTC</span><span class="se">\n</span><span class="s">&quot;</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">&gt;=</span> <span class="mf">0.</span> <span class="o">?</span> <span class="sc">&#39;N&#39;</span> <span class="o">:</span> <span class="sc">&#39;S&#39;</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">&gt;=</span> <span class="mf">0.</span> <span class="o">?</span> <span class="sc">&#39;E&#39;</span> <span class="o">:</span> <span class="sc">&#39;W&#39;</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">&amp;</span><span class="n">info</span><span class="p">.</span><span class="n">update</span><span class="p">)));</span><span class="error2">&lt;--- 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">&quot;sunrise: %s&quot;</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">&amp;</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">&quot;(invalid)</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">));</span>
+<a name="line-76"></a> <span class="n">printf</span><span class="p">(</span><span class="s">&quot;sunset: %s&quot;</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">&amp;</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">&quot;(invalid)</span><span class="se">\n</span><span class="s">&quot;</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">&quot;moonphase: %g</span><span class="se">\n</span><span class="s">&quot;</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">&quot;moonlat: %g</span><span class="se">\n</span><span class="s">&quot;</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">&amp;</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">&quot; New: %s&quot;</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">&amp;</span><span class="n">phases</span><span class="p">[</span><span class="mi">0</span><span class="p">])));</span><span class="error2">&lt;--- 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">&quot; 1stQ: %s&quot;</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">&amp;</span><span class="n">phases</span><span class="p">[</span><span class="mi">1</span><span class="p">])));</span><span class="error2">&lt;--- 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">&quot; Full: %s&quot;</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">&amp;</span><span class="n">phases</span><span class="p">[</span><span class="mi">2</span><span class="p">])));</span><span class="error2">&lt;--- 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">&quot; 3rdQ: %s&quot;</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">&amp;</span><span class="n">phases</span><span class="p">[</span><span class="mi">3</span><span class="p">])));</span><span class="error2">&lt;--- 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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/5.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/5.html
new file mode 100644
index 0000000..04f87bd
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;string.h&gt;</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">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</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">&lt;--- The scope of the variable 'rp' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;rp&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">-&gt;</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">&quot;Failed to get BOM forecast data: %d %s.</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
+<a name="line-39"></a> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-&gt;</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">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">,</span> <span class="s">&quot;Forecast for the rest&quot;</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">&quot;The next routine forecast will be issued&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</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">&quot;%s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">&quot;http://www.bom.gov.au/fwo/%s.txt&quot;</span><span class="p">,</span>
+<a name="line-70"></a> <span class="n">loc</span><span class="o">-&gt;</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">&quot;GET&quot;</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">-&gt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/6.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/6.html
new file mode 100644
index 0000000..c485435
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/6.html
@@ -0,0 +1,1122 @@
+
+<!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-iwin.c</h1>
+ </div>
+ <div class="wrapper">
+ <div id="menu">
+ <p id="filename"><a href="index.html">Defects:</a> weather-iwin.c</p>
+<a href="6.html#line-414"> nullPointerRedundantCheck 414</a><a href="6.html#line-415"> nullPointerRedundantCheck 415</a><a href="6.html#line-417"> nullPointerRedundantCheck 417</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</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-iwin.c - US National Weather Service IWIN 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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-24"></a><span class="cp">#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-26"></a>
+<a name="line-27"></a><span class="cp">#include</span> <span class="cpf">&lt;libxml/parser.h&gt;</span><span class="cp"></span>
+<a name="line-28"></a>
+<a name="line-29"></a><span class="cp">#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE</span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-31"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</span><span class="cp"></span>
+<a name="line-32"></a>
+<a name="line-33"></a><span class="cm">/**</span>
+<a name="line-34"></a><span class="cm"> * Humans don&#39;t deal well with .MONDAY...SUNNY AND BLAH BLAH.TUESDAY...THEN THIS AND THAT.WEDNESDAY...RAINY BLAH BLAH.</span>
+<a name="line-35"></a><span class="cm"> * This function makes it easier to read.</span>
+<a name="line-36"></a><span class="cm"> */</span>
+<a name="line-37"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span>
+<a name="line-38"></a><span class="nf">formatWeatherMsg</span> <span class="p">(</span><span class="n">gchar</span> <span class="o">*</span><span class="n">forecast</span><span class="p">)</span>
+<a name="line-39"></a><span class="p">{</span>
+<a name="line-40"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">ptr</span> <span class="o">=</span> <span class="n">forecast</span><span class="p">;</span>
+<a name="line-41"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">startLine</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-42"></a>
+<a name="line-43"></a> <span class="k">while</span> <span class="p">(</span><span class="mi">0</span> <span class="o">!=</span> <span class="o">*</span><span class="n">ptr</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-44"></a> <span class="k">if</span> <span class="p">(</span><span class="n">ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;\n&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">ptr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;.&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-45"></a> <span class="cm">/* This removes the preamble by shifting the relevant data</span>
+<a name="line-46"></a><span class="cm"> * down to the start of the buffer. */</span>
+<a name="line-47"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">NULL</span> <span class="o">==</span> <span class="n">startLine</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-48"></a> <span class="n">memmove</span> <span class="p">(</span><span class="n">forecast</span><span class="p">,</span> <span class="n">ptr</span><span class="p">,</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">ptr</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+<a name="line-49"></a> <span class="n">ptr</span> <span class="o">=</span> <span class="n">forecast</span><span class="p">;</span>
+<a name="line-50"></a> <span class="n">ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39; &#39;</span><span class="p">;</span>
+<a name="line-51"></a> <span class="p">}</span>
+<a name="line-52"></a> <span class="n">ptr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-53"></a> <span class="n">ptr</span> <span class="o">+=</span> <span class="mi">2</span><span class="p">;</span>
+<a name="line-54"></a> <span class="n">startLine</span> <span class="o">=</span> <span class="n">ptr</span><span class="p">;</span>
+<a name="line-55"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;.&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">ptr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;.&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">ptr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;.&#39;</span> <span class="o">&amp;&amp;</span> <span class="nb">NULL</span> <span class="o">!=</span> <span class="n">startLine</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-56"></a> <span class="n">memmove</span> <span class="p">(</span><span class="n">startLine</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="n">startLine</span><span class="p">,</span> <span class="p">(</span><span class="n">ptr</span> <span class="o">-</span> <span class="n">startLine</span><span class="p">)</span> <span class="o">*</span> <span class="k">sizeof</span> <span class="p">(</span><span class="n">gchar</span><span class="p">));</span>
+<a name="line-57"></a> <span class="n">startLine</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39; &#39;</span><span class="p">;</span>
+<a name="line-58"></a> <span class="n">startLine</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-59"></a> <span class="n">ptr</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-60"></a>
+<a name="line-61"></a> <span class="n">ptr</span> <span class="o">+=</span> <span class="mi">3</span><span class="p">;</span>
+<a name="line-62"></a>
+<a name="line-63"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;$&#39;</span> <span class="o">&amp;&amp;</span> <span class="n">ptr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;$&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-64"></a> <span class="n">ptr</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">ptr</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39; &#39;</span><span class="p">;</span>
+<a name="line-65"></a>
+<a name="line-66"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+<a name="line-67"></a> <span class="n">ptr</span><span class="o">++</span><span class="p">;</span>
+<a name="line-68"></a> <span class="p">}</span>
+<a name="line-69"></a> <span class="p">}</span>
+<a name="line-70"></a>
+<a name="line-71"></a> <span class="k">return</span> <span class="n">forecast</span><span class="p">;</span>
+<a name="line-72"></a><span class="p">}</span>
+<a name="line-73"></a>
+<a name="line-74"></a><span class="k">static</span> <span class="n">gboolean</span>
+<a name="line-75"></a><span class="nf">hasAttr</span> <span class="p">(</span><span class="n">xmlNode</span> <span class="o">*</span><span class="n">node</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">attr_name</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">attr_value</span><span class="p">)</span>
+<a name="line-76"></a><span class="p">{</span>
+<a name="line-77"></a> <span class="n">xmlChar</span> <span class="o">*</span><span class="n">attr</span><span class="p">;</span>
+<a name="line-78"></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-79"></a>
+<a name="line-80"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">node</span><span class="p">)</span>
+<a name="line-81"></a> <span class="k">return</span> <span class="n">res</span><span class="p">;</span>
+<a name="line-82"></a>
+<a name="line-83"></a> <span class="n">attr</span> <span class="o">=</span> <span class="n">xmlGetProp</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">xmlChar</span> <span class="o">*</span><span class="p">)</span> <span class="n">attr_name</span><span class="p">);</span>
+<a name="line-84"></a>
+<a name="line-85"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">attr</span><span class="p">)</span>
+<a name="line-86"></a> <span class="k">return</span> <span class="n">res</span><span class="p">;</span>
+<a name="line-87"></a>
+<a name="line-88"></a> <span class="n">res</span> <span class="o">=</span> <span class="n">g_str_equal</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">attr</span><span class="p">,</span> <span class="n">attr_value</span><span class="p">);</span>
+<a name="line-89"></a>
+<a name="line-90"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">attr</span><span class="p">);</span>
+<a name="line-91"></a>
+<a name="line-92"></a> <span class="k">return</span> <span class="n">res</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="n">GSList</span> <span class="o">*</span>
+<a name="line-96"></a><span class="nf">parseForecastXml</span> <span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">buff</span><span class="p">,</span> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">master_info</span><span class="p">)</span>
+<a name="line-97"></a><span class="p">{</span>
+<a name="line-98"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">res</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-99"></a> <span class="n">xmlDocPtr</span> <span class="n">doc</span><span class="p">;</span>
+<a name="line-100"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">root</span><span class="p">,</span> <span class="o">*</span><span class="n">node</span><span class="p">;</span>
+<a name="line-101"></a>
+<a name="line-102"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">master_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-103"></a>
+<a name="line-104"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">buff</span> <span class="o">||</span> <span class="o">!*</span><span class="n">buff</span><span class="p">)</span>
+<a name="line-105"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-106"></a>
+<a name="line-107"></a> <span class="cp">#define XC (const xmlChar *)</span>
+<a name="line-108"></a> <span class="cp">#define isElem(_node,_name) g_str_equal ((const char *)_node-&gt;name, _name)</span>
+<a name="line-109"></a>
+<a name="line-110"></a> <span class="n">doc</span> <span class="o">=</span> <span class="n">xmlParseMemory</span> <span class="p">(</span><span class="n">buff</span><span class="p">,</span> <span class="n">strlen</span> <span class="p">(</span><span class="n">buff</span><span class="p">));</span>
+<a name="line-111"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">doc</span><span class="p">)</span>
+<a name="line-112"></a> <span class="k">return</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-113"></a>
+<a name="line-114"></a> <span class="cm">/* Description at http://www.weather.gov/mdl/XML/Design/MDL_XML_Design.pdf */</span>
+<a name="line-115"></a> <span class="n">root</span> <span class="o">=</span> <span class="n">xmlDocGetRootElement</span> <span class="p">(</span><span class="n">doc</span><span class="p">);</span>
+<a name="line-116"></a> <span class="k">for</span> <span class="p">(</span><span class="n">node</span> <span class="o">=</span> <span class="n">root</span><span class="o">-&gt;</span><span class="n">xmlChildrenNode</span><span class="p">;</span> <span class="n">node</span><span class="p">;</span> <span class="n">node</span> <span class="o">=</span> <span class="n">node</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-117"></a> <span class="k">if</span> <span class="p">(</span><span class="n">node</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">==</span> <span class="nb">NULL</span> <span class="o">||</span> <span class="n">node</span><span class="o">-&gt;</span><span class="n">type</span> <span class="o">!=</span> <span class="n">XML_ELEMENT_NODE</span><span class="p">)</span>
+<a name="line-118"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-119"></a>
+<a name="line-120"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isElem</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="s">&quot;data&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-121"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">n</span><span class="p">;</span>
+<a name="line-122"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">time_layout</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-123"></a> <span class="kt">time_t</span> <span class="n">update_times</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
+<a name="line-124"></a>
+<a name="line-125"></a> <span class="k">for</span> <span class="p">(</span><span class="n">n</span> <span class="o">=</span> <span class="n">node</span><span class="o">-&gt;</span><span class="n">children</span><span class="p">;</span> <span class="n">n</span><span class="p">;</span> <span class="n">n</span> <span class="o">=</span> <span class="n">n</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-126"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">n</span><span class="o">-&gt;</span><span class="n">name</span><span class="p">)</span>
+<a name="line-127"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-128"></a>
+<a name="line-129"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isElem</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="s">&quot;time-layout&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-130"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">time_layout</span> <span class="o">&amp;&amp;</span> <span class="n">hasAttr</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="s">&quot;summarization&quot;</span><span class="p">,</span> <span class="s">&quot;24hourly&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-131"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">c</span><span class="p">;</span>
+<a name="line-132"></a> <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-133"></a>
+<a name="line-134"></a> <span class="k">for</span> <span class="p">(</span><span class="n">c</span> <span class="o">=</span> <span class="n">n</span><span class="o">-&gt;</span><span class="n">children</span><span class="p">;</span> <span class="n">c</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">count</span> <span class="o">&lt;</span> <span class="mi">7</span> <span class="o">||</span> <span class="o">!</span><span class="n">time_layout</span><span class="p">);</span> <span class="n">c</span> <span class="o">=</span> <span class="n">c</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-135"></a> <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="n">time_layout</span> <span class="o">&amp;&amp;</span> <span class="n">isElem</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s">&quot;layout-key&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-136"></a> <span class="n">xmlChar</span> <span class="o">*</span><span class="n">val</span> <span class="o">=</span> <span class="n">xmlNodeGetContent</span> <span class="p">(</span><span class="n">c</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">val</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-139"></a> <span class="n">time_layout</span> <span class="o">=</span> <span class="n">g_strdup</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">val</span><span class="p">);</span>
+<a name="line-140"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">val</span><span class="p">);</span>
+<a name="line-141"></a> <span class="p">}</span>
+<a name="line-142"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">&amp;&amp;</span> <span class="n">isElem</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s">&quot;start-valid-time&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-143"></a> <span class="n">xmlChar</span> <span class="o">*</span><span class="n">val</span> <span class="o">=</span> <span class="n">xmlNodeGetContent</span> <span class="p">(</span><span class="n">c</span><span class="p">);</span>
+<a name="line-144"></a>
+<a name="line-145"></a> <span class="k">if</span> <span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-146"></a> <span class="n">GDateTime</span> <span class="o">*</span><span class="n">dt</span> <span class="o">=</span> <span class="n">g_date_time_new_from_iso8601</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">val</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span>
+<a name="line-147"></a> <span class="k">if</span> <span class="p">(</span><span class="n">dt</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-148"></a> <span class="n">update_times</span><span class="p">[</span><span class="n">count</span><span class="p">]</span> <span class="o">=</span> <span class="n">g_date_time_to_unix</span> <span class="p">(</span><span class="n">dt</span><span class="p">);</span>
+<a name="line-149"></a> <span class="n">g_date_time_unref</span> <span class="p">(</span><span class="n">dt</span><span class="p">);</span>
+<a name="line-150"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+<a name="line-151"></a> <span class="n">update_times</span><span class="p">[</span><span class="n">count</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-152"></a> <span class="p">}</span>
+<a name="line-153"></a>
+<a name="line-154"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-155"></a>
+<a name="line-156"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">val</span><span class="p">);</span>
+<a name="line-157"></a> <span class="p">}</span>
+<a name="line-158"></a> <span class="p">}</span>
+<a name="line-159"></a> <span class="p">}</span>
+<a name="line-160"></a>
+<a name="line-161"></a> <span class="k">if</span> <span class="p">(</span><span class="n">count</span> <span class="o">!=</span> <span class="mi">7</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-162"></a> <span class="cm">/* There can be more than one time-layout element, the other</span>
+<a name="line-163"></a><span class="cm"> with only few children, which is not the one to use. */</span>
+<a name="line-164"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">time_layout</span><span class="p">);</span>
+<a name="line-165"></a> <span class="n">time_layout</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-166"></a> <span class="p">}</span>
+<a name="line-167"></a> <span class="p">}</span>
+<a name="line-168"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">isElem</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="s">&quot;parameters&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-169"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span>
+<a name="line-170"></a>
+<a name="line-171"></a> <span class="cm">/* time-layout should be always before parameters */</span>
+<a name="line-172"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">time_layout</span><span class="p">)</span>
+<a name="line-173"></a> <span class="k">break</span><span class="p">;</span>
+<a name="line-174"></a>
+<a name="line-175"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">res</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-176"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
+<a name="line-177"></a>
+<a name="line-178"></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">&lt;</span> <span class="mi">7</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-179"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">nfo</span> <span class="o">=</span> <span class="n">weather_info_clone</span> <span class="p">(</span><span class="n">master_info</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">nfo</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-182"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">valid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span>
+<a name="line-183"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">forecast_type</span> <span class="o">=</span> <span class="n">FORECAST_ZONE</span><span class="p">;</span>
+<a name="line-184"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">update</span> <span class="o">=</span> <span class="n">update_times</span> <span class="p">[</span><span class="n">i</span><span class="p">];</span>
+<a name="line-185"></a> <span class="n">nfo</span><span class="o">-&gt;</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-186"></a> <span class="n">nfo</span><span class="o">-&gt;</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-187"></a> <span class="n">nfo</span><span class="o">-&gt;</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-188"></a> <span class="n">nfo</span><span class="o">-&gt;</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-189"></a> <span class="n">nfo</span><span class="o">-&gt;</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-190"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span>
+<a name="line-191"></a> <span class="n">nfo</span><span class="o">-&gt;</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-192"></a> <span class="n">nfo</span><span class="o">-&gt;</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-193"></a> <span class="n">nfo</span><span class="o">-&gt;</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-194"></a> <span class="n">nfo</span><span class="o">-&gt;</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-195"></a> <span class="n">nfo</span><span class="o">-&gt;</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-196"></a> <span class="n">nfo</span><span class="o">-&gt;</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-197"></a> <span class="n">nfo</span><span class="o">-&gt;</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-198"></a> <span class="n">nfo</span><span class="o">-&gt;</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-199"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span>
+<a name="line-200"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span>
+<a name="line-201"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">sunrise</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-202"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">sunset</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-203"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-204"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">forecast</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-205"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">session</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-206"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">requests_pending</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-207"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">finish_cb</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-208"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">cb_data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-209"></a> <span class="n">res</span> <span class="o">=</span> <span class="n">g_slist_append</span> <span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">nfo</span><span class="p">);</span>
+<a name="line-210"></a> <span class="p">}</span>
+<a name="line-211"></a> <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="k">for</span> <span class="p">(</span><span class="n">p</span> <span class="o">=</span> <span class="n">n</span><span class="o">-&gt;</span><span class="n">children</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">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-215"></a> <span class="k">if</span> <span class="p">(</span><span class="n">p</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">&amp;&amp;</span> <span class="n">isElem</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;temperature&quot;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">hasAttr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;time-layout&quot;</span><span class="p">,</span> <span class="n">time_layout</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-216"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">c</span><span class="p">;</span>
+<a name="line-217"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">at</span> <span class="o">=</span> <span class="n">res</span><span class="p">;</span>
+<a name="line-218"></a> <span class="n">gboolean</span> <span class="n">is_max</span> <span class="o">=</span> <span class="n">hasAttr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="s">&quot;maximum&quot;</span><span class="p">);</span>
+<a name="line-219"></a>
+<a name="line-220"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">is_max</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="n">hasAttr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;type&quot;</span><span class="p">,</span> <span class="s">&quot;minimum&quot;</span><span class="p">))</span>
+<a name="line-221"></a> <span class="k">break</span><span class="p">;</span>
+<a name="line-222"></a>
+<a name="line-223"></a> <span class="k">for</span> <span class="p">(</span><span class="n">c</span> <span class="o">=</span> <span class="n">p</span><span class="o">-&gt;</span><span class="n">children</span><span class="p">;</span> <span class="n">c</span> <span class="o">&amp;&amp;</span> <span class="n">at</span><span class="p">;</span> <span class="n">c</span> <span class="o">=</span> <span class="n">c</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-224"></a> <span class="k">if</span> <span class="p">(</span><span class="n">isElem</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s">&quot;value&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-225"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">nfo</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">at</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">;</span>
+<a name="line-226"></a> <span class="n">xmlChar</span> <span class="o">*</span><span class="n">val</span> <span class="o">=</span> <span class="n">xmlNodeGetContent</span> <span class="p">(</span><span class="n">c</span><span class="p">);</span>
+<a name="line-227"></a>
+<a name="line-228"></a> <span class="cm">/* can pass some values as &lt;value xsi:nil=&quot;true&quot;/&gt; */</span>
+<a name="line-229"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">val</span> <span class="o">||</span> <span class="o">!*</span><span class="n">val</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-230"></a> <span class="k">if</span> <span class="p">(</span><span class="n">is_max</span><span class="p">)</span>
+<a name="line-231"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_max</span> <span class="o">=</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_min</span><span class="p">;</span>
+<a name="line-232"></a> <span class="k">else</span>
+<a name="line-233"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_min</span> <span class="o">=</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_max</span><span class="p">;</span>
+<a name="line-234"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+<a name="line-235"></a> <span class="k">if</span> <span class="p">(</span><span class="n">is_max</span><span class="p">)</span>
+<a name="line-236"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_max</span> <span class="o">=</span> <span class="n">atof</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">val</span><span class="p">);</span>
+<a name="line-237"></a> <span class="k">else</span>
+<a name="line-238"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_min</span> <span class="o">=</span> <span class="n">atof</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">val</span><span class="p">);</span>
+<a name="line-239"></a> <span class="p">}</span>
+<a name="line-240"></a>
+<a name="line-241"></a> <span class="k">if</span> <span class="p">(</span><span class="n">val</span><span class="p">)</span>
+<a name="line-242"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">val</span><span class="p">);</span>
+<a name="line-243"></a>
+<a name="line-244"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span> <span class="o">=</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span> <span class="o">||</span> <span class="p">(</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_max</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mf">999.0</span> <span class="o">&amp;&amp;</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_min</span> <span class="o">&gt;</span> <span class="o">-</span><span class="mf">999.0</span><span class="p">);</span>
+<a name="line-245"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">valid</span> <span class="o">=</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span><span class="p">;</span>
+<a name="line-246"></a>
+<a name="line-247"></a> <span class="n">at</span> <span class="o">=</span> <span class="n">at</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">;</span>
+<a name="line-248"></a> <span class="p">}</span>
+<a name="line-249"></a> <span class="p">}</span>
+<a name="line-250"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">p</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">&amp;&amp;</span> <span class="n">isElem</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;weather&quot;</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="n">hasAttr</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;time-layout&quot;</span><span class="p">,</span> <span class="n">time_layout</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-251"></a> <span class="n">xmlNode</span> <span class="o">*</span><span class="n">c</span><span class="p">;</span>
+<a name="line-252"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">at</span> <span class="o">=</span> <span class="n">res</span><span class="p">;</span>
+<a name="line-253"></a>
+<a name="line-254"></a> <span class="k">for</span> <span class="p">(</span><span class="n">c</span> <span class="o">=</span> <span class="n">p</span><span class="o">-&gt;</span><span class="n">children</span><span class="p">;</span> <span class="n">c</span> <span class="o">&amp;&amp;</span> <span class="n">at</span><span class="p">;</span> <span class="n">c</span> <span class="o">=</span> <span class="n">c</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-255"></a> <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">-&gt;</span><span class="n">name</span> <span class="o">&amp;&amp;</span> <span class="n">isElem</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s">&quot;weather-conditions&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-256"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">nfo</span> <span class="o">=</span> <span class="n">at</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">;</span>
+<a name="line-257"></a> <span class="n">xmlChar</span> <span class="o">*</span><span class="n">val</span> <span class="o">=</span> <span class="n">xmlGetProp</span> <span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">XC</span> <span class="s">&quot;weather-summary&quot;</span><span class="p">);</span>
+<a name="line-258"></a>
+<a name="line-259"></a> <span class="k">if</span> <span class="p">(</span><span class="n">val</span> <span class="o">&amp;&amp;</span> <span class="n">nfo</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-260"></a> <span class="cm">/* Checking from top to bottom, if &#39;value&#39; contains &#39;name&#39;, then that win,</span>
+<a name="line-261"></a><span class="cm"> thus put longer (more precise) values to the top. */</span>
+<a name="line-262"></a> <span class="kt">int</span> <span class="n">i</span><span class="p">;</span>
+<a name="line-263"></a> <span class="k">struct</span> <span class="n">_ph_list</span> <span class="p">{</span>
+<a name="line-264"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
+<a name="line-265"></a> <span class="n">WeatherConditionPhenomenon</span> <span class="n">ph</span><span class="p">;</span>
+<a name="line-266"></a> <span class="p">}</span> <span class="n">ph_list</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
+<a name="line-267"></a> <span class="p">{</span> <span class="s">&quot;Ice Crystals&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_ICE_CRYSTALS</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-268"></a> <span class="p">{</span> <span class="s">&quot;Volcanic Ash&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_VOLCANIC_ASH</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-269"></a> <span class="p">{</span> <span class="s">&quot;Blowing Sand&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_SANDSTORM</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-270"></a> <span class="p">{</span> <span class="s">&quot;Blowing Dust&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_DUSTSTORM</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-271"></a> <span class="p">{</span> <span class="s">&quot;Blowing Snow&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_FUNNEL_CLOUD</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-272"></a> <span class="p">{</span> <span class="s">&quot;Drizzle&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_DRIZZLE</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-273"></a> <span class="p">{</span> <span class="s">&quot;Rain&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_RAIN</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-274"></a> <span class="p">{</span> <span class="s">&quot;Snow&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_SNOW</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-275"></a> <span class="p">{</span> <span class="s">&quot;Fog&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_FOG</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-276"></a> <span class="p">{</span> <span class="s">&quot;Smoke&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_SMOKE</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-277"></a> <span class="p">{</span> <span class="s">&quot;Sand&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_SAND</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-278"></a> <span class="p">{</span> <span class="s">&quot;Haze&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_HAZE</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-279"></a> <span class="p">{</span> <span class="s">&quot;Dust&quot;</span><span class="p">,</span> <span class="n">PHENOMENON_DUST</span> <span class="p">}</span> <span class="cm">/*,</span>
+<a name="line-280"></a><span class="cm"> { &quot;&quot;, PHENOMENON_SNOW_GRAINS } ,</span>
+<a name="line-281"></a><span class="cm"> { &quot;&quot;, PHENOMENON_ICE_PELLETS } ,</span>
+<a name="line-282"></a><span class="cm"> { &quot;&quot;, PHENOMENON_HAIL } ,</span>
+<a name="line-283"></a><span class="cm"> { &quot;&quot;, PHENOMENON_SMALL_HAIL } ,</span>
+<a name="line-284"></a><span class="cm"> { &quot;&quot;, PHENOMENON_UNKNOWN_PRECIPITATION } ,</span>
+<a name="line-285"></a><span class="cm"> { &quot;&quot;, PHENOMENON_MIST } ,</span>
+<a name="line-286"></a><span class="cm"> { &quot;&quot;, PHENOMENON_SPRAY } ,</span>
+<a name="line-287"></a><span class="cm"> { &quot;&quot;, PHENOMENON_SQUALL } ,</span>
+<a name="line-288"></a><span class="cm"> { &quot;&quot;, PHENOMENON_TORNADO } ,</span>
+<a name="line-289"></a><span class="cm"> { &quot;&quot;, PHENOMENON_DUST_WHIRLS } */</span>
+<a name="line-290"></a> <span class="p">};</span>
+<a name="line-291"></a> <span class="k">struct</span> <span class="n">_sky_list</span> <span class="p">{</span>
+<a name="line-292"></a> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">;</span>
+<a name="line-293"></a> <span class="n">WeatherSky</span> <span class="n">sky</span><span class="p">;</span>
+<a name="line-294"></a> <span class="p">}</span> <span class="n">sky_list</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
+<a name="line-295"></a> <span class="p">{</span> <span class="s">&quot;Mostly Sunny&quot;</span><span class="p">,</span> <span class="n">SKY_BROKEN</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-296"></a> <span class="p">{</span> <span class="s">&quot;Mostly Clear&quot;</span><span class="p">,</span> <span class="n">SKY_BROKEN</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-297"></a> <span class="p">{</span> <span class="s">&quot;Partly Cloudy&quot;</span><span class="p">,</span> <span class="n">SKY_SCATTERED</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-298"></a> <span class="p">{</span> <span class="s">&quot;Mostly Cloudy&quot;</span><span class="p">,</span> <span class="n">SKY_FEW</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-299"></a> <span class="p">{</span> <span class="s">&quot;Sunny&quot;</span><span class="p">,</span> <span class="n">SKY_CLEAR</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-300"></a> <span class="p">{</span> <span class="s">&quot;Clear&quot;</span><span class="p">,</span> <span class="n">SKY_CLEAR</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-301"></a> <span class="p">{</span> <span class="s">&quot;Cloudy&quot;</span><span class="p">,</span> <span class="n">SKY_OVERCAST</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-302"></a> <span class="p">{</span> <span class="s">&quot;Clouds&quot;</span><span class="p">,</span> <span class="n">SKY_SCATTERED</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-303"></a> <span class="p">{</span> <span class="s">&quot;Rain&quot;</span><span class="p">,</span> <span class="n">SKY_SCATTERED</span> <span class="p">}</span> <span class="p">,</span>
+<a name="line-304"></a> <span class="p">{</span> <span class="s">&quot;Snow&quot;</span><span class="p">,</span> <span class="n">SKY_SCATTERED</span> <span class="p">}</span>
+<a name="line-305"></a> <span class="p">};</span>
+<a name="line-306"></a>
+<a name="line-307"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">valid</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span>
+<a name="line-308"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-309"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">forecast</span> <span class="o">=</span> <span class="n">g_strdup</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">val</span><span class="p">);</span>
+<a name="line-310"></a>
+<a name="line-311"></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">&lt;</span> <span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">ph_list</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-312"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strstr</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">val</span><span class="p">,</span> <span class="n">ph_list</span> <span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">name</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-313"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">cond</span><span class="p">.</span><span class="n">phenomenon</span> <span class="o">=</span> <span class="n">ph_list</span> <span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">ph</span><span class="p">;</span>
+<a name="line-314"></a> <span class="k">break</span><span class="p">;</span>
+<a name="line-315"></a> <span class="p">}</span>
+<a name="line-316"></a> <span class="p">}</span>
+<a name="line-317"></a>
+<a name="line-318"></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">&lt;</span> <span class="n">G_N_ELEMENTS</span> <span class="p">(</span><span class="n">sky_list</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-319"></a> <span class="k">if</span> <span class="p">(</span><span class="n">strstr</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">val</span><span class="p">,</span> <span class="n">sky_list</span> <span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">name</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-320"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">sky</span> <span class="o">=</span> <span class="n">sky_list</span> <span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">sky</span><span class="p">;</span>
+<a name="line-321"></a> <span class="k">break</span><span class="p">;</span>
+<a name="line-322"></a> <span class="p">}</span>
+<a name="line-323"></a> <span class="p">}</span>
+<a name="line-324"></a> <span class="p">}</span>
+<a name="line-325"></a>
+<a name="line-326"></a> <span class="k">if</span> <span class="p">(</span><span class="n">val</span><span class="p">)</span>
+<a name="line-327"></a> <span class="n">xmlFree</span> <span class="p">(</span><span class="n">val</span><span class="p">);</span>
+<a name="line-328"></a>
+<a name="line-329"></a> <span class="n">at</span> <span class="o">=</span> <span class="n">at</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">;</span>
+<a name="line-330"></a> <span class="p">}</span>
+<a name="line-331"></a> <span class="p">}</span>
+<a name="line-332"></a> <span class="p">}</span>
+<a name="line-333"></a> <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="n">res</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-336"></a> <span class="n">gboolean</span> <span class="n">have_any</span> <span class="o">=</span> <span class="n">FALSE</span><span class="p">;</span>
+<a name="line-337"></a> <span class="n">GSList</span> <span class="o">*</span><span class="n">r</span><span class="p">;</span>
+<a name="line-338"></a>
+<a name="line-339"></a> <span class="cm">/* Remove invalid forecast data from the list.</span>
+<a name="line-340"></a><span class="cm"> They should be all valid or all invalid. */</span>
+<a name="line-341"></a> <span class="k">for</span> <span class="p">(</span><span class="n">r</span> <span class="o">=</span> <span class="n">res</span><span class="p">;</span> <span class="n">r</span><span class="p">;</span> <span class="n">r</span> <span class="o">=</span> <span class="n">r</span><span class="o">-&gt;</span><span class="n">next</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-342"></a> <span class="n">WeatherInfo</span> <span class="o">*</span><span class="n">nfo</span> <span class="o">=</span> <span class="n">r</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">;</span>
+<a name="line-343"></a>
+<a name="line-344"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">nfo</span> <span class="o">||</span> <span class="o">!</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">valid</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-345"></a> <span class="k">if</span> <span class="p">(</span><span class="n">r</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">)</span>
+<a name="line-346"></a> <span class="n">weather_info_free</span> <span class="p">(</span><span class="n">r</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">);</span>
+<a name="line-347"></a>
+<a name="line-348"></a> <span class="n">r</span><span class="o">-&gt;</span><span class="n">data</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-349"></a> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+<a name="line-350"></a> <span class="n">have_any</span> <span class="o">=</span> <span class="n">TRUE</span><span class="p">;</span>
+<a name="line-351"></a>
+<a name="line-352"></a> <span class="k">if</span> <span class="p">(</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">tempMinMaxValid</span><span class="p">)</span>
+<a name="line-353"></a> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_min</span> <span class="o">+</span> <span class="n">nfo</span><span class="o">-&gt;</span><span class="n">temp_max</span><span class="p">)</span> <span class="o">/</span> <span class="mf">2.0</span><span class="p">;</span>
+<a name="line-354"></a> <span class="p">}</span>
+<a name="line-355"></a> <span class="p">}</span>
+<a name="line-356"></a>
+<a name="line-357"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">have_any</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-358"></a> <span class="cm">/* data members are freed already */</span>
+<a name="line-359"></a> <span class="n">g_slist_free</span> <span class="p">(</span><span class="n">res</span><span class="p">);</span>
+<a name="line-360"></a> <span class="n">res</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-361"></a> <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="k">break</span><span class="p">;</span>
+<a name="line-365"></a> <span class="p">}</span>
+<a name="line-366"></a> <span class="p">}</span>
+<a name="line-367"></a>
+<a name="line-368"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">time_layout</span><span class="p">);</span>
+<a name="line-369"></a>
+<a name="line-370"></a> <span class="cm">/* stop seeking XML */</span>
+<a name="line-371"></a> <span class="k">break</span><span class="p">;</span>
+<a name="line-372"></a> <span class="p">}</span>
+<a name="line-373"></a> <span class="p">}</span>
+<a name="line-374"></a> <span class="n">xmlFreeDoc</span> <span class="p">(</span><span class="n">doc</span><span class="p">);</span>
+<a name="line-375"></a>
+<a name="line-376"></a> <span class="cp">#undef XC</span>
+<a name="line-377"></a> <span class="cp">#undef isElem</span>
+<a name="line-378"></a>
+<a name="line-379"></a> <span class="k">return</span> <span class="n">res</span><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="k">static</span> <span class="kt">void</span>
+<a name="line-383"></a><span class="nf">iwin_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-384"></a><span class="p">{</span>
+<a name="line-385"></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-386"></a>
+<a name="line-387"></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-388"></a>
+<a name="line-389"></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">-&gt;</span><span class="n">status_code</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-390"></a> <span class="cm">/* forecast data is not really interesting anyway ;) */</span>
+<a name="line-391"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">&quot;Failed to get IWIN forecast data: %d %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
+<a name="line-392"></a> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">reason_phrase</span><span class="p">);</span>
+<a name="line-393"></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-394"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-395"></a> <span class="p">}</span>
+<a name="line-396"></a>
+<a name="line-397"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast_type</span> <span class="o">==</span> <span class="n">FORECAST_LIST</span><span class="p">)</span>
+<a name="line-398"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast_list</span> <span class="o">=</span> <span class="n">parseForecastXml</span> <span class="p">(</span><span class="n">msg</span><span class="o">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-399"></a> <span class="k">else</span>
+<a name="line-400"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast</span> <span class="o">=</span> <span class="n">formatWeatherMsg</span> <span class="p">(</span><span class="n">g_strdup</span> <span class="p">(</span><span class="n">msg</span><span class="o">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">));</span>
+<a name="line-401"></a>
+<a name="line-402"></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-403"></a><span class="p">}</span>
+<a name="line-404"></a>
+<a name="line-405"></a><span class="cm">/* Get forecast into newly alloc&#39;ed string */</span>
+<a name="line-406"></a><span class="kt">void</span>
+<a name="line-407"></a><span class="nf">iwin_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-408"></a><span class="p">{</span>
+<a name="line-409"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">url</span><span class="p">,</span> <span class="o">*</span><span class="n">state</span><span class="p">,</span> <span class="o">*</span><span class="n">zone</span><span class="p">;</span>
+<a name="line-410"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span>
+<a name="line-411"></a> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">;</span>
+<a name="line-412"></a>
+<a name="line-413"></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-414"></a><span class="hll"> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">location</span><span class="p">;</span><span class="error2">&lt;--- Assignment 'loc=info->location', assigned value is 0</span>
+</span><a name="line-415"></a><span class="hll"> <span class="n">g_return_if_fail</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="error2">&lt;--- Assuming that condition 'loc!=NULL' is not redundant</span>
+</span><a name="line-416"></a>
+<a name="line-417"></a><span class="hll"> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</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">&#39;-&#39;</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast_type</span> <span class="o">!=</span> <span class="n">FORECAST_LIST</span> <span class="o">||</span> <span class="o">!</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">latlon_valid</span><span class="p">))</span><span class="error2">&lt;--- Null pointer dereference</span>
+</span><a name="line-418"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-419"></a>
+<a name="line-420"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-421"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast</span><span class="p">);</span>
+<a name="line-422"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-423"></a> <span class="p">}</span>
+<a name="line-424"></a>
+<a name="line-425"></a> <span class="n">free_forecast_list</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span>
+<a name="line-426"></a>
+<a name="line-427"></a> <span class="k">if</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast_type</span> <span class="o">==</span> <span class="n">FORECAST_LIST</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-428"></a> <span class="cm">/* see the description here: http://www.weather.gov/forecasts/xml/ */</span>
+<a name="line-429"></a> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">latlon_valid</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-430"></a> <span class="n">GDateTime</span> <span class="o">*</span><span class="n">dt</span><span class="p">;</span>
+<a name="line-431"></a> <span class="n">gint</span> <span class="n">year</span><span class="p">,</span> <span class="n">month</span><span class="p">,</span> <span class="n">day</span><span class="p">;</span>
+<a name="line-432"></a>
+<a name="line-433"></a> <span class="n">dt</span> <span class="o">=</span> <span class="n">g_date_time_new_now_local</span> <span class="p">();</span>
+<a name="line-434"></a> <span class="n">g_date_time_get_ymd</span> <span class="p">(</span><span class="n">dt</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">year</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">month</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">day</span><span class="p">);</span>
+<a name="line-435"></a> <span class="n">g_date_time_unref</span> <span class="p">(</span><span class="n">dt</span><span class="p">);</span>
+<a name="line-436"></a>
+<a name="line-437"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">&quot;http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?&amp;lat=%.02f&amp;lon=%.02f&amp;format=24+hourly&amp;startDate=%04d-%02d-%02d&amp;numDays=7&quot;</span><span class="p">,</span>
+<a name="line-438"></a> <span class="n">RADIANS_TO_DEGREES</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">latitude</span><span class="p">),</span> <span class="n">RADIANS_TO_DEGREES</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">longitude</span><span class="p">),</span> <span class="n">year</span><span class="p">,</span> <span class="n">month</span><span class="p">,</span> <span class="n">day</span><span class="p">);</span>
+<a name="line-439"></a>
+<a name="line-440"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_message_new</span> <span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span>
+<a name="line-441"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span>
+<a name="line-442"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">iwin_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-443"></a>
+<a name="line-444"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span>
+<a name="line-445"></a> <span class="p">}</span>
+<a name="line-446"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-447"></a> <span class="p">}</span>
+<a name="line-448"></a>
+<a name="line-449"></a> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</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">&#39;:&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-450"></a> <span class="cm">/* Met Office Region Names */</span>
+<a name="line-451"></a> <span class="n">metoffice_start_open</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span>
+<a name="line-452"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-453"></a> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</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">&#39;@&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-454"></a> <span class="cm">/* Australian BOM forecasts */</span>
+<a name="line-455"></a> <span class="n">bom_start_open</span> <span class="p">(</span><span class="n">info</span><span class="p">);</span>
+<a name="line-456"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-457"></a> <span class="p">}</span>
+<a name="line-458"></a>
+<a name="line-459"></a> <span class="cm">/* The zone for Pittsburgh (for example) is given as PAZ021 in the locations</span>
+<a name="line-460"></a><span class="cm"> ** file (the PA stands for the state pennsylvania). The url used wants the state</span>
+<a name="line-461"></a><span class="cm"> ** as pa, and the zone as lower case paz021.</span>
+<a name="line-462"></a><span class="cm"> */</span>
+<a name="line-463"></a> <span class="n">zone</span> <span class="o">=</span> <span class="n">g_ascii_strdown</span> <span class="p">(</span><span class="n">loc</span><span class="o">-&gt;</span><span class="n">zone</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">);</span>
+<a name="line-464"></a> <span class="n">state</span> <span class="o">=</span> <span class="n">g_strndup</span> <span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>
+<a name="line-465"></a>
+<a name="line-466"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">&quot;http://tgftp.nws.noaa.gov/data/forecasts/zone/%s/%s.txt&quot;</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">zone</span><span class="p">);</span>
+<a name="line-467"></a>
+<a name="line-468"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">zone</span><span class="p">);</span>
+<a name="line-469"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">state</span><span class="p">);</span>
+<a name="line-470"></a>
+<a name="line-471"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_message_new</span> <span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span>
+<a name="line-472"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span>
+<a name="line-473"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">iwin_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-474"></a>
+<a name="line-475"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span>
+<a name="line-476"></a><span class="p">}</span>
+</pre></div>
+</td></tr></table>
+ </div> <!-- /.wrapper -->
+ </div>
+ <div id="footer" class="footer">
+ <p>
+ Cppcheck 2.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/7.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/7.html
new file mode 100644
index 0000000..636f6cf
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/7.html
@@ -0,0 +1,528 @@
+
+<!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-met.c</h1>
+ </div>
+ <div class="wrapper">
+ <div id="menu">
+ <p id="filename"><a href="index.html">Defects:</a> weather-met.c</p>
+<a href="7.html#line-132"> nullPointerRedundantCheck 132</a><a href="7.html#line-132"> nullPointerArithmeticRedundantCheck 132</a><a href="7.html#line-133"> nullPointerRedundantCheck 133</a><a href="7.html#line-133"> nullPointerArithmeticRedundantCheck 133</a><a href="7.html#line-135"> nullPointerRedundantCheck 135</a><a href="7.html#line-138"> nullPointerArithmeticRedundantCheck 138</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</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-met.c - UK Met Office 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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;ctype.h&gt;</span><span class="cp"></span>
+<a name="line-24"></a><span class="cp">#include</span> <span class="cpf">&lt;stdlib.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</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">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-29"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</span><span class="cp"></span>
+<a name="line-30"></a>
+<a name="line-31"></a><span class="k">static</span> <span class="kt">char</span> <span class="o">*</span>
+<a name="line-32"></a><span class="nf">met_reprocess</span> <span class="p">(</span><span class="kt">char</span> <span class="o">*</span><span class="n">x</span><span class="p">,</span> <span class="kt">int</span> <span class="n">len</span><span class="p">)</span>
+<a name="line-33"></a><span class="p">{</span>
+<a name="line-34"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">p</span> <span class="o">=</span> <span class="n">x</span><span class="p">;</span>
+<a name="line-35"></a> <span class="kt">char</span> <span class="o">*</span><span class="n">o</span><span class="p">;</span>
+<a name="line-36"></a> <span class="kt">int</span> <span class="n">spacing</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-37"></a> <span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">buf</span><span class="p">;</span>
+<a name="line-38"></a> <span class="k">static</span> <span class="n">gint</span> <span class="n">buflen</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-39"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">lastspace</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-40"></a> <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-41"></a>
+<a name="line-42"></a> <span class="k">if</span> <span class="p">(</span><span class="n">buflen</span> <span class="o">&lt;</span> <span class="n">len</span><span class="p">)</span>
+<a name="line-43"></a> <span class="p">{</span>
+<a name="line-44"></a> <span class="k">if</span> <span class="p">(</span><span class="n">buf</span><span class="p">)</span>
+<a name="line-45"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">buf</span><span class="p">);</span>
+<a name="line-46"></a> <span class="n">buf</span> <span class="o">=</span> <span class="n">g_malloc</span> <span class="p">(</span><span class="n">len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+<a name="line-47"></a> <span class="n">buflen</span> <span class="o">=</span> <span class="n">len</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="n">o</span> <span class="o">=</span> <span class="n">buf</span><span class="p">;</span>
+<a name="line-51"></a> <span class="n">x</span> <span class="o">+=</span> <span class="n">len</span><span class="p">;</span> <span class="cm">/* End mark */</span>
+<a name="line-52"></a>
+<a name="line-53"></a> <span class="k">while</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span> <span class="o">&amp;&amp;</span> <span class="n">p</span> <span class="o">&lt;</span> <span class="n">x</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-54"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_isspace</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-55"></a> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">spacing</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-56"></a> <span class="n">spacing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+<a name="line-57"></a> <span class="n">lastspace</span> <span class="o">=</span> <span class="n">o</span><span class="p">;</span>
+<a name="line-58"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-59"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39; &#39;</span><span class="p">;</span>
+<a name="line-60"></a> <span class="p">}</span>
+<a name="line-61"></a> <span class="n">p</span><span class="o">++</span><span class="p">;</span>
+<a name="line-62"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-63"></a> <span class="p">}</span>
+<a name="line-64"></a> <span class="n">spacing</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-65"></a> <span class="k">if</span> <span class="p">(</span><span class="n">count</span> <span class="o">&gt;</span> <span class="mi">75</span> <span class="o">&amp;&amp;</span> <span class="n">lastspace</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-66"></a> <span class="n">count</span> <span class="o">=</span> <span class="n">o</span> <span class="o">-</span> <span class="n">lastspace</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
+<a name="line-67"></a> <span class="o">*</span><span class="n">lastspace</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-68"></a> <span class="n">lastspace</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span>
+<a name="line-69"></a> <span class="p">}</span>
+<a name="line-70"></a>
+<a name="line-71"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span> <span class="o">==</span> <span class="sc">&#39;&amp;&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-72"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_strncasecmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;&amp;amp;&quot;</span><span class="p">,</span> <span class="mi">5</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-73"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;&amp;&#39;</span><span class="p">;</span>
+<a name="line-74"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-75"></a> <span class="n">p</span> <span class="o">+=</span> <span class="mi">5</span><span class="p">;</span>
+<a name="line-76"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-77"></a> <span class="p">}</span>
+<a name="line-78"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_strncasecmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;&amp;lt;&quot;</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> <span class="p">{</span>
+<a name="line-79"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;&lt;&#39;</span><span class="p">;</span>
+<a name="line-80"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-81"></a> <span class="n">p</span> <span class="o">+=</span> <span class="mi">4</span><span class="p">;</span>
+<a name="line-82"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-83"></a> <span class="p">}</span>
+<a name="line-84"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_strncasecmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;&amp;gt;&quot;</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> <span class="p">{</span>
+<a name="line-85"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;&gt;&#39;</span><span class="p">;</span>
+<a name="line-86"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-87"></a> <span class="n">p</span> <span class="o">+=</span> <span class="mi">4</span><span class="p">;</span>
+<a name="line-88"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-89"></a> <span class="p">}</span>
+<a name="line-90"></a> <span class="p">}</span>
+<a name="line-91"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span> <span class="o">==</span> <span class="sc">&#39;&lt;&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-92"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_strncasecmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;&lt;BR&gt;&quot;</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> <span class="p">{</span>
+<a name="line-93"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-94"></a> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-95"></a> <span class="p">}</span>
+<a name="line-96"></a> <span class="k">if</span> <span class="p">(</span><span class="n">g_ascii_strncasecmp</span> <span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="s">&quot;&lt;B&gt;&quot;</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> <span class="p">{</span>
+<a name="line-97"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-98"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="sc">&#39;\n&#39;</span><span class="p">;</span>
+<a name="line-99"></a> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-100"></a> <span class="p">}</span>
+<a name="line-101"></a> <span class="n">p</span><span class="o">++</span><span class="p">;</span>
+<a name="line-102"></a> <span class="k">while</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span> <span class="o">&amp;&amp;</span> <span class="o">*</span><span class="n">p</span> <span class="o">!=</span> <span class="sc">&#39;&gt;&#39;</span><span class="p">)</span>
+<a name="line-103"></a> <span class="n">p</span><span class="o">++</span><span class="p">;</span>
+<a name="line-104"></a> <span class="k">if</span> <span class="p">(</span><span class="o">*</span><span class="n">p</span><span class="p">)</span>
+<a name="line-105"></a> <span class="n">p</span><span class="o">++</span><span class="p">;</span>
+<a name="line-106"></a> <span class="k">continue</span><span class="p">;</span>
+<a name="line-107"></a> <span class="p">}</span>
+<a name="line-108"></a> <span class="o">*</span><span class="n">o</span><span class="o">++</span> <span class="o">=</span> <span class="o">*</span><span class="n">p</span><span class="o">++</span><span class="p">;</span>
+<a name="line-109"></a> <span class="n">count</span><span class="o">++</span><span class="p">;</span>
+<a name="line-110"></a> <span class="p">}</span>
+<a name="line-111"></a> <span class="o">*</span><span class="n">o</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+<a name="line-112"></a> <span class="k">return</span> <span class="n">buf</span><span class="p">;</span>
+<a name="line-113"></a><span class="p">}</span>
+<a name="line-114"></a>
+<a name="line-115"></a>
+<a name="line-116"></a><span class="cm">/*</span>
+<a name="line-117"></a><span class="cm"> * Parse the metoffice forecast info.</span>
+<a name="line-118"></a><span class="cm"> * For mate 3.0 we want to just embed an HTML matecomponent component and</span>
+<a name="line-119"></a><span class="cm"> * be done with this ;)</span>
+<a name="line-120"></a><span class="cm"> */</span>
+<a name="line-121"></a>
+<a name="line-122"></a><span class="k">static</span> <span class="n">gchar</span> <span class="o">*</span>
+<a name="line-123"></a><span class="nf">met_parse</span> <span class="p">(</span><span class="k">const</span> <span class="n">gchar</span> <span class="o">*</span><span class="n">meto</span><span class="p">)</span>
+<a name="line-124"></a><span class="p">{</span>
+<a name="line-125"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">p</span><span class="p">;</span>
+<a name="line-126"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">rp</span><span class="p">;</span>
+<a name="line-127"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">r</span> <span class="o">=</span> <span class="n">g_strdup</span> <span class="p">(</span><span class="s">&quot;Met Office Forecast</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
+<a name="line-128"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">t</span><span class="p">;</span>
+<a name="line-129"></a>
+<a name="line-130"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">meto</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">r</span><span class="p">);</span>
+<a name="line-131"></a>
+<a name="line-132"></a><span class="hll"> <span class="n">p</span> <span class="o">=</span> <span class="n">strstr</span> <span class="p">(</span><span class="n">meto</span><span class="p">,</span> <span class="s">&quot;Summary: &lt;/b&gt;&quot;</span><span class="p">);</span><span class="error2">&lt;--- Assignment 'p=strstr(meto,"Summary: </b>")', assigned value is 0</span><span class="error2">&lt;--- Assignment 'p=strstr(meto,"Summary: </b>")', assigned value is 0</span>
+</span><a name="line-133"></a><span class="hll"> <span class="n">g_return_val_if_fail</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="n">r</span><span class="p">);</span><span class="error2">&lt;--- Assuming that condition 'p!=NULL' is not redundant</span><span class="error2">&lt;--- Assuming that condition 'p!=NULL' is not redundant</span>
+</span><a name="line-134"></a>
+<a name="line-135"></a><span class="hll"> <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">&quot;Text issued at:&quot;</span><span class="p">);</span><span class="error2">&lt;--- Null pointer dereference</span>
+</span><a name="line-136"></a> <span class="n">g_return_val_if_fail</span> <span class="p">(</span><span class="n">rp</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">,</span> <span class="n">r</span><span class="p">);</span>
+<a name="line-137"></a>
+<a name="line-138"></a><span class="hll"> <span class="n">p</span> <span class="o">+=</span> <span class="mi">13</span><span class="p">;</span><span class="error2">&lt;--- Null pointer addition</span>
+</span><a name="line-139"></a> <span class="cm">/* p to rp is the text block we want but in HTML malformat */</span>
+<a name="line-140"></a> <span class="n">t</span> <span class="o">=</span> <span class="n">g_strconcat</span> <span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">met_reprocess</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> <span class="nb">NULL</span><span class="p">);</span>
+<a name="line-141"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">r</span><span class="p">);</span>
+<a name="line-142"></a>
+<a name="line-143"></a> <span class="k">return</span> <span class="n">t</span><span class="p">;</span>
+<a name="line-144"></a><span class="p">}</span>
+<a name="line-145"></a>
+<a name="line-146"></a><span class="k">static</span> <span class="kt">void</span>
+<a name="line-147"></a><span class="nf">met_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-148"></a><span class="p">{</span>
+<a name="line-149"></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-150"></a>
+<a name="line-151"></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-152"></a>
+<a name="line-153"></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">-&gt;</span><span class="n">status_code</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-154"></a> <span class="n">g_warning</span> <span class="p">(</span><span class="s">&quot;Failed to get Met Office forecast data: %d %s.</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span>
+<a name="line-155"></a> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">reason_phrase</span><span class="p">);</span>
+<a name="line-156"></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-157"></a> <span class="k">return</span><span class="p">;</span>
+<a name="line-158"></a> <span class="p">}</span>
+<a name="line-159"></a>
+<a name="line-160"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">forecast</span> <span class="o">=</span> <span class="n">met_parse</span> <span class="p">(</span><span class="n">msg</span><span class="o">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">);</span>
+<a name="line-161"></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-162"></a><span class="p">}</span>
+<a name="line-163"></a>
+<a name="line-164"></a><span class="kt">void</span>
+<a name="line-165"></a><span class="nf">metoffice_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-166"></a><span class="p">{</span>
+<a name="line-167"></a> <span class="n">gchar</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span>
+<a name="line-168"></a> <span class="n">SoupMessage</span> <span class="o">*</span><span class="n">msg</span><span class="p">;</span>
+<a name="line-169"></a> <span class="n">WeatherLocation</span> <span class="o">*</span><span class="n">loc</span><span class="p">;</span>
+<a name="line-170"></a>
+<a name="line-171"></a> <span class="n">loc</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</span><span class="n">location</span><span class="p">;</span>
+<a name="line-172"></a> <span class="n">url</span> <span class="o">=</span> <span class="n">g_strdup_printf</span> <span class="p">(</span><span class="s">&quot;http://www.metoffice.gov.uk/weather/europe/uk/%s.html&quot;</span><span class="p">,</span> <span class="n">loc</span><span class="o">-&gt;</span><span class="n">zone</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+<a name="line-173"></a>
+<a name="line-174"></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">soup_message_new</span> <span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">);</span>
+<a name="line-175"></a> <span class="n">soup_session_queue_message</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">session</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="n">met_finish</span><span class="p">,</span> <span class="n">info</span><span class="p">);</span>
+<a name="line-176"></a> <span class="n">g_free</span> <span class="p">(</span><span class="n">url</span><span class="p">);</span>
+<a name="line-177"></a>
+<a name="line-178"></a> <span class="n">info</span><span class="o">-&gt;</span><span class="n">requests_pending</span><span class="o">++</span><span class="p">;</span>
+<a name="line-179"></a><span class="p">}</span>
+</pre></div>
+</td></tr></table>
+ </div> <!-- /.wrapper -->
+ </div>
+ <div id="footer" class="footer">
+ <p>
+ Cppcheck 2.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/8.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/8.html
new file mode 100644
index 0000000..8378edf
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/8.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="8.html#line-115"> knownConditionTrueFalse 115</a><a href="8.html#line-145"> knownConditionTrueFalse 145</a><a href="8.html#line-454"> unreadVariable 454</a><a href="8.html#line-493"> variableScope 493</a><a href="8.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"> * &lt;http://www.gnu.org/licenses/&gt;.</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">&lt;config.h&gt;</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">&lt;stdlib.h&gt;</span><span class="cp"></span>
+<a name="line-24"></a><span class="cp">#include</span> <span class="cpf">&lt;string.h&gt;</span><span class="cp"></span>
+<a name="line-25"></a><span class="cp">#include</span> <span class="cpf">&lt;sys/types.h&gt;</span><span class="cp"></span>
+<a name="line-26"></a><span class="cp">#include</span> <span class="cpf">&lt;regex.h&gt;</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">&quot;weather.h&quot;</span><span class="cp"></span>
+<a name="line-30"></a><span class="cp">#include</span> <span class="cpf">&quot;weather-priv.h&quot;</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">&amp;</span><span class="n">now</span><span class="p">,</span> <span class="o">&amp;</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&#39;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">&gt;</span> <span class="n">tm</span><span class="p">.</span><span class="n">tm_mday</span><span class="p">)</span> <span class="o">&amp;&amp;</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">&amp;</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">&amp;</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">&quot;%2u%2u%2u&quot;</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">day</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">hr</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">min</span><span class="p">);</span>
+<a name="line-81"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;VRB&quot;</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">&#39;G&#39;</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">&quot;MPS&quot;</span><span class="p">))</span>
+<a name="line-111"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">&lt;=</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">&lt;=</span> <span class="mi">11</span><span class="p">))</span><span class="error2">&lt;--- Assuming that condition '349<=dir' is not redundant</span>
+</span><a name="line-116"></a> <span class="n">info</span><span class="o">-&gt;</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="k">else</span> <span class="k">if</span> <span class="p">((</span><span class="mi">12</span> <span class="o">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">33</span><span class="p">))</span>
+<a name="line-118"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">56</span><span class="p">))</span>
+<a name="line-120"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">78</span><span class="p">))</span>
+<a name="line-122"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">101</span><span class="p">))</span>
+<a name="line-124"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">123</span><span class="p">))</span>
+<a name="line-126"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">146</span><span class="p">))</span>
+<a name="line-128"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">168</span><span class="p">))</span>
+<a name="line-130"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">191</span><span class="p">))</span>
+<a name="line-132"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">213</span><span class="p">))</span>
+<a name="line-134"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">236</span><span class="p">))</span>
+<a name="line-136"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">258</span><span class="p">))</span>
+<a name="line-138"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">281</span><span class="p">))</span>
+<a name="line-140"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">303</span><span class="p">))</span>
+<a name="line-142"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">326</span><span class="p">))</span>
+<a name="line-144"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;=</span> <span class="n">dir</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">dir</span> <span class="o">&lt;=</span> <span class="mi">348</span><span class="p">))</span><span class="error2">&lt;--- Condition 'dir<=348' is always true</span>
+</span><a name="line-146"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;CAVOK&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-159"></a> <span class="c1">// &quot;Ceiling And Visibility OK&quot;: visibility &gt;= 10 KM</span>
+<a name="line-160"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">&quot;SM&quot;</span><span class="p">)))</span> <span class="p">{</span>
+<a name="line-163"></a> <span class="c1">// US observation: field ends with &quot;SM&quot;</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">&#39;/&#39;</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">&#39;M&#39;</span><span class="p">)</span> <span class="p">{</span>
+<a name="line-167"></a> <span class="n">info</span><span class="o">-&gt;</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">&#39;0&#39;</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">-&gt;</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">&#39; &#39;</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">&#39;\0&#39;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;CLR&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-209"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SKC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-211"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;NSC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-213"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;BKN&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-215"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SCT&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-217"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;FEW&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-219"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;OVC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-221"></a> <span class="n">info</span><span class="o">-&gt;</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">&#39;A&#39;</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">-&gt;</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 == &#39;Q&#39; */</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">-&gt;</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">&#39;/&#39;</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">-&gt;</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">&#39;M&#39;</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">-&gt;</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">&#39;M&#39;</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">-&gt;</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">&gt;</span> <span class="mi">3</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">((</span><span class="o">*</span><span class="n">tokp</span> <span class="o">==</span> <span class="sc">&#39;+&#39;</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">&#39;-&#39;</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">&#39;+&#39;</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">&#39;-&#39;</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">&lt;</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">&#39;\0&#39;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-303"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;-&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-305"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;+&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-307"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;VC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-309"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;MI&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-311"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;BC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-313"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;PR&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-315"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;TS&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-317"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;BL&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-319"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SH&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-321"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;DR&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-323"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;FZ&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-325"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;DZ&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-331"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;RA&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-333"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SN&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-335"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SG&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-337"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;IC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-339"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;PE&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-341"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;GR&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-343"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;GS&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-345"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;UP&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-347"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;BR&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-349"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;FG&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-351"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;FU&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-353"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;VA&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-355"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SA&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-357"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;HZ&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-359"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;PY&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-361"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;DU&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-363"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SQ&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-365"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;SS&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-367"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;DS&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-369"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;PO&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-371"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;+FC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-373"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;FC&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-375"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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 &quot;([0-9]{6})Z&quot;</span>
+<a name="line-385"></a><span class="cp">#define WIND_RE_STR &quot;(([0-9]{3})|VRB)([0-9]?[0-9]{2})(G[0-9]?[0-9]{2})?(KT|MPS)&quot;</span>
+<a name="line-386"></a><span class="cp">#define VIS_RE_STR &quot;((([0-9]?[0-9])|(M?([12] )?([1357]/1?[0-9])))SM)|&quot; \</span>
+<a name="line-387"></a><span class="cp"> &quot;([0-9]{4}(N|NE|E|SE|S|SW|W|NW( [0-9]{4}(N|NE|E|SE|S|SW|W|NW))?)?)|&quot; \</span>
+<a name="line-388"></a><span class="cp"> &quot;CAVOK&quot;</span>
+<a name="line-389"></a><span class="cp">#define COND_RE_STR &quot;(-|\\+)?(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)&quot;</span>
+<a name="line-390"></a><span class="cp">#define CLOUD_RE_STR &quot;((CLR|BKN|SCT|FEW|OVC|SKC|NSC)([0-9]{3}|</span><span class="c1">///)?(CB|TCU|///)?)&quot;</span>
+<a name="line-391"></a><span class="cp">#define TEMP_RE_STR &quot;(M?[0-9][0-9])/(M?(</span><span class="c1">//|[0-9][0-9])?)&quot;</span>
+<a name="line-392"></a><span class="cp">#define PRES_RE_STR &quot;(A|Q)([0-9]{4})&quot;</span>
+<a name="line-393"></a>
+<a name="line-394"></a><span class="cm">/* POSIX regular expressions do not allow us to express &quot;match whole words</span>
+<a name="line-395"></a><span class="cm"> * only&quot; 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 &quot;(^| )(&quot;</span>
+<a name="line-399"></a><span class="cp">#define RE_SUFFIX &quot;)( |$)&quot;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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">&amp;</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 &quot;RMK&quot; 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">&quot; RMK &quot;</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">&#39;\0&#39;</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">&lt;--- 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">&lt;</span> <span class="n">RE_NUM</span> <span class="o">&amp;&amp;</span> <span class="n">rm2</span><span class="p">.</span><span class="n">rm_so</span> <span class="o">&gt;</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">&amp;</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">&amp;</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">&amp;&amp;</span> <span class="n">rm</span><span class="p">.</span><span class="n">rm_so</span> <span class="o">&lt;</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">&#39; &#39;</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">&#39; &#39;</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">&quot; &quot;</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">&lt;--- The scope of the variable 'endtag' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;endtag&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">&lt;--- The scope of the variable 'metar' can be reduced. <span class="marker">[+]</span></span><div class="content">The scope of the variable &apos;metar&apos; 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 &apos;i&apos; can be reduced:
+void f(int x)
+{
+ int i = 0;
+ if (x) {
+ // it&apos;s safe to move &apos;int i = 0;&apos; here
+ for (int n = 0; n &lt; 10; ++n) {
+ // it is possible but not safe to move &apos;int i = 0;&apos; here
+ do_something(&amp;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">-&gt;</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">-&gt;</span><span class="n">status_code</span><span class="p">))</span>
+<a name="line-501"></a> <span class="n">info</span><span class="o">-&gt;</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">&quot;Failed to get METAR data: %d %s.</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">),</span>
+<a name="line-505"></a> <span class="n">msg</span><span class="o">-&gt;</span><span class="n">status_code</span><span class="p">,</span> <span class="n">msg</span><span class="o">-&gt;</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">-&gt;</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">&quot;&lt;raw_text&gt;%s&quot;</span><span class="p">,</span> <span class="n">loc</span><span class="o">-&gt;</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">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</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">&quot;&lt;/raw_text&gt;&quot;</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">-&gt;</span><span class="n">response_body</span><span class="o">-&gt;</span><span class="n">data</span><span class="p">,</span> <span class="s">&quot;aviationweather.gov&quot;</span><span class="p">))</span> <span class="p">{</span>
+<a name="line-526"></a> <span class="cm">/* The response doesn&#39;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">-&gt;</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">-&gt;</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">-&gt;</span><span class="n">valid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</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">&quot;WeatherInfo missing location&quot;</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">&quot;GET&quot;</span><span class="p">,</span> <span class="s">&quot;https://www.aviationweather.gov/adds/dataserver_current/httpparam&quot;</span><span class="p">,</span>
+<a name="line-554"></a> <span class="s">&quot;dataSource&quot;</span><span class="p">,</span> <span class="s">&quot;metars&quot;</span><span class="p">,</span>
+<a name="line-555"></a> <span class="s">&quot;requestType&quot;</span><span class="p">,</span> <span class="s">&quot;retrieve&quot;</span><span class="p">,</span>
+<a name="line-556"></a> <span class="s">&quot;format&quot;</span><span class="p">,</span> <span class="s">&quot;xml&quot;</span><span class="p">,</span>
+<a name="line-557"></a> <span class="s">&quot;hoursBeforeNow&quot;</span><span class="p">,</span> <span class="s">&quot;3&quot;</span><span class="p">,</span>
+<a name="line-558"></a> <span class="s">&quot;mostRecent&quot;</span><span class="p">,</span> <span class="s">&quot;true&quot;</span><span class="p">,</span>
+<a name="line-559"></a> <span class="s">&quot;fields&quot;</span><span class="p">,</span> <span class="s">&quot;raw_text&quot;</span><span class="p">,</span>
+<a name="line-560"></a> <span class="s">&quot;stationString&quot;</span><span class="p">,</span> <span class="n">loc</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/9.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/9.html
new file mode 100644
index 0000000..2872af8
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/9.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="9.html#line-164"> redundantInitialization 164</a><a href="9.html#line-165"> redundantInitialization 165</a><a href="9.html#line-178"> redundantInitialization 178</a><a href="9.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"> * &lt;http://www.gnu.org/licenses/&gt;.</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"> * &quot;Practical Astronomy With Your Calculator&quot; (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 &quot;steps&quot; 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">&lt;config.h&gt;</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">&lt;math.h&gt;</span><span class="cp"></span>
+<a name="line-32"></a><span class="cp">#include</span> <span class="cpf">&lt;time.h&gt;</span><span class="cp"></span>
+<a name="line-33"></a><span class="cp">#include</span> <span class="cpf">&lt;glib.h&gt;</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">&quot;weather-priv.h&quot;</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&#39;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">&lt;</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&#39;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">&lt;</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">&lt;</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 &amp; 15)</span>
+<a name="line-121"></a><span class="cm"> * Returned &quot;rise&quot; and &quot;set&quot; 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">&lt;</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">&lt;</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">&lt;</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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latitude</span><span class="p">;</span><span class="error2">&lt;--- 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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">longitude</span><span class="p">;</span><span class="error2">&lt;--- 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&#39;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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latitude</span><span class="p">;</span><span class="error2">&lt;--- 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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">longitude</span><span class="p">;</span><span class="error2">&lt;--- 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">&gt;=</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">&gt;</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">&amp;</span><span class="n">ra1</span><span class="p">,</span> <span class="o">&amp;</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">&amp;</span><span class="n">ra2</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</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">&gt;</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">&lt;</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">-&gt;</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">&gt;</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">&lt;</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">-&gt;</span><span class="n">midnightSun</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</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">&amp;</span><span class="n">rise1</span><span class="p">,</span> <span class="o">&amp;</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">&amp;</span><span class="n">rise2</span><span class="p">,</span> <span class="o">&amp;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="n">info</span><span class="o">-&gt;</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">&lt;</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">&lt;</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">&lt;</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">&lt;</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">&lt;</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&#39;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&#39;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">&lt;</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">&gt;=</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">=</span> <span class="p">((</span><span class="n">rise1</span> <span class="o">&gt;=</span> <span class="mf">0.</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">rise1</span> <span class="o">&lt;</span> <span class="mf">24.</span><span class="p">));</span>
+<a name="line-275"></a> <span class="n">info</span><span class="o">-&gt;</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">&lt;</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">&gt;=</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">-&gt;</span><span class="n">sunsetValid</span> <span class="o">=</span> <span class="p">((</span><span class="n">set1</span> <span class="o">&gt;=</span> <span class="mf">0.</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">set1</span> <span class="o">&lt;</span> <span class="mf">24.</span><span class="p">));</span>
+<a name="line-283"></a> <span class="n">info</span><span class="o">-&gt;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">||</span> <span class="n">info</span><span class="o">-&gt;</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&#39;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">-&gt;</span><span class="n">location</span><span class="o">-&gt;</span><span class="n">latlon_valid</span> <span class="o">&amp;&amp;</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&#39;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 &quot;sun event&quot;:</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">&amp;</span><span class="n">now</span><span class="p">,</span> <span class="o">&amp;</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">&amp;</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">-&gt;</span><span class="n">sunsetValid</span> <span class="o">&amp;&amp;</span>
+<a name="line-347"></a> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunset</span> <span class="o">&gt;</span> <span class="n">now</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunset</span> <span class="o">&lt;</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">-&gt;</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">-&gt;</span><span class="n">sunriseValid</span> <span class="o">&amp;&amp;</span>
+<a name="line-350"></a> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunrise</span> <span class="o">&gt;</span> <span class="n">now</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="p">(</span><span class="n">info</span><span class="o">-&gt;</span><span class="n">sunrise</span> <span class="o">&lt;</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">-&gt;</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.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/index.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/index.html
new file mode 100644
index 0000000..41601d4
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/index.html
@@ -0,0 +1,167 @@
+
+<!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="knownConditionTrueFalse" name="knownConditionTrueFalse" checked></td><td>3</td><td>knownConditionTrueFalse</td></tr>
+ <tr><td><input type="checkbox" onclick="toggleDisplay(this.id)" id="nullPointerRedundantCheck" name="nullPointerRedundantCheck" checked></td><td>3</td><td>nullPointerRedundantCheck</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="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="nullPointerArithmeticRedundantCheck" name="nullPointerArithmeticRedundantCheck" checked></td><td>1</td><td>nullPointerArithmeticRedundantCheck</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>32</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="12.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 &apos;cmpcode&apos; 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 &apos;second_isdst&apos; 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 &apos;next_tagname&apos; 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 &apos;i&apos; 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 &apos;len&apos; can be reduced.</td></tr>
+ <tr class="knownConditionTrueFalse"><td><a href="3.html#line-40">40</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/570.html">570</a></td><td>style</td><td >Condition &apos;filename&apos; is always false</td></tr>
+ <tr><td colspan="5"><a href="4.html">libmateweather/test_sun_moon.c</a></td></tr>
+ <tr class="knownConditionTrueFalse"><td><a href="4.html#line-58">58</a></td><td>knownConditionTrueFalse</td><td><a href="https://cwe.mitre.org/data/definitions/570.html">570</a></td><td>style</td><td >Condition &apos;gtime!=NULL&apos; is always false</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 &apos;asctime&apos; called. It is recommended to use &apos;strftime&apos; 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 &apos;asctime&apos; called. It is recommended to use &apos;strftime&apos; 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 &apos;asctime&apos; called. It is recommended to use &apos;strftime&apos; 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 &apos;asctime&apos; called. It is recommended to use &apos;strftime&apos; 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 &apos;asctime&apos; called. It is recommended to use &apos;strftime&apos; 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 &apos;rp&apos; can be reduced.</td></tr>
+ <tr><td colspan="5"><a href="6.html">libmateweather/weather-iwin.c</a></td></tr>
+ <tr class="nullPointerRedundantCheck"><td><a href="6.html#line-417">417</a></td><td>nullPointerRedundantCheck</td><td><a href="https://cwe.mitre.org/data/definitions/476.html">476</a></td><td>warning</td><td >Either the condition &apos;loc!=NULL&apos; is redundant or there is possible null pointer dereference: loc.</td></tr>
+ <tr><td colspan="5"><a href="7.html">libmateweather/weather-met.c</a></td></tr>
+ <tr class="nullPointerRedundantCheck"><td><a href="7.html#line-135">135</a></td><td>nullPointerRedundantCheck</td><td><a href="https://cwe.mitre.org/data/definitions/476.html">476</a></td><td>warning</td><td >Either the condition &apos;p!=NULL&apos; is redundant or there is possible null pointer dereference: p.</td></tr>
+ <tr class="nullPointerArithmeticRedundantCheck"><td><a href="7.html#line-138">138</a></td><td>nullPointerArithmeticRedundantCheck</td><td><a href="https://cwe.mitre.org/data/definitions/682.html">682</a></td><td>warning</td><td >Either the condition &apos;p!=NULL&apos; is redundant or there is pointer arithmetic with NULL pointer.</td></tr>
+ <tr><td colspan="5"><a href="8.html">libmateweather/weather-metar.c</a></td></tr>
+ <tr class="knownConditionTrueFalse"><td><a href="8.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 &apos;dir&lt;=348&apos; is always true</td></tr>
+ <tr class="unreadVariable"><td><a href="8.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 &apos;i&apos; is assigned a value that is never used.</td></tr>
+ <tr class="variableScope"><td><a href="8.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 &apos;endtag&apos; can be reduced.</td></tr>
+ <tr class="variableScope"><td><a href="8.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 &apos;metar&apos; can be reduced.</td></tr>
+ <tr><td colspan="5"><a href="9.html">libmateweather/weather-sun.c</a></td></tr>
+ <tr class="redundantInitialization"><td><a href="9.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 &apos;obsLat&apos;. The initialized value is overwritten before it is read.</td></tr>
+ <tr class="redundantInitialization"><td><a href="9.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 &apos;obsLon&apos;. The initialized value is overwritten before it is read.</td></tr>
+ <tr><td colspan="5"><a href="10.html">libmateweather/weather-wx.c</a></td></tr>
+ <tr class="nullPointerRedundantCheck"><td><a href="10.html#line-64">64</a></td><td>nullPointerRedundantCheck</td><td><a href="https://cwe.mitre.org/data/definitions/476.html">476</a></td><td>warning</td><td >Either the condition &apos;info!=NULL&apos; is redundant or there is possible null pointer dereference: info.</td></tr>
+ <tr><td colspan="5"><a href="11.html">libmateweather/weather.c</a></td></tr>
+ <tr class="variableScope"><td><a href="11.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 &apos;str&apos; can be reduced.</td></tr>
+ <tr class="uselessAssignmentPtrArg"><td><a href="11.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="11.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 &apos;location&apos; is assigned a value that is never used.</td></tr>
+ <tr class="variableScope"><td><a href="11.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 &apos;utf8&apos; can be reduced.</td></tr>
+ <tr class="variableScope"><td><a href="11.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 &apos;timeformat&apos; can be reduced.</td></tr>
+ <tr class="unsignedLessThanZero"><td><a href="11.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 &apos;strftime(buf,sizeof(buf),timeformat,&amp;tm)&apos; is less than zero.</td></tr>
+ <tr class="unsignedLessThanZero"><td><a href="11.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 &apos;strftime(buf,sizeof(buf),mateweather_gettext(&quot;%H:%M&quot;),&amp;tm)&apos; is less than zero.</td></tr>
+ <tr class="unsignedLessThanZero"><td><a href="11.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 &apos;strftime(buf,sizeof(buf),mateweather_gettext(&quot;%H:%M&quot;),&amp;tm)&apos; is less than zero.</td></tr>
+ </table>
+ </div> <!-- /.wrapper -->
+ </div>
+ <div id="footer" class="footer">
+ <p>
+ Cppcheck 2.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/stats.html b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/stats.html
new file mode 100644
index 0000000..e001184
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/stats.html
@@ -0,0 +1,119 @@
+
+<!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: 5<br>
+&#160;&#160;&#160;2&#160;<a href="7.html"> libmateweather/weather-met.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="11.html"> libmateweather/weather.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="10.html"> libmateweather/weather-wx.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="6.html"> libmateweather/weather-iwin.c</a><br>
+</p>
+<p>Top 10 files for style severity, total findings: 26<br>
+&#160;&#160;&#160;7&#160;<a href="11.html"> libmateweather/weather.c</a><br>
+&#160;&#160;&#160;6&#160;<a href="4.html"> libmateweather/test_sun_moon.c</a><br>
+&#160;&#160;&#160;4&#160;<a href="8.html"> libmateweather/weather-metar.c</a><br>
+&#160;&#160;&#160;2&#160;<a href="9.html"> libmateweather/weather-sun.c</a><br>
+&#160;&#160;&#160;2&#160;<a href="3.html"> libmateweather/test_metar.c</a><br>
+&#160;&#160;&#160;2&#160;<a href="2.html"> libmateweather/parser.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="5.html"> libmateweather/weather-bom.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="1.html"> libmateweather/mateweather-timezone.c</a><br>
+&#160;&#160;&#160;1&#160;<a href="0.html"> libmateweather/location-entry.c</a><br>
+</p>
+
+ </div> <!-- /.wrapper -->
+ </div>
+ <div id="footer" class="footer">
+ <p>
+ Cppcheck 2.1 - 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/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/style.css b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/style.css
new file mode 100644
index 0000000..07125f4
--- /dev/null
+++ b/2020-07-17-122136-1677-cppcheck@af3af510ab5b_master/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;
+}